Name: series-workflow6sdw5 Phase: Succeeded StartedAt: 2026-09-12 13:53:15 +0000 UTC FinishedAt: 2026-09-12 17:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[0] Phase: Succeeded StartedAt: 2026-09-12 13:53:15 +0000 UTC FinishedAt: 2026-09-12 13:58:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 13:53:15 +0000 UTC FinishedAt: 2026-09-12 13:58:36 +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": "348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "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": "348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "0949f8b9-d37e-473d-9e25-4c87ed0c3a43" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_ipv6_setsockopt", "ipv6_setsockopt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZWE5NmJkNGM0NDI5NTgwZDc5MjQ3MmY2NGE3YjBlNjkxYTMxYWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zOTgsNiAmIzQzOzM5OCwyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC4gKi9cbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuJiM0MztcdGNhc2UgSVBWNl9GUkVFQklORDpcbiYjNDM7XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdC8qIFNoYXJlZCB3aXRoIElQX0ZSRUVCSU5ELiAqL1xuJiM0MztcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4mIzQzO1x0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0LyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovXG4mIzQzO1x0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0Y2FzZSBJUFY2X1VOSUNBU1RfSE9QUzpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNjY2LDI3ICYjNDM7NjgxLDYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHYgPSAwO1xuIFx0XHRicmVhaztcbiBcbi1cdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcbi1cdFx0aWYgKHZhbGJvb2wgXHUwMDI2XHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7XG4tXHRcdFx0cmV0diA9IC1FUEVSTTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGRvbiYjMzk7dCBoYXZlIGEgc2VwYXJhdGUgdHJhbnNwYXJlbnQgYml0IGZvciBJUFY2IHdlIHVzZSB0aGUgb25lIGluIHRoZSBJUHY0IHNvY2tldCAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuLVx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGFsc28gZG9uJiMzOTt0IGhhdmUgYSBzZXBhcmF0ZSBmcmVlYmluZCBiaXQgZm9yIElQVjYgKi9cbi1cdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4tXHRcdHJldHYgPSAwO1xuLVx0XHRicmVhaztcbi1cbiBcdGNhc2UgSVBWNl9SRUNWT1JJR0RTVEFERFI6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIFx0XHRcdGdvdG8gZV9pbnZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwdjZfc2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkb19pcHY2X3NldHNvY2tvcHQoKSB0byBoYW5kbGUgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyB3aXRob3V0IGFjcXVpcmluZyBzb2Nrb3B0X2xvY2tfc29jaygpLiBUaGlzIGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHNldHNvY2tvcHQoKSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgKGZvciBJUFY2X0ZSRUVCSU5EKSBvciBhcHByb3ByaWF0ZWx5IHBlcm1pdHRlZCBuYW1lc3BhY2VzIChmb3IgSVBWNl9UUkFOU1BBUkVOVCksIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gY29uY3VycmVuY3kgaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2VhOTZiZDRjNDQyOTU4MGQ3OTI0NzJmNjRhN2IwZTY5MWEzMWFjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDFmNjhmYjY0YTQzZWYuLjRiMzUzNjU3MWM5ODAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTM5OCw2ICYjNDM7Mzk4LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCiAJLyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqLwogCXN3aXRjaCAob3B0bmFtZSkgewomIzQzOwljYXNlIElQVjZfRlJFRUJJTkQ6CiYjNDM7CQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi8KJiM0MzsJCWluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgSVBWNl9UUkFOU1BBUkVOVDoKJiM0MzsJCWlmICh2YWxib29sICZhbXA7JmFtcDsgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfUkFXKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi8KJiM0MzsJCWluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpOwomIzQzOwkJcmV0dXJuIDA7CiAJY2FzZSBJUFY2X1VOSUNBU1RfSE9QUzoKIAkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NjYsMjcgJiM0Mzs2ODEsNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJcmV0diA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBJUFY2X1RSQU5TUEFSRU5UOgotCQlpZiAodmFsYm9vbCAmYW1wOyZhbXA7ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykgJmFtcDsmYW1wOwotCQkgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7Ci0JCQlyZXR2ID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQotCQkJZ290byBlX2ludmFsOwotCQkvKiB3ZSBkb24mIzM5O3QgaGF2ZSBhIHNlcGFyYXRlIHRyYW5zcGFyZW50IGJpdCBmb3IgSVBWNiB3ZSB1c2UgdGhlIG9uZSBpbiB0aGUgSVB2NCBzb2NrZXQgKi8KLQkJaW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7Ci0JCXJldHYgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVBWNl9GUkVFQklORDoKLQkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQotCQkJZ290byBlX2ludmFsOwotCQkvKiB3ZSBhbHNvIGRvbiYjMzk7dCBoYXZlIGEgc2VwYXJhdGUgZnJlZWJpbmQgYml0IGZvciBJUFY2ICovCi0JCWluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpOwotCQlyZXR2ID0gMDsKLQkJYnJlYWs7Ci0KIAljYXNlIElQVjZfUkVDVk9SSUdEU1RBRERSOgogCQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiAJCQlnb3RvIGVfaW52YWw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgQU1ENjQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgcmVxdWVzdCBpcyB0byBldmFsdWF0ZSBpdC4gRmluZSwgbGV0JiMzOTtzIGRpdmUgaW4uIFNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIG1vdmluZyB0aGUgaGFuZGxpbmcgb2YgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgd2l0aGluIGBkb19pcHY2X3NldHNvY2tvcHRgLiBSaWdodCwgc28gdGhleSYjMzk7cmUgbW92aW5nIHRoZW0gZnJvbSB0aGUgbG9ja2VkIHNlY3Rpb24gdG8gdGhlIHVubG9ja2VkIHNlY3Rpb24uIFRoZSBjb21tZW50IHNheXMgJiMzNDtIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuJiMzNDsKCk15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IHRoZSBjaGFuZ2U/IFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBoZXJlPyBJcyBpdCBwZXJmb3JtYW5jZS1iYXNlZD8gUmVkdWNlZCBjb250ZW50aW9uPyBJbmNyZWFzZWQgcGFyYWxsZWxpc20/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4KClJpZ2h0LCBzbyBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYXJvdW5kIGxpbmUgMzk4LCB3aGVyZSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBpcyBwcm9iYWJseSBkZWZpbmVkLCBhbmQgdGhlbiBjaGVjayBuZWFyIGxpbmUgNjY2IGZvciBob3cgdGhvc2Ugb3B0aW9ucyBhcmUgdXNlZCBvciBtb3ZlZCBhcm91bmQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aG9zZSBvcHRpb25zIHdlcmUgYmVpbmcgaGFuZGxlZCBiZWZvcmUsIGFuZCBob3cgdGhleSBhcmUgbm93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZXMgdGhlIGxvY2tpbmcgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBsZWdpdGltYXRlIGNoYW5nZSB0aGF0JiMzOTtzIGJlaW5nIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIDM4MTpcdFx0aW50IHJldHYgPSAtRU5PUFJPVE9PUFQ7XG4gMzgyOlx0XHRpbnQgdmFsLCB2YWxib29sO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpKVxuIDM4NTpcdFx0XHR2YWwgPSAwO1xuIDM4NjpcdFx0ZWxzZSB7XG4gMzg3Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNlPSBzaXplb2YoaW50KSkge1xuIDM4ODpcdFx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxuIDM4OTpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzkwOlx0XHRcdH0gZWxzZVxuIDM5MTpcdFx0XHRcdHZhbCA9IDA7XG4gMzkyOlx0XHR9XG4gMzkzOlx0XG4gMzk0Olx0XHR2YWxib29sID0gKHZhbCAhPSAwKTtcbiAzOTU6XHRcbiAzOTY6XHRcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcbiAzOTc6XHRcdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDM5ODpcdFxuIDM5OTpcdFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIDQwMDpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gNDAxOlx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNDAyOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQwNDpcdFx0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbiA0MDU6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4gNDA2Olx0XHRcdHJldHVybiAwO1xuIDQwNzpcdFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuIDQwODpcdFx0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuIDQwOTpcdFx0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4gNDEwOlx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA0MTE6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDEyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDEzOlx0XHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuIDQxNDpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbiA0MTU6XHRcdFx0cmV0dXJuIDA7XG4gNDE2Olx0XHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIDQxNzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MTk6XHRcdFx0aWYgKHZhbCBcdTAwM2UgMjU1IHx8IHZhbCBcdTAwM2MgLTEpXG4gNDIwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDIxOlx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlaG9wX2xpbWl0LCB2YWwpO1xuIDQyMjpcdFx0XHRyZXR1cm4gMDtcbiA0MjM6XHRcdGNhc2UgSVBWNl9NVUxUSUNBU1RfTE9PUDpcbiA0MjQ6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI2Olx0XHRcdGlmICh2YWwgIT0gdmFsYm9vbClcbiA0Mjc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Mjg6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChNQzZfTE9PUCwgc2ssIHZhbGJvb2wpO1xuIDQyOTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFNvY2tldCBPcHRpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIElQdjYgc29ja2V0IG9wdGlvbnMgYXJlIGJlaW5nIG1hbmFnZWQuIFJpZ2h0LCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiAgSXTigJlzIHRoZSBnby10byBmb3IgaGFuZGxpbmcgYHNldHNvY2tvcHRgIGNhbGxzIHNwZWNpZmljYWxseSBmb3IgSVB2Ni4gSSBrbm93IGl0IGRlYWxzIHdpdGggdGhpbmdzIGxpa2UgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIE5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpdCAqdXNlZCogdG8gYmUgaGFuZGxlZCB3aXRoaW4gdGhlIHNvY2tldCBsb2NrLCBvciBhZnRlciBhIGNhbGwgdG8gYGxvY2tfc29jayhzaylgLiBUaGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJvdHRsZW5lY2tzIGNvdWxkIGFyaXNlLiAgSSBzaG91bGQgcHJvYmFibHkgcmUtcmVhZCB0aGUgY29kZSBzdXJyb3VuZGluZyBgbG9ja19zb2NrKHNrKWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgZXhhY3RseSBpcyB0aGF0IGNhbGxlZCB3aXRoaW4gYGRvX2lwdjZfc2V0c29ja29wdGA/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBJIG5lZWQgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHRjYXNlIElQVjZfTVVMVElDQVNUX0hPUFM6XG4gNDMxOlx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxuIDQzMjpcdFx0XHRcdHJldHVybiByZXR2O1xuIDQzMzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MzU6XHRcdFx0aWYgKHZhbCBcdTAwM2UgMjU1IHx8IHZhbCBcdTAwM2MgLTEpXG4gNDM2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDM3Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlbWNhc3RfaG9wcyxcbiA0Mzg6XHRcdFx0XHQgICB2YWwgPT0gLTEgPyBJUFY2X0RFRkFVTFRfTUNBU1RIT1BTIDogdmFsKTtcbiA0Mzk6XHRcdFx0cmV0dXJuIDA7XG4gNDQwOlx0XHRjYXNlIElQVjZfTVRVOlxuIDQ0MTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0NDI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDM6XHRcdFx0aWYgKHZhbCBcdTAwMjZcdTAwMjYgdmFsIFx1MDAzYyBJUFY2X01JTl9NVFUpXG4gNDQ0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ1Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlZnJhZ19zaXplLCB2YWwpO1xuIDQ0NjpcdFx0XHRyZXR1cm4gMDtcbiA0NDc6XHRcdGNhc2UgSVBWNl9NSU5IT1BDT1VOVDpcbiA0NDg6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDQ5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDUwOlx0XHRcdGlmICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSAyNTUpXG4gNDUxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDUyOlx0XG4gNDUzOlx0XHRcdGlmICh2YWwpXG4gNDU0Olx0XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2aXA2X21pbl9ob3Bjb3VudCk7XG4gNDU1Olx0XG4gNDU2Olx0XHRcdC8qIHRjcF92Nl9lcnIoKSBhbmQgdGNwX3Y2X3JjdigpIG1pZ2h0IHJlYWQgbWluX2hvcGNvdW50XG4gNDU3Olx0XHRcdCAqIHdoaWxlIHdlIGFyZSBjaGFuZ2luZyBpdC5cbiA0NTg6XHRcdFx0ICovXG4gNDU5Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlbWluX2hvcGNvdW50LCB2YWwpO1xuIDQ2MDpcdFx0XHRyZXR1cm4gMDtcbiA0NjE6XHRcdGNhc2UgSVBWNl9SRUNWRVJSX1JGQzQ4ODQ6XG4gNDYyOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQ2MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2NDpcdFx0XHRpZiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgMSlcbiA0NjU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NjY6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChSRUNWRVJSNl9SRkM0ODg0LCBzaywgdmFsYm9vbCk7XG4gNDY3Olx0XHRcdHJldHVybiAwO1xuIDQ2ODpcdFx0Y2FzZSBJUFY2X01VTFRJQ0FTVF9BTEw6XG4gNDY5Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQ3MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ3MTpcdFx0XHRpbmV0Nl9hc3NpZ25fYml0KE1DNl9BTEwsIHNrLCB2YWxib29sKTtcbiA0NzI6XHRcdFx0cmV0dXJuIDA7XG4gNDczOlx0XHRjYXNlIElQVjZfQVVUT0ZMT1dMQUJFTDpcbiA0NzQ6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChBVVRPRkxPV0xBQkVMLCBzaywgdmFsYm9vbCk7XG4gNDc1Olx0XHRcdGluZXQ2X3NldF9iaXQoQVVUT0ZMT1dMQUJFTF9TRVQsIHNrKTtcbiA0NzY6XHRcdFx0cmV0dXJuIDA7XG4gNDc3Olx0XHRjYXNlIElQVjZfRE9OVEZSQUc6XG4gNDc4Olx0XHRcdGluZXQ2X2Fzc2lnbl9iaXQoRE9OVEZSQUcsIHNrLCB2YWxib29sKTtcbiA0Nzk6XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBsb2NrX3NvY2tgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiBgbG9ja19zb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXZlcnl3aGVyZSB0aGlzIGZ1bmN0aW9uLCBvciBtYWNybywgaXMgKmNhbGxlZCogd2l0aGluIHRoZSBjb2RlYmFzZS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiB0aGUgY29kZSB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGlzIHZhcmlhYmxlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgcmVmYWN0b3JpbmcgaXMgbmVlZGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0Y2FzZSBJUFY2X1JFQ1ZFUlI6XG4gNDgxOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQ4MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ4MzpcdFx0XHRpbmV0Nl9hc3NpZ25fYml0KFJFQ1ZFUlI2LCBzaywgdmFsYm9vbCk7XG4gNDg0Olx0XHRcdGlmICghdmFsKVxuIDQ4NTpcdFx0XHRcdHNrYl9lcnJxdWV1ZV9wdXJnZShcdTAwMjZzay1cdTAwM2Vza19lcnJvcl9xdWV1ZSk7XG4gNDg2Olx0XHRcdHJldHVybiAwO1xuIDQ4NzpcdFx0Y2FzZSBJUFY2X1JPVVRFUl9BTEVSVF9JU09MQVRFOlxuIDQ4ODpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0ODk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0OTA6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChSVEFMRVJUX0lTT0xBVEUsIHNrLCB2YWxib29sKTtcbiA0OTE6XHRcdFx0cmV0dXJuIDA7XG4gNDkyOlx0XHRjYXNlIElQVjZfTVRVX0RJU0NPVkVSOlxuIDQ5MzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0OTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0OTU6XHRcdFx0aWYgKHZhbCBcdTAwM2MgSVBWNl9QTVRVRElTQ19ET05UIHx8IHZhbCBcdTAwM2UgSVBWNl9QTVRVRElTQ19PTUlUKVxuIDQ5NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ5NzpcdFx0XHRXUklURV9PTkNFKG5wLVx1MDAzZXBtdHVkaXNjLCB2YWwpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gMDtcbiA0OTk6XHRcdGNhc2UgSVBWNl9GTE9XSU5GT19TRU5EOlxuIDUwMDpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1MDE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDI6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChTTkRGTE9XLCBzaywgdmFsYm9vbCk7XG4gNTAzOlx0XHRcdHJldHVybiAwO1xuIDUwNDpcdFx0Y2FzZSBJUFY2X0FERFJfUFJFRkVSRU5DRVM6XG4gNTA1Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDUwNjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUwNzpcdFx0XHRyZXR1cm4gaXA2X3NvY2tfc2V0X2FkZHJfcHJlZmVyZW5jZXMoc2ssIHZhbCk7XG4gNTA4Olx0XHRjYXNlIElQVjZfTVVMVElDQVNUX0lGOlxuIDUwOTpcdFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSlcbiA1MTA6XHRcdFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIDUxMTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1MTI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTM6XHRcdFx0aWYgKHZhbCkge1xuIDUxNDpcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gNTE1Olx0XHRcdFx0aW50IGJvdW5kX2Rldl9pZiwgbWlkeDtcbiA1MTY6XHRcbiA1MTc6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNTE4Olx0XG4gNTE5Olx0XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCB2YWwpO1xuIDUyMDpcdFx0XHRcdGlmICghZGV2KSB7XG4gNTIxOlx0XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1MjI6XHRcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDUyMzpcdFx0XHRcdH1cbiA1MjQ6XHRcdFx0XHRtaWR4ID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpO1xuIDUyNTpcdFxuIDUyNjpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDUyNzpcdFxuIDUyODpcdFx0XHRcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuIDUyOTpcdFx0XHRcdGlmIChib3VuZF9kZXZfaWYgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgxNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5IGFzIGlmIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgJiMzNDtUaG91Z2h0cyYjMzQ7IHlvdSYjMzk7dmUgcHJvdmlkZWQ6CgoqKlByb2Nlc3NpbmcgdGhlIEluZm9ybWF0aW9uLi4uIExvb2tpbmcgRGVlcGVyKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJiMzOTttIGdpdmVuIHRoZSBpbnN0cnVjdGlvbiB0byBjb250aW51ZSBkb3duIHRoZSBwYWdlIHRvIGZpbmQgc29tZXRoaW5nIGVsc2UuIEl0IGltcGxpZXMgdGhlcmUgaXMgbW9yZSB0byBjb21lLiBNeSBpbnRlcm5hbCBwcm9jZXNzIGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBwcm9jZWVkIHRvIGFuYWx5emUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0XHRcdFx0ICAgIGJvdW5kX2Rldl9pZiAhPSB2YWwgXHUwMDI2XHUwMDI2XG4gNTMxOlx0XHRcdFx0ICAgICghbWlkeCB8fCBtaWR4ICE9IGJvdW5kX2Rldl9pZikpXG4gNTMyOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MzM6XHRcdFx0fVxuIDUzNDpcdFx0XHRXUklURV9PTkNFKG5wLVx1MDAzZW1jYXN0X29pZiwgdmFsKTtcbiA1MzU6XHRcdFx0cmV0dXJuIDA7XG4gNTM2Olx0XHRjYXNlIElQVjZfVU5JQ0FTVF9JRjpcbiA1Mzc6XHRcdHtcbiA1Mzg6XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiA1Mzk6XHRcdFx0aW50IGlmaW5kZXg7XG4gNTQwOlx0XG4gNTQxOlx0XHRcdGlmIChvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG4gNTQyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTQzOlx0XG4gNTQ0Olx0XHRcdGlmaW5kZXggPSAoX19mb3JjZSBpbnQpbnRvaGwoKF9fZm9yY2UgX19iZTMyKXZhbCk7XG4gNTQ1Olx0XHRcdGlmICghaWZpbmRleCkge1xuIDU0NjpcdFx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNldWNhc3Rfb2lmLCAwKTtcbiA1NDc6XHRcdFx0XHRyZXR1cm4gMDtcbiA1NDg6XHRcdFx0fVxuIDU0OTpcdFxuIDU1MDpcdFx0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZpbmRleCk7XG4gNTUxOlx0XHRcdGlmICghZGV2KVxuIDU1MjpcdFx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiA1NTM6XHRcdFx0ZGV2X3B1dChkZXYpO1xuIDU1NDpcdFxuIDU1NTpcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXG4gNTU2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTU3Olx0XG4gNTU4Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcbiA1NTk6XHRcdFx0cmV0dXJuIDA7XG4gNTYwOlx0XHR9XG4gNTYxOlx0XHR9XG4gNTYyOlx0XG4gNTYzOlx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4gNTY0Olx0XG4gNTY1Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA1NjY6XHRcdGNhc2UgSVBWNl9WNk9OTFk6XG4gNTY3Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpIHx8XG4gNTY4Olx0XHRcdCAgICBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X251bSlcbiA1Njk6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTcwOlx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gdmFsYm9vbDtcbiA1NzE6XHRcdFx0cmV0diA9IDA7XG4gNTcyOlx0XHRcdGJyZWFrO1xuIDU3MzpcdFxuIDU3NDpcdFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxuIDU3NTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1NzY6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTc3Olx0XHRcdG5wLVx1MDAzZXJ4b3B0LmJpdHMucnhpbmZvID0gdmFsYm9vbDtcbiA1Nzg6XHRcdFx0cmV0diA9IDA7XG4gNTc5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGlzIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lIDU2MyDigJMgdGhhdCYjMzk7cyB3aGVyZSBgc29ja29wdF9sb2NrX3NvY2soc2spYCBpcyBjYWxsZWQuIEJlZm9yZSB0aGlzIHBhdGNoIHdhcyBhcHBsaWVkLCBgSVBWNl9UUkFOU1BBUkVOVGAgYW5kIGBJUFY2X0ZSRUVCSU5EYCB3ZXJlIGhhbmRsZWQgKmFmdGVyKiB0aGF0IGxvY2tpbmcgY2FsbC4gTm93LCB0aGUgbG9naWMgZm9yIHNldHRpbmcgdGhvc2Ugb3B0aW9ucyBpcyAqYmVmb3JlKiB0aGUgbG9jayEgU3BlY2lmaWNhbGx5LCBJIHNlZSBgaW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbClgIGFuZCBgaW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbClgIGhhcHBlbmluZyBvdXRzaWRlIHRoZSBwcm90ZWN0aW9uIG9mIGBzb2Nrb3B0X2xvY2tfc29jayhzaylgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuLi4KCldhaXQsIGlzIHRoYXQgZXZlbiByZWFjaGFibGU/IENhbiBzb21lb25lIGFjdHVhbGx5IHRyaWdnZXIgdGhhdCBjb2RlIHBhdGggd2l0aG91dCB0aGUgbG9jaz8gQWJzb2x1dGVseSEgQW55b25lIGNhbiBjYWxsIGBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GUkVFQklORCwgLi4uKWAgb3IgYHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X1RSQU5TUEFSRU5ULCAuLi4pYCBvbiBhbiBJUHY2IHNvY2tldCwgcmVnYXJkbGVzcyBvZiBpdHMgdHlwZSAoU1RSRUFNLCBER1JBTSwgUkFXKS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHZlY3RvciB0byBjb25zaWRlci4KClNvLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGFsdGVyaW5nIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gUmVtb3ZpbmcgdGhhdCBzeW5jaHJvbml6YXRpb24gcG90ZW50aWFsbHkgb3BlbnMgdGhlIGRvb3IgdG8gY29uY3VycmVuY3kgaXNzdWVzLiBJJiMzOTttIHRoaW5raW5nIGRhdGEgcmFjZXMsIHJhY2UgY29uZGl0aW9ucyB3aXRoIGBjb25uZWN0YCwgYGJpbmRgLCBgbGlzdGVuYCwgb3Igb3RoZXIgc29ja2V0IHN0YXRlIGNoYW5nZXMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBkaXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGdpdCBsb2cgdGVsbHMgdXMgYWJvdXQgdGhpcyBjb21taXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfYXNzaWduX2JpdC4qRlJFRUJJTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk5MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWwpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNC1cdFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1Olx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Mzk3PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMS1cdFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzI6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMzLVx0XHRcdFx0XHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTY5OT1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX2lwX3NldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcxOS1cdGNhc2UgSVBfRlJFRUJJTkQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzc2ssIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNTUwPXN0YXRpYyB2b2lkIHN5bmNfc29ja2V0X29wdGlvbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE2MDAtXHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNzaywgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTYwMTpcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy0xNjAyLVx0aW5ldF9hc3NpZ25fYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzc2ssIGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVBfRlJFRUJJTkQgYW5kIElQX1RSQU5TUEFSRU5UIGluIGlwX3NvY2tnbHVlLmMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rLiBJdCBzZWVtcyBJUF9GUkVFQklORCBhbmQgSVBfVFJBTlNQQVJFTlQgd2VyZSBzaGlmdGVkIGVhcmxpZXIgaW4gdGhlIGNvZGUsIGxpa2VseSBpbiBhIHByaW9yIHJldmlzaW9uLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHplcm8gaW4gb24gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgIG5lYXIgbGluZSA5OTAuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHdoYXQgd2FzIGNoYW5nZWQgYXJvdW5kIHRoYXQgYXJlYS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYWRqdXN0bWVudCBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0XHRpZiAoIXZhbClcbiA5ODE6XHRcdFx0XHRza2JfZXJycXVldWVfcHVyZ2UoXHUwMDI2c2stXHUwMDNlc2tfZXJyb3JfcXVldWUpO1xuIDk4MjpcdFx0XHRyZXR1cm4gMDtcbiA5ODM6XHRcdGNhc2UgSVBfUkVDVkVSUl9SRkM0ODg0OlxuIDk4NDpcdFx0XHRpZiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgMSlcbiA5ODU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5ODY6XHRcdFx0aW5ldF9hc3NpZ25fYml0KFJFQ1ZFUlJfUkZDNDg4NCwgc2ssIHZhbCk7XG4gOTg3Olx0XHRcdHJldHVybiAwO1xuIDk4ODpcdFx0Y2FzZSBJUF9GUkVFQklORDpcbiA5ODk6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2MgMSlcbiA5OTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5OTE6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsKTtcbiA5OTI6XHRcdFx0cmV0dXJuIDA7XG4gOTkzOlx0XHRjYXNlIElQX0hEUklOQ0w6XG4gOTk0Olx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlICE9IFNPQ0tfUkFXKVxuIDk5NTpcdFx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gOTk2Olx0XHRcdGluZXRfYXNzaWduX2JpdChIRFJJTkNMLCBzaywgdmFsKTtcbiA5OTc6XHRcdFx0cmV0dXJuIDA7XG4gOTk4Olx0XHRjYXNlIElQX01VTFRJQ0FTVF9MT09QOlxuIDk5OTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyAxKVxuMTAwMDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwMTpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoTUNfTE9PUCwgc2ssIHZhbCk7XG4xMDAyOlx0XHRcdHJldHVybiAwO1xuMTAwMzpcdFx0Y2FzZSBJUF9NVUxUSUNBU1RfQUxMOlxuMTAwNDpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyAxKVxuMTAwNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwNjpcdFx0XHRpZiAodmFsICE9IDAgXHUwMDI2XHUwMDI2IHZhbCAhPSAxKVxuMTAwNzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwODpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoTUNfQUxMLCBzaywgdmFsKTtcbjEwMDk6XHRcdFx0cmV0dXJuIDA7XG4xMDEwOlx0XHRjYXNlIElQX1RSQU5TUEFSRU5UOlxuMTAxMTpcdFx0XHRpZiAoISF2YWwgXHUwMDI2XHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcdTAwMjZcdTAwMjZcbjEwMTI6XHRcdFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuMTAxMzpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4xMDE0Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIDEpXG4xMDE1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDE2Olx0XHRcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbCk7XG4xMDE3Olx0XHRcdHJldHVybiAwO1xuMTAxODpcdFx0Y2FzZSBJUF9OT0RFRlJBRzpcbjEwMTk6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogRnV6emluZyBQb3RlbnRpYWwgLSBJUHY2IFNvY2tldCBPcHRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJUHY2IGlzIGNhdGNoaW5nIHVwIHdpdGggSVB2NCBvbiB0aGlzIHNvY2tldCBvcHRpb24gYmVoYXZpb3Ig4oCTIHNwZWNpZmljYWxseSwgdGhlIGFiaWxpdHkgdG8gc2V0IGBJUF9GUkVFQklORGAgYW5kIGBJUF9UUkFOU1BBUkVOVGAgd2l0aG91dCBhY3F1aXJpbmcgYSBzb2NrZXQgbG9jay4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ej8KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFBlciBvdXIgY3JpdGVyaWEsIHdlJiMzOTtyZSBsb29raW5nIGZvciBtb2RpZmljYXRpb25zIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3QgYXJlOiBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5nIHRoYXQgaW1wYWN0cyBkYXRhIHN0cnVjdHVyZXMsIG9yIHJlYWNoYWJsZSBkcml2ZXJzL3Byb3RvY29scy4KCkluIHRoaXMgY2FzZSwgaXTigJlzIGEgZGlyZWN0IHRvdWNoIHRvIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb24gaGFuZGxpbmcgdmlhIGBzZXRzb2Nrb3B0YCwgaW4gdGhpcyBjYXNlIGNvbmNlcm5pbmcgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIFRoZSBtb2RpZmljYXRpb24gaXMga2V5OiB3ZSYjMzk7cmUgY2hhbmdpbmcgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gYmVoYXZpb3IuIFNldHRpbmcgdGhlIG9wdGlvbnMgaXMgbm93IGhhcHBlbmluZyBsb2NrbGVzc2x5LCBubyBuZWVkIGZvciBgc29ja29wdF9sb2NrX3NvY2soc2spYC4gVGhhdOKAmXMgYSAqZGVmaW5pdGUqIHJlZCBmbGFnIOKAkyBhbnl0aW1lIHlvdSBzdGFydCBtZXNzaW5nIHdpdGggbG9ja2luZywgeW91IGludHJvZHVjZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB2dWxuZXJhYmlsaXRpZXMuCgpBbmQgdGhlIHJlYWNoYWJpbGl0eSBpcyBzb2xpZC4gVGhpcyBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgc2V0c29ja29wdCgpYC4gR2l2ZW4gdGhlIHByZXZhbGVuY2Ugb2YgbmV0d29yayBzb2NrZXRzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBwdXJzdWluZy4gSXQgdGlja3MgYWxsIHRoZSBib3hlcyDigJMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGltcGFjdHMgbG9ja2luZy4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gb3VyIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgb3IgY2xvc2VseSByZWxhdGVkPyBJbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCwgaXQmIzM5O3MgY2xlYXI6IGBkb19pcHY2X3NldHNvY2tvcHRgIGlzIGRpcmVjdGx5IGltcGFjdGVkLiBUaGF0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LiBOZXh0IHN0ZXA6IGxldCYjMzk7cyBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGBkb19pcHY2X3NldHNvY2tvcHRgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTU3NTA9c3RhdGljIGludCBzb2xfaXB2Nl9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc3Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjU3NzM6XHRyZXR1cm4gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBTT0xfSVBWNiwgb3B0bmFtZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NzQtXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKG9wdHZhbCksICpvcHRsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQxNzE9aW50IHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC90Y3AuYy00MTc2LVx0aWYgKGxldmVsICE9IFNPTF9UQ1ApXG5uZXQvaXB2NC90Y3AuYzo0MTc3Olx0XHQvKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgYW5kIHRjcF92Nl9jb25uZWN0KCkgKi9cbm5ldC9pcHY0L3RjcC5jLTQxNzgtXHRcdHJldHVybiBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2FmX29wcyktXHUwMDNlc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmM9NDg2Nj1pbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NzEtXHRpZiAobGV2ZWwgIT0gU09MX1RDUClcbm5ldC9pcHY0L3RjcC5jOjQ4NzI6XHRcdC8qIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiBkb19pcHY2X3NldHNvY2tvcHQoKSBhbmQgdGNwX3Y2X2Nvbm5lY3QoKSAqL1xubmV0L2lwdjQvdGNwLmMtNDg3My1cdFx0cmV0dXJuIFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfYWZfb3BzKS1cdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MzAyPXN0YXRpYyBpbnQgaXB2Nl9zZXRfb3B0X2hkcihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zNzUtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mzc2OmludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM3Ny1cdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTg2OT1pbnQgaXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc5LVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg4MDpcdGVyciA9IGRvX2lwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04ODEtI2lmZGVmIENPTkZJR19ORVRGSUxURVJcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTQwMz1zdGF0aWMgaW50IHRjcF92Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy00NTItXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpcDZfbWluX2hvcGNvdW50KSkge1xubmV0L2lwdjYvdGNwX2lwdjYuYzo0NTM6XHRcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy00NTQtXHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2MgUkVBRF9PTkNFKHRjcF9pbmV0Nl9zayhzayktXHUwMDNlbWluX2hvcGNvdW50KSkge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTczMD1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTg2MS1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlwNl9taW5faG9wY291bnQpKSB7XG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE4NjI6XHRcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy0xODYzLVx0XHRpZiAodW5saWtlbHkoaGRyLVx1MDAzZWhvcF9saW1pdCBcdTAwM2MgUkVBRF9PTkNFKHRjcF9pbmV0Nl9zayhzayktXHUwMDNlbWluX2hvcGNvdW50KSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgSVB2NiBTb2NrZXQgT3B0aW9ucyBpbiBgaXB2Nl9zb2NrZ2x1ZS5jYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gSVB2NiBzb2NrZXQgYmVoYXZpb3IuIFdlJiMzOTt2ZSBsaWtlbHkgYWxyZWFkeSBhZGRyZXNzZWQgc29tZSBhcmVhcywgYnV0IG5vdyBpdCYjMzk7cyBjcml0aWNhbCB0byBkaWcgaW50byBgaXB2Nl9zb2NrZ2x1ZS5jYCB0byBzZWUgaG93IGBpcHY2X3NldHNvY2tvcHRgIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZ2x1ZSBjb2RlIHRoYXQgY29ubmVjdHMgdGhlIGdlbmVyaWMgc29ja2V0IG9wdGlvbnMgZnJhbWV3b3JrIHRvIHRoZSBudWFuY2VzIG9mIElQdjYuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiB3aXRoaW4gdGhpcyBtb2R1bGUsIGdpdmVuIHRoZSBtdWx0aXRocmVhZGVkIG5hdHVyZSBvZiBuZXR3b3JrIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFyZWFzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBjb3B5aW5nLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBJUHY2IHN0YWNrIGFuZCB0aGUgc29ja2V0IGxheWVyLiBBbnkgcG90ZW50aWFsIGltcGFjdCBvbiBlcnJvciBoYW5kbGluZyBpcyBhbHNvIGEgbWFqb3IgY29uY2Vybi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB2YXJpb3VzIHNvY2tldCBvcHRpb24gY2hhbmdlcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBoYXZlIGJlZW4gYWRkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjU6XHRcdHJldHYgPSAtRUlOVkFMO1xuIDg2NjpcdFx0Z290byB1bmxvY2s7XG4gODY3Olx0fVxuIDg2ODpcdFxuIDg2OTpcdGludCBpcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIDg3MDpcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbiA4NzE6XHR7XG4gODcyOlx0XHRpbnQgZXJyO1xuIDg3MzpcdFxuIDg3NDpcdFx0aWYgKGxldmVsID09IFNPTF9JUCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVylcbiA4NzU6XHRcdFx0cmV0dXJuIGlwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gODc2Olx0XG4gODc3Olx0XHRpZiAobGV2ZWwgIT0gU09MX0lQVjYpXG4gODc4Olx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gODc5Olx0XG4gODgwOlx0XHRlcnIgPSBkb19pcHY2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gODgxOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJcbiA4ODI6XHRcdC8qIHdlIG5lZWQgdG8gZXhjbHVkZSBhbGwgcG9zc2libGUgRU5PUFJPVE9PUFRzIGV4Y2VwdCBkZWZhdWx0IGNhc2UgKi9cbiA4ODM6XHRcdGlmIChlcnIgPT0gLUVOT1BST1RPT1BUIFx1MDAyNlx1MDAyNiBvcHRuYW1lICE9IElQVjZfSVBTRUNfUE9MSUNZIFx1MDAyNlx1MDAyNlxuIDg4NDpcdFx0XHRcdG9wdG5hbWUgIT0gSVBWNl9YRlJNX1BPTElDWSlcbiA4ODU6XHRcdFx0ZXJyID0gbmZfc2V0c29ja29wdChzaywgUEZfSU5FVDYsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiA4ODY6XHQjZW5kaWZcbiA4ODc6XHRcdHJldHVybiBlcnI7XG4gODg4Olx0fVxuIDg4OTpcdEVYUE9SVF9TWU1CT0woaXB2Nl9zZXRzb2Nrb3B0KTtcbiA4OTA6XHRcbiA4OTE6XHRzdGF0aWMgaW50IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcbiA4OTI6XHRcdFx0XHRcdCAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBsZW4pXG4gODkzOlx0e1xuIDg5NDpcdFx0c3RydWN0IGlwdjZfb3B0X2hkciAqaGRyO1xuIDg5NTpcdFxuIDg5NjpcdFx0aWYgKCFvcHQpXG4gODk3Olx0XHRcdHJldHVybiAwO1xuIDg5ODpcdFxuIDg5OTpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gOTAwOlx0XHRjYXNlIElQVjZfSE9QT1BUUzpcbiA5MDE6XHRcdFx0aGRyID0gb3B0LVx1MDAzZWhvcG9wdDtcbiA5MDI6XHRcdFx0YnJlYWs7XG4gOTAzOlx0XHRjYXNlIElQVjZfUlRIRFJEU1RPUFRTOlxuIDkwNDpcdFx0XHRoZHIgPSBvcHQtXHUwMDNlZHN0MG9wdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUHY2IFNvY2tldCBGaWx0ZXJpbmcgSW5xdWlyeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKWAgYW5kIGBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzaylgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGVpciB1c2FnZSwgdG8gbWFwIHRoZWlyIGluZmx1ZW5jZSB3aXRoaW4gdGhlIGNvZGUuIFNvLCB0aGUgbW9zdCBlZmZpY2llbnQgcm91dGUgaXMgYSBjb2RlIHNlYXJjaDogSSYjMzk7bGwgdXNlIGBncmVwYCB0byBodW50IGRvd24gYWxsIGluc3RhbmNlcyBvZiBgaW5ldF90ZXN0X2JpdGAgdGhhdCBpbnZvbHZlIGVpdGhlciBgRlJFRUJJTkRgIG9yIGBUUkFOU1BBUkVOVGAgYXMgdGhlIGJpdCBhcmd1bWVudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBvciBjb2RlIGJsb2Nrcy4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGZsYWdzIGluIElQdjYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfdGVzdF9iaXRcXCgoRlJFRUJJTkR8VFJBTlNQQVJFTlQpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYz05Nz1pbnQgaW5ldF9kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xNjEtXHRpbmV0X3NvY2tvcHQuaXNfaWNza1x0PSBpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjE2MjpcdGluZXRfc29ja29wdC5mcmVlYmluZFx0PSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xNjMtXHRpbmV0X3NvY2tvcHQuaGRyaW5jbFx0PSBpbmV0X3Rlc3RfYml0KEhEUklOQ0wsIHNrKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE2NC1cdGluZXRfc29ja29wdC5tY19sb29wXHQ9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTY1Olx0aW5ldF9zb2Nrb3B0LnRyYW5zcGFyZW50ID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTY2LVx0aW5ldF9zb2Nrb3B0Lm1jX2FsbFx0PSBpbmV0X3Rlc3RfYml0KE1DX0FMTCwgc2spO1xuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jPTE2OD1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICppbmV0X3R3c2tfYWxsb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTE5OC1cdFx0dHctXHUwMDNldHdfaXB2Nm9ubHlcdCAgICA9IDA7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoxOTk6XHRcdHR3LVx1MDAzZXR3X3RyYW5zcGFyZW50ICA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwMC1cdFx0dHctXHUwMDNldHdfY29ubmVjdF9iaW5kID0gISEoc2stXHUwMDNlc2tfdXNlcmxvY2tzIFx1MDAyNiBTT0NLX0NPTk5FQ1RfQklORCk7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjEtXHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTYyOlx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjMtXHRcdGdvdG8gY29weXZhbDtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NzMtXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTc0Olx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NzUtXHRcdGdvdG8gY29weXZhbDtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2ODctXHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Njg4Olx0aW5ldF9yc2socmVxKS1cdTAwM2Vub19zcmNjaGVjayA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2ODktXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk5Mz1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5Ny1cdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTk4Olx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5OS1cdFx0YnJlYWs7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDEtXHRjYXNlIElQVjZfRlJFRUJJTkQ6XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTIwMjpcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDMtXHRcdGJyZWFrO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Mzk3PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyOC1cdFx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLFxubmV0L21wdGNwL3NvY2tvcHQuYzo0Mjk6XHRcdFx0XHRcdGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy00MzAtXHRcdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00MzItXHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMzOlx0XHRcdFx0XHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDM0LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzE5LVx0Y2FzZSBJUF9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NzIwOlx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzIxLVx0XHRicmVhaztcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMy1cdFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssXG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyNDpcdFx0XHRcdGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyNS1cdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDU3PXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjYtXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDY3Olx0XHRcdFx0aW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ2OC1cdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjktXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDcwOlx0XHRcdFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ3MS1cdGNhc2UgSVBfQklORF9BRERSRVNTX05PX1BPUlQ6XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDgyPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0OTItXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDkzOlx0XHRcdFx0XHQgICAgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NC1cdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NS1cdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTY6XHRcdFx0XHRcdCAgICBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk3LVx0fVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy0xNTk5LVxubmV0L21wdGNwL3NvY2tvcHQuYzoxNjAwOlx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjE2MDE6XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cdGluZXRfYXNzaWduX2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc3NrLCBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzaykpO1xuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9MzUyPXN0YXRpYyBpbnQgc2N0cF92NF9hdmFpbGFibGUodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2Mi1cdCAgIHJldCAhPSBSVE5fTE9DQUwgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jOjM2MzpcdCAgICFpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2NC1cdCAgICAhUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSBvZiBGUkVFQklORCBhbmQgVFJBTlNQQVJFTlQgVXNhZ2UqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBgRlJFRUJJTkRgIGFuZCBgVFJBTlNQQVJFTlRgIHNvY2tldCBvcHRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGVyZSB0aGV5JiMzOTtyZSBhY3R1YWxseSBkZXBsb3llZCBpbiB0aGUga2VybmVsLCB5b3Uga25vdywgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZnVsbHkuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcnBsYXkgd2l0aCBvdGhlciBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIEkgaGF2ZW4mIzM5O3QgZnVsbHkgY29uc2lkZXJlZCB5ZXQuCgpTbywgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgdHJhY2luZyB0aGVpciB1c2FnZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIGNhbGxzLCBtYXliZSBpbiBmdW5jdGlvbnMgbGlrZSBgaW5ldF9iaW5kYCBvciByZWxhdGVkIGJpbmQgZnVuY3Rpb25zLCB0byBzZWUgaWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgaW4gZGlmZmVyZW50IGNvbnRleHRzLiBBIHdpZGVyIHZpZXcgb2YgdGhlIGNvZGUgY291bGQgcXVpY2tseSBvZmZlciB1cCB0aG9zZSBlZGdlLWNhc2VzLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1vcmUgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIHRoZWlyIGJlaGF2aW9yIGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRoYXQgbGFyZ2VyIGNvbnRleHQgdG8gcmVhbGx5IGdyYXNwIHRoZSBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGVtIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGF0IGJpZ2dlciBwaWN0dXJlIGlzIHJlYWxseSB3aGF0IEkgbmVlZCB0byBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY2FuX25vbmxvY2FsX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3BpbmcuYz0zMDI9c3RhdGljIGludCBwaW5nX2NoZWNrX2JpbmRfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X3NvY2sgKmlzayxcbi0tXG5uZXQvaXB2NC9waW5nLmMtMzMwLVx0XHQgICAgKGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9waW5nLmM6MzMxOlx0XHQgICAgICFpbmV0X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaXNrKSkpXG5uZXQvaXB2NC9waW5nLmMtMzMyLVx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQmluZGluZyBCZWhhdmlvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBub24tbG9jYWwgYmluZGluZyB3b3Jrcywgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGluZXRfY2FuX25vbmxvY2FsX2JpbmRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gY2xhcmlmeWluZyB0aGUgYmVoYXZpb3IuIElmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgdGhlIHNwZWNpZmljIGluc2lnaHRzIEkgbmVlZCwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgYXQgdGhlIG1vcmUgZ2VuZXJhbCBgaW5ldDZfYmluZGAgZnVuY3Rpb24sIG9yIHRoZSBgYWZfaW5ldDYuY2Agc291cmNlIGZpbGUgaXRzZWxmLiBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIG9mdGVuIHNoZWRzIGxpZ2h0IG9uIElQdjQgYXNwZWN0cyB0b28sIGdpdmVuIHRoZWlyIGludGVydHdpbmVkIG5hdHVyZS4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgY29uZGl0aW9ucywgY2hlY2tzLCBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIHN1cnJvdW5kaW5nIGhvdyB3ZSBhbGxvdyBvciBwcmV2ZW50IGEgc29ja2V0IGZyb20gYmluZGluZyB0byBhbiBhZGRyZXNzIHRoYXQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgYXNzaWduZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZS4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlJFRUJJTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAwLVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDAxOlx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwMi1cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAzLVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwNDpcdFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1Olx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTM9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDAtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTIwMTpcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAyOlx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgYW5kIFRyYW5zcGFyZW5jeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgVFJBTlNQQVJFTlRgLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBJUHY2IGNvbnRleHQuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgd2l0aGluIHRoZSBgbmV0L2lwdjZgIGRpcmVjdG9yeS4gSSYjMzk7bSBpbWFnaW5pbmcgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIHNvY2tldCBvcHRpb24gb3IgYSBmbGFnIGRlZmluZWQgc29tZXdoZXJlIHRoYXQmIzM5O3MgdGllZCB0byB0aGlzIGNvbmNlcHQgb2YgdHJhbnNwYXJlbmN5LiBJJiMzOTttIHBpY3R1cmluZyB0aGUgaW5jbHVkZSBmaWxlcywgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnPigKYgd2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBEb2VzIGl0IHJlbGF0ZSB0byBhZGRyZXNzIGhhbmRsaW5nIG9yIHJvdXRpbmcgaW4gYW55IHNwZWNpZmljIHdheSB3aXRoaW4gdGhlIElQdjYgc3RhY2s/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0cmFuc3BhcmVuY3kgaXMgKmltcGxlbWVudGVkKiBpbiBJUHY2IHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIElQdjYgcHJvdG9jb2wgaGFuZGxlcyBjb25uZWN0aW9ucywgcm91dGluZywgYW5kIGZpbHRlcmluZyB3aGVuIHRoaXMgJiMzNDtUUkFOU1BBUkVOVCYjMzQ7IHNldHRpbmcgaXMgZW5nYWdlZC4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggYXNwZWN0cyBvZiBhIGNvbm5lY3Rpb24gYXJlIGV4cG9zZWQsIG9yIGhpZGRlbi4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RSQU5TUEFSRU5UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNi1cdFx0cmV0dXJuIDA7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA3Olx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwOC1cdFx0aWYgKHZhbGJvb2wgXHUwMDI2XHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDEyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQxMzpcdFx0LyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDE0Olx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MTUtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTM9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExOTYtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTE5NzpcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTk4Olx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIGEgRnVuY3Rpb24gRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGtuZWUtZGVlcCBpbiB0aGlzIG5ldHdvcmtpbmcgY29kZSwgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGluZXRfY2FuX25vbmxvY2FsX2JpbmRgIGlzIGRvaW5nLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLCBidXQgSSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgcmVjYWxsIGl0cyBkZWZpbml0aW9uIG9yIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBUaGlzIHN1Z2dlc3RzIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGRlZmluZWQuIElzIGl0IGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlPyBJcyBpdCBkZWNsYXJlZCBpbiBhIGhlYWRlciBJJiMzOTttIG1pc3Npbmc/IE9yIG1heWJlIGl0JiMzOTtzIGNvbWluZyBmcm9tIGEgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgbGlicmFyeSB0aGF0IEkgaGF2ZSB0byBnbyBkaWdnaW5nIHRocm91Z2g/IFRoZSBuYW1lIGhpbnRzIGF0IHBlcm1pc3Npb25zIGFuZCBiaW5kaW5nIHNvY2tldHMsIGJ1dCBJIHJlYWxseSBuZWVkIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlIHRvIHNlZSBpZiBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QgYW5kIHdoYXQgdGhlIHNwZWNpZmljIGRldGFpbHMgYXJlLiBUaW1lIHRvIHN0YXJ0IHRoZSBodW50ISBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIElERSBzZWFyY2gsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gbGV2ZXJhZ2UgdGhlIGNyb3NzLXJlZmVyZW5jZSBjYXBhYmlsaXRpZXMgb2YgbXkgZWRpdG9yIGlmIGl0JiMzOTtzIG1vcmUgZGVlcGx5IG5lc3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9jYW5fbm9ubG9jYWxfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfc29jay5oPTQyNz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9nZXRfY29udmVydF9jc3VtKHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzItXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0MzM6c3RhdGljIGlubGluZSBib29sIGluZXRfY2FuX25vbmxvY2FsX2JpbmQoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDM0LVx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0NS17XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0NDY6XHRyZXR1cm4gaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIHx8XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDctXHRcdGFkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBCaW5kaW5nIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbmV0d29yayBzb2NrZXQgYmluZGluZywgc3BlY2lmaWNhbGx5IG5vbi1sb2NhbCBiaW5kcy4gSSBzZWUgdGhpcyBmdW5jdGlvbiBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgYmVpbmcgZmxhZ2dlZCBhcyByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZTogaXQmIzM5O3MgY2xlYXJseSBjb25uZWN0ZWQgdG8gYEZSRUVCSU5EYCBhbmQgYFRSQU5TUEFSRU5UYCBzb2NrZXQgb3B0aW9ucy4gTm93IEkgbmVlZCB0byBzZWUgaG93IGl0IHdvcmtzLiBMZXQgbWUganVzdCBnbGFuY2UgYXQgYGluY2x1ZGUvbmV0L2luZXRfc29jay5oYCwgbGluZXMgNDMwLTQ0MCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgbG9naWMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3QsIGJlY2F1c2UgdGhvc2UgZmxhZ3MgaGF2ZSBhIGxvdCBvZiBiZWFyaW5nIG9uIGhvdyB0aGUga2VybmVsIHRyZWF0cyBvdXRnb2luZyBwYWNrZXRzIGFuZCBzb3VyY2UgYWRkcmVzc2VzLCBkZXBlbmRpbmcgb24gdGhlIHNvY2tldCBhbmQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdH1cbiA0MzE6XHRcbiA0MzI6XHRcbiA0MzM6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9jYW5fbm9ubG9jYWxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsXG4gNDM0Olx0XHRcdFx0XHRcdCAgc3RydWN0IGluZXRfc29jayAqaW5ldClcbiA0MzU6XHR7XG4gNDM2Olx0XHRyZXR1cm4gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSB8fFxuIDQzNzpcdFx0XHR0ZXN0X2JpdChJTkVUX0ZMQUdTX0ZSRUVCSU5ELCBcdTAwMjZpbmV0LVx1MDAzZWluZXRfZmxhZ3MpIHx8XG4gNDM4Olx0XHRcdHRlc3RfYml0KElORVRfRkxBR1NfVFJBTlNQQVJFTlQsIFx1MDAyNmluZXQtXHUwMDNlaW5ldF9mbGFncyk7XG4gNDM5Olx0fVxuIDQ0MDpcdFxuIDQ0MTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuIDQ0MjpcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGluZXRfc29jayAqaW5ldCxcbiA0NDM6XHRcdFx0XHRcdFx0ICAgICAgIF9fYmUzMiBhZGRyLFxuIDQ0NDpcdFx0XHRcdFx0XHQgICAgICAgaW50IGFkZHJfdHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnRlcm5hbCBJbnZlc3RpZ2F0aW9uIG9mIGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYCBpbiBJUHY2KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAuIFRoZSBmaXJzdCB0aGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgaXMgY2hlY2sgZm9yIGBJTkVUX0ZMQUdTX0ZSRUVCSU5EYCBhbmQgYElORVRfRkxBR1NfVFJBTlNQQVJFTlRgLiBNYWtlcyBzZW5zZSwgdGhvc2UgZmxhZ3MgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGFsbG93aW5nIGJpbmRpbmcgdG8gbm9uLWxvY2FsIGFkZHJlc3Nlcy4gQnV0IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZCB3aXRoaW4gdGhlIElQdjYgc3RhY2s/IEkgbmVlZCB0byB0cmFjZSBpdHMgcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBiZXR0ZXIsIGFuZCBzcGVjaWZpY2FsbHkgaG93IElQdjYgaGFuZGxlcyB0aGVzZSBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUuLi4gYGluZXQ2X2JpbmRgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgaW4gdGhlIElQdjYgY29udGV4dC4gTGV0IG1lIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY2FuX25vbmxvY2FsX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIHByb2JhYmx5IGNvbmNlcm5pbmcgSVB2Ni4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIElQdjYgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGNvbW1vbiBjb25maWd1cmF0aW9uIGZsYWdzIG9yIHN5c2N0bCB2YXJpYWJsZXMgdGhhdCBpbmZsdWVuY2UgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBJUCBhZGRyZXNzZXMgYW5kIGJpbmRpbmdzLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gc2VhcmNoIGZvciB0aGUgdGVybXMgYGluZXRfZmxhZ3NgLCBiZWNhdXNlIGl0JiMzOTtzIGEgdXNlZnVsIG5hbWUgZm9yIGZsYWdzLCBhbmQgYHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kYCwgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdG8gaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3lzdGVtIGJpbmRpbmcgdG8gYWRkcmVzc2VzIHRoYXQgaXQgZG9lc24mIzM5O3Qgb3duLiBBbmQgc2luY2UgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgSVB2NiBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIHRhcmdldCB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgdG8gZm9jdXMgbXkgc2VhcmNoIGFuZCBtaW5pbWl6ZSBpcnJlbGV2YW50IHJlc3VsdHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjdGxfaXBfbm9ubG9jYWxfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDgxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBpbmV0Nl9iaW5kYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW5ldDZfYmluZGAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgY29kZSB3aXRoaW4gYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBsb29raW5nIGF0IHRoZSBgaW5ldDZfYmluZGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGJpbmRpbmcgYW4gSVB2NiBzb2NrZXQgdG8gYSBsb2NhbCBhZGRyZXNzIHJlc2lkZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBhZGRyZXNzIHZhbGlkYXRpb24gaXMgcGVyZm9ybWVkLCBob3cgdGhlIHNvY2tldCBvcHRpb25zIGFyZSBoYW5kbGVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBmb3Igc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uIGlmIHRoZSB1c2VyIGRpZG4mIzM5O3Qgc3BlY2lmeSBvbmUuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgYmluZGluZyBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGl0IGhhbmRsZXMgc2NvcGVkIGFkZHJlc3NlcyB2ZXJzdXMgZ2xvYmFsIG9uZXM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBgSVBWNl9WNk9OTFlgIG9wdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGR1YWwtc3RhY2sgc29ja2V0cy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBzb2xpZCBncmlwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGUkVFQklORCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmM9OTc9aW50IGluZXRfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYxLVx0aW5ldF9zb2Nrb3B0LmlzX2ljc2tcdD0gaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzayk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxNjI6XHRpbmV0X3NvY2tvcHQuZnJlZWJpbmRcdD0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYzLVx0aW5ldF9zb2Nrb3B0LmhkcmluY2xcdD0gaW5ldF90ZXN0X2JpdChIRFJJTkNMLCBzayk7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz02MDk9dm9pZCBpcF9zb2NrX3NldF9mcmVlYmluZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTYxMC17XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjYxMTpcdGluZXRfc2V0X2JpdChGUkVFQklORCwgc2spO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02MTItfVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTkxMS1cdGNhc2UgSVBfUk9VVEVSX0FMRVJUOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5MTI6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05MTMtXHRjYXNlIElQX1BBU1NTRUM6XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05ODctXHRcdHJldHVybiAwO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5ODg6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05ODktXHRcdGlmIChvcHRsZW4gXHUwMDNjIDEpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk5MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWwpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUwNz1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTYwLVx0XHRnb3RvIGNvcHl2YWw7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjE6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTYyOlx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjMtXHRcdGdvdG8gY29weXZhbDtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDAtXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDE6XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAyLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA0Olx0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDU6XHRcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk5Mz1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMC1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAxOlx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEyMDI6XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMjAzLVx0XHRicmVhaztcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00MDYtXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjQwNzpcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDA4LVx0XHRsb2NrX3NvY2soc2spO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMwLVx0XHRcdGJyZWFrO1xubmV0L21wdGNwL3NvY2tvcHQuYzo0MzE6XHRcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMyOlx0XHRcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQzMzpcdFx0XHRcdFx0aW5ldF90ZXN0X2JpdChGUkVFQklORCwgc3NrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzNC1cdFx0XHRicmVhaztcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTQ0ND1zdGF0aWMgYm9vbCBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDQ4LVx0XHQvKiBzaG91bGQgd29yayBmaW5lICovXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ0OTpcdFx0Y2FzZSBJUF9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDUwLVx0XHRjYXNlIElQX1RSQU5TUEFSRU5UOlxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNTE1LVx0XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjUxNjpcdFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L21wdGNwL3NvY2tvcHQuYy01MTctXHRcdGNhc2UgSVBWNl9QS1RJTkZPOlxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzE4LVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjcxOTpcdGNhc2UgSVBfRlJFRUJJTkQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzc2ssIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz03NzM9c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzc2LVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjc3NzpcdGNhc2UgSVBfRlJFRUJJTkQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jLTc3OC1cdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDU3PXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjQtXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLCBSRUFEX09OQ0UoaW5ldF9zayhzayktXHUwMDNldG9zKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0NjU6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY2LVx0XHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ2NzpcdFx0XHRcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjgtXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTQ4Mj1zdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDkzLVx0XHRcdFx0XHQgICAgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ5NDpcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NS1cdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTY6XHRcdFx0XHRcdCAgICBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk3LVx0fVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy0xNjAwLVx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjE2MDE6XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cdGluZXRfYXNzaWduX2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc3NrLCBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzaykpO1xuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9MzUyPXN0YXRpYyBpbnQgc2N0cF92NF9hdmFpbGFibGUodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2Mi1cdCAgIHJldCAhPSBSVE5fTE9DQUwgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jOjM2MzpcdCAgICFpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2NC1cdCAgICAhUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBJUHY2IE5vbi1Mb2NhbCBCaW5kaW5nIENhcGFiaWxpdHkqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYGluZXQ2X2Nhbl9ub25sb2NhbF9iaW5kYCBmdW5jdGlvbiBhY3R1YWxseSAqZXhpc3RzKi4gSSYjMzk7bSBmYWlybHkgY2VydGFpbiBJJiMzOTt2ZSBjb21lIGFjcm9zcyBpdCBiZWZvcmUsIGJ1dCBiZXR0ZXIgdG8gYmUgc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uLiBNeSBmaXJzdCBwb3J0IG9mIGNhbGwgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgdGhlIHN0YW5kYXJkIGluY2x1ZGUgcGF0aCwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL25ldC9pcHY2LmhgLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGdpdmVuIHRoZSBuYW1lLiBJZiB0aGF0IGRvZXNuJiMzOTt0IHlpZWxkIHJlc3VsdHMsIG9yIGlmIEkgd2FudCB0byBiZSAqcmVhbGx5KiB0aG9yb3VnaCBhbmQgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdXNlcyBvZiB0aGUgdW5kZXJseWluZyBjb25jZXB0LCBJIGNhbiBhbHdheXMgYnVzdCBvdXQgYSBgZ3JlcGAgZm9yIGBjYW5fbm9ubG9jYWxfYmluZGAgYWNyb3NzIHRoZSBzb3VyY2UgdHJlZS4gVGhpcyB3aWxsIGxldCBtZSBjb25maXJtIHRoZSBmdW5jdGlvbiBhbmQgaXRzIGJlaGF2aW9yIGFuZCB1c2UgY2FzZXMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldDZfY2FuX25vbmxvY2FsX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTM0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIERpdmluZzogVGhlIGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYCBIdW50KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSYjMzk7dmUgZ290IGEgaHVuY2gg4oCTIGxldCYjMzk7cyBzZWUgaWYgaXQgaG9sZHMgdXAuIE15IGZpcnN0IG1vdmUgaGVyZSBpcyB0byBnZXQgYSBicm9hZCB2aWV3LCBhIHJlYWwgbGF5IG9mIHRoZSBsYW5kLCBzbyBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGdsb2JhbCBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZSBsb29raW5nIGZvciBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAuIEkgd2FudCB0byBzZWUgKmV2ZXJ5KiBpbnN0YW5jZSwgZXZlcnkgdXNhZ2UsIGV2ZXJ5IGRlY2xhcmF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O2xsIHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkLiBUaGlzIGluaXRpYWwgc2NhbiBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBiaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2Nhbl9ub25sb2NhbF9iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfc29jay5oPTQyNz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9nZXRfY29udmVydF9jc3VtKHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzItXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0MzM6c3RhdGljIGlubGluZSBib29sIGluZXRfY2FuX25vbmxvY2FsX2JpbmQoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDM0LVx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0NS17XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0NDY6XHRyZXR1cm4gaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIHx8XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDctXHRcdGFkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkgfHxcbi0tXG5uZXQvaXB2NC9waW5nLmM9MzAyPXN0YXRpYyBpbnQgcGluZ19jaGVja19iaW5kX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9zb2NrICppc2ssXG4tLVxubmV0L2lwdjQvcGluZy5jLTMzMC1cdFx0ICAgIChjaGtfYWRkcl9yZXQgIT0gUlROX0xPQ0FMIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvcGluZy5jOjMzMTpcdFx0ICAgICAhaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGlzaykpKVxubmV0L2lwdjQvcGluZy5jLTMzMi1cdFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIElQdjYgQmluZGluZyoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBJUHY2IGJpbmRpbmcgaXNzdWUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmV0Nl9iaW5kYCwgc28gSSYjMzk7bSBuYXZpZ2F0aW5nIHN0cmFpZ2h0IHRvIHRoYXQgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aGluZyBpcyBhY3R1YWxseSB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgc3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgc29ja2V0IGF0dGVtcHRzIHRvIGJpbmQgdG8gYW4gSVB2NiBhZGRyZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluY29ycmVjdCBlcnJvciBoYW5kbGluZywgb3IgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBhZGRyZXNzIGZhbWlseSBhYnN0cmFjdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGR1YWwgbmF0dXJlIG9mIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLiBUaW1lIHRvIGRpc3NlY3QgdGhpcyBjb2RlIGFuZCBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZl9pbmV0Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAoIXNrKVxuIDQ2MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NjQ6XHRcbiA0NjU6XHRcdC8qIEZyZWUgbWMgbGlzdHMgKi9cbiA0NjY6XHRcdGlwdjZfc29ja19tY19jbG9zZShzayk7XG4gNDY3Olx0XG4gNDY4Olx0XHQvKiBGcmVlIGFjIGxpc3RzICovXG4gNDY5Olx0XHRpcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0cmV0dXJuIGluZXRfcmVsZWFzZShzb2NrKTtcbiA0NzI6XHR9XG4gNDczOlx0RVhQT1JUX1NZTUJPTChpbmV0Nl9yZWxlYXNlKTtcbiA0NzQ6XHRcbiA0NzU6XHR2b2lkIGluZXQ2X2NsZWFudXBfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gNDc2Olx0e1xuIDQ3NzpcdFx0c3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spO1xuIDQ3ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA0Nzk6XHRcdHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0O1xuIDQ4MDpcdFxuIDQ4MTpcdFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXG4gNDgyOlx0XG4gNDgzOlx0XHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xuIDQ4NDpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDg1Olx0XG4gNDg2Olx0XHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXJ4cG10dSwgTlVMTCk7XG4gNDg3Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0ODg6XHRcbiA0ODk6XHRcdC8qIEZyZWUgZmxvd2xhYmVscyAqL1xuIDQ5MDpcdFx0Zmw2X2ZyZWVfc29ja2xpc3Qoc2spO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0LyogRnJlZSB0eCBvcHRpb25zICovXG4gNDkzOlx0XG4gNDk0Olx0XHRvcHQgPSB1bnJjdV9wb2ludGVyKHhjaGcoXHUwMDI2bnAtXHUwMDNlb3B0LCBOVUxMKSk7XG4gNDk1Olx0XHRpZiAob3B0KSB7XG4gNDk2Olx0XHRcdGF0b21pY19zdWIob3B0LVx1MDAzZXRvdF9sZW4sIFx1MDAyNnNrLVx1MDAzZXNrX29tZW1fYWxsb2MpO1xuIDQ5NzpcdFx0XHR0eG9wdF9wdXQob3B0KTtcbiA0OTg6XHRcdH1cbiA0OTk6XHR9XG4gNTAwOlx0XG4gNTAxOlx0LypcbiA1MDI6XHQgKlx0VGhpcyBkb2VzIGJvdGggcGVlcm5hbWUgYW5kIHNvY2tuYW1lLlxuIDUwMzpcdCAqL1xuIDUwNDpcdGludCBpbmV0Nl9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsXG4gNTA1Olx0XHRcdCAgaW50IHBlZXIpXG4gNTA2Olx0e1xuIDUwNzpcdFx0c3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKil1YWRkcjtcbiA1MDg6XHRcdGludCBzaW5fYWRkcl9sZW4gPSBzaXplb2YoKnNpbik7XG4gNTA5Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDUxMDpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuIDUxMTpcdFx0c3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spO1xuIDUxMjpcdFxuIDUxMzpcdFx0c2luLVx1MDAzZXNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7XG4gNTE0Olx0XHRzaW4tXHUwMDNlc2luNl9mbG93aW5mbyA9IDA7XG4gNTE1Olx0XHRzaW4tXHUwMDNlc2luNl9zY29wZV9pZCA9IDA7XG4gNTE2Olx0XHRsb2NrX3NvY2soc2spO1xuIDUxNzpcdFx0aWYgKHBlZXIpIHtcbiA1MTg6XHRcdFx0aWYgKCFpbmV0LVx1MDAzZWluZXRfZHBvcnQgfHxcbiA1MTk6XHRcdFx0ICAgICgoKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgKFRDUEZfQ0xPU0UgfCBUQ1BGX1NZTl9TRU5UKSkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IEJpbmQgRnVuY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgaW5ldDZfYmluZGAuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byBpdCwgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgc291cmNlIGNvZGUuIEkga25vdyB0aGF0IGBpbmV0NmAgc3R1ZmYgaXMgaGFuZGxlZCBpbiBgbmV0L2lwdjZgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgYGFmX2luZXQ2LmNgLiBOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGBpbmV0Nl9iaW5kYCBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgY2FuIHVzZSBteSBJREUmIzM5O3Mgc2VhcmNoLCBvciBhIHF1aWNrIGBncmVwYCBpZiBJJiMzOTttIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRvIHBpbnBvaW50IGl0cyBleGFjdCBsb2NhdGlvbi4gRnJvbSB0aGVyZSBJJiMzOTtsbCBzdGFydCB0byByZWNvbnN0cnVjdCB0aGUgbG9naWNhbCBwYXRoIHRoYXQgaXMgbmVlZGVkIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaW5ldDZfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FmX2luZXQ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWZfaW5ldDYuYz0yNjU9aW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDI1LVxubmV0L2lwdjYvYWZfaW5ldDYuYzo0MjY6aW50IGluZXQ2X2JpbmRfc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDI3LXtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTQ1MS0vKiBiaW5kIGZvciBJTkVUNiBBUEkgKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDUyOmludCBpbmV0Nl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxubmV0L2lwdjYvYWZfaW5ldDYuYy00NTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY1MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGNvZGUsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBsZXZlbCBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBfX2luZXQ2X2JpbmRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBgX19pbmV0Nl9iaW5kYC4uLiB0aGF0IG5hbWUgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJUHY2IHNvY2tldCBiaW5kaW5nLCB0aGUgY3JpdGljYWwgc3RlcCBvZiBhc3NvY2lhdGluZyBhIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgYWRkcmVzcyBhbmQgcG9ydC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG51YW5jZXMgb2YgSVB2NiBhZGRyZXNzaW5nLCBzY29waW5nLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBjaGVja2luZyByZWxhdGVkIHRvIGFkZHJlc3MgY29uZmxpY3RzIGFuZCBwcml2aWxlZ2VkIHBvcnRzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBzb2NrYWRkcl9pbjZgIHN0cnVjdHVyZSwgb2J2aW91c2x5LCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc29ja2V0JiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBsaWtlbHkgdGhlIGBpbmV0Nl9zb2NrYCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhbmQgYW55IG5ldGZpbHRlciBob29rcy4gSSB3YW50IHRvIHNlZSBpZiBpdOKAmXMgdXNpbmcgYW55IG9mIHRoZSBuZXdlciBJUHY2IHNwZWNpZmljIEFQSSBmZWF0dXJlcywgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgdXNlcyBsb2NrcyB0byBwcm90ZWN0IGNyaXRpY2FsIHNlY3Rpb25zIG9mIHRoZSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgd2lsZGNhcmQgYWRkcmVzc2VzICg6Oikgb3IgdW5zcGVjaWZpZWQgSVB2NiBhZGRyZXNzZXMuIEJhc2ljYWxseSwgSeKAmW0gbWVudGFsbHkgc2Nhbm5pbmcgZm9yIHBvdGVudGlhbCBwaXRmYWxscyBhbmQgaW5lZmZpY2llbmNpZXMgcmVsYXRlZCB0byBJUHY2LXNwZWNpZmljIGFkZHJlc3MgaGFuZGxpbmcsIHBvcnQgYXNzaWdubWVudCwgYW5kIGVycm9yIGNvbmRpdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2FmX2luZXQ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNTpcdFx0XHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmKTtcbiAzMTY6XHRcdFx0XHRpZiAoIWRldikge1xuIDMxNzpcdFx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbiAzMTg6XHRcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiAzMTk6XHRcdFx0XHR9XG4gMzIwOlx0XHRcdH1cbiAzMjE6XHRcbiAzMjI6XHRcdFx0LyogUmVwcm9kdWNlIEFGX0lORVQgY2hlY2tzIHRvIG1ha2UgdGhlIGJpbmRpbmdzIGNvbnNpc3RlbnQgKi9cbiAzMjM6XHRcdFx0djRhZGRyID0gYWRkci1cdTAwM2VzaW42X2FkZHIuczZfYWRkcjMyWzNdO1xuIDMyNDpcdFx0XHRjaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZV9kZXZfdGFibGUobmV0LCBkZXYsIHY0YWRkcik7XG4gMzI1Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMyNjpcdFxuIDMyNzpcdFx0XHRpZiAoIWluZXRfYWRkcl92YWxpZF9vcl9ub25sb2NhbChuZXQsIGluZXQsIHY0YWRkcixcbiAzMjg6XHRcdFx0XHRcdFx0XHQgY2hrX2FkZHJfcmV0KSkge1xuIDMyOTpcdFx0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuIDMzMDpcdFx0XHRcdGdvdG8gb3V0O1xuIDMzMTpcdFx0XHR9XG4gMzMyOlx0XHR9IGVsc2Uge1xuIDMzMzpcdFx0XHRpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9BTlkpIHtcbiAzMzQ6XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcbiAzMzU6XHRcbiAzMzY6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzM3Olx0XHRcdFx0aWYgKF9faXB2Nl9hZGRyX25lZWRzX3Njb3BlX2lkKGFkZHJfdHlwZSkpIHtcbiAzMzg6XHRcdFx0XHRcdGlmIChhZGRyX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSBcdTAwMjZcdTAwMjZcbiAzMzk6XHRcdFx0XHRcdCAgICBhZGRyLVx1MDAzZXNpbjZfc2NvcGVfaWQpIHtcbiAzNDA6XHRcdFx0XHRcdFx0LyogT3ZlcnJpZGUgYW55IGV4aXN0aW5nIGJpbmRpbmcsIGlmIGFub3RoZXIgb25lXG4gMzQxOlx0XHRcdFx0XHRcdCAqIGlzIHN1cHBsaWVkIGJ5IHVzZXIuXG4gMzQyOlx0XHRcdFx0XHRcdCAqL1xuIDM0MzpcdFx0XHRcdFx0XHRzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYgPSBhZGRyLVx1MDAzZXNpbjZfc2NvcGVfaWQ7XG4gMzQ0Olx0XHRcdFx0XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0XHRcdFx0XHQvKiBCaW5kaW5nIHRvIGxpbmstbG9jYWwgYWRkcmVzcyByZXF1aXJlcyBhbiBpbnRlcmZhY2UgKi9cbiAzNDc6XHRcdFx0XHRcdGlmICghc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmKSB7XG4gMzQ4Olx0XHRcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMzQ5Olx0XHRcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiAzNTA6XHRcdFx0XHRcdH1cbiAzNTE6XHRcdFx0XHR9XG4gMzUyOlx0XG4gMzUzOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZikge1xuIDM1NDpcdFx0XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY0MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gbGluZXMgMzU1LTM4NSBvZiBgbmV0L2lwdjYvYWZfaW5ldDYuY2AsIGV4cHJlc3NlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb246CgoqKkRlbHZpbmcgaW50byB0aGUgSVB2NiBBZGRyZXNzIEZhbWlseSBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBJUHY2IGFkZHJlc3MgZmFtaWx5IGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIGFzIHRoZSBkZXRhaWxzIGNhbiBnZXQgcXVpdGUgaW50cmljYXRlLiBGb2N1c2luZyBvbiBsaW5lcyAzNTUtMzg1LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguLi4gKmFoLCB5ZXMsIHRoZSBgaW5ldDZfY3JlYXRlYCBmdW5jdGlvbiYjMzk7cyBoYW5kbGluZyBvZiBzcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyouIEkgYmV0IHdlIGFyZSBsb29raW5nIGF0IGhvdyBhIHNvY2tldCBpcyBiZWluZyBzZXQgdXAgaW4gcmVsYXRpb24gdG8gdGhpbmdzIGxpa2UgdHJhZmZpYyBjbGFzc2VzLCBmbG93IGxhYmVscywgYW5kIHNjb3BlIElELgoKSSYjMzk7bSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCB0aGUgZmluZXItZ3JhaW5lZCBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBQcm9iYWJseSwgd2UgYXJlIGNoZWNraW5nIGZvciBpbnZhbGlkIHZhbHVlcywgYW5kIHByb3Blcmx5IGFzc2lnbmluZyBvciBpbml0aWFsaXppbmcgdGhvc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGlzIGxpa2VseSBtYWtpbmcgc3VyZSB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB1bmRlcmx5aW5nIElQdjYgcHJvdG9jb2wuIE1heWJlIHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBuZXR3b3JrIGludGVyZmFjZXMgaGFwcGVuaW5nIGluIHRoaXMgc2VnbWVudDsgSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueSBmdW5jdGlvbiBjYWxscyB0aGF0IG1pZ2h0IHNpZ25hbCB0aGF0LgoKSXQmIzM5O3MgbGlrZWx5IGNoZWNraW5nIGFuZCB2YWxpZGF0aW5nIHNwZWNpZmljIHNldHRpbmdzIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIFJGQ3MgYW5kIG90aGVyIHN0YW5kYXJkcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIGRlZmF1bHQgdmFsdWVzIGJlaW5nIHNldCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGludGVyZXN0aW5nLiBUaGVyZSBjb3VsZCBiZSBzdWJ0bGV0aWVzIGluIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBuZXR3b3JrIHN0YWNrLiBIbW0sIEkgYW50aWNpcGF0ZSB0aGVyZSBhcmUgYSBzZXJpZXMgb2YgYGlmYCBzdGF0ZW1lbnRzIHJlbGF0ZWQgdG8gdmFsaWRhdGluZyBzb2NrZXQgb3B0aW9uIHBhcmFtZXRlcnMuIE15IGd1ZXNzIGlzIHRoZXJlIGFyZSBjaGVja3MgZm9yIGludmFsaWQgdHJhZmZpYyBjbGFzcyB2YWx1ZXMsIGZsb3cgbGFiZWxzLCBhbmQgZW5zdXJpbmcgdGhlIHNjb3BlIElEIGlzIHdpdGhpbiB0aGUgYXBwcm9wcmlhdGUgcmFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWZfaW5ldDYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU1Olx0XHRcdFx0XHRpZiAoIWRldikge1xuIDM1NjpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDM1NzpcdFx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMzU4Olx0XHRcdFx0XHR9XG4gMzU5Olx0XHRcdFx0fVxuIDM2MDpcdFxuIDM2MTpcdFx0XHRcdC8qIGlwdjQgYWRkciBvZiB0aGUgc29ja2V0IGlzIGludmFsaWQuICBPbmx5IHRoZVxuIDM2MjpcdFx0XHRcdCAqIHVuc3BlY2lmaWVkIGFuZCBtYXBwZWQgYWRkcmVzcyBoYXZlIGEgdjQgZXF1aXZhbGVudC5cbiAzNjM6XHRcdFx0XHQgKi9cbiAzNjQ6XHRcdFx0XHR2NGFkZHIgPSBMT09QQkFDSzRfSVBWNjtcbiAzNjU6XHRcdFx0XHRpZiAoIShhZGRyX3R5cGUgXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpKVx0e1xuIDM2NjpcdFx0XHRcdFx0aWYgKCFpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldCkgXHUwMDI2XHUwMDI2XG4gMzY3Olx0XHRcdFx0XHQgICAgIWlwdjZfY2hrX2FkZHIobmV0LCBcdTAwMjZhZGRyLVx1MDAzZXNpbjZfYWRkcixcbiAzNjg6XHRcdFx0XHRcdFx0XHQgICBkZXYsIDApKSB7XG4gMzY5Olx0XHRcdFx0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuIDM3MDpcdFx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMzcxOlx0XHRcdFx0XHR9XG4gMzcyOlx0XHRcdFx0fVxuIDM3MzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM3NDpcdFx0XHR9XG4gMzc1Olx0XHR9XG4gMzc2Olx0XG4gMzc3Olx0XHRpbmV0LVx1MDAzZWluZXRfcmN2X3NhZGRyID0gdjRhZGRyO1xuIDM3ODpcdFx0aW5ldC1cdTAwM2VpbmV0X3NhZGRyID0gdjRhZGRyO1xuIDM3OTpcdFxuIDM4MDpcdFx0c2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyID0gYWRkci1cdTAwM2VzaW42X2FkZHI7XG4gMzgxOlx0XG4gMzgyOlx0XHRpZiAoIShhZGRyX3R5cGUgXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpKVxuIDM4MzpcdFx0XHRucC1cdTAwM2VzYWRkciA9IGFkZHItXHUwMDNlc2luNl9hZGRyO1xuIDM4NDpcdFxuIDM4NTpcdFx0c2F2ZWRfaXB2Nm9ubHkgPSBzay1cdTAwM2Vza19pcHY2b25seTtcbiAzODY6XHRcdGlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSBcdTAwMjZcdTAwMjYgYWRkcl90eXBlICE9IElQVjZfQUREUl9NQVBQRUQpXG4gMzg3Olx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gMTtcbiAzODg6XHRcbiAzODk6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBhcmUgYWxsb3dlZCB0byBiaW5kIGhlcmUuICovXG4gMzkwOlx0XHRpZiAoc251bSB8fCAhKGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKSB8fFxuIDM5MTpcdFx0XHQgICAgICAoZmxhZ3MgXHUwMDI2IEJJTkRfRk9SQ0VfQUREUkVTU19OT19QT1JUKSkpIHtcbiAzOTI6XHRcdFx0ZXJyID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VnZXRfcG9ydChzaywgc251bSk7XG4gMzkzOlx0XHRcdGlmIChlcnIpIHtcbiAzOTQ6XHRcdFx0XHRzay1cdTAwM2Vza19pcHY2b25seSA9IHNhdmVkX2lwdjZvbmx5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgYW5kIE5vbi1Mb2NhbCBCaW5kaW5nKioKCk9rYXksIHNvIEkgc2VlIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldClgLi4uIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgSVB2NiBuZXR3b3JraW5nIGFuZCB0aGUgY3J1Y2lhbCBjb25jZXB0IG9mIG5vbi1sb2NhbCBiaW5kaW5nLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgd2hlcmUgc29ja2V0IGJpbmRpbmcgYmVoYXZpb3IgbWlnaHQgZGV2aWF0ZSBmcm9tIHRoZSBub3JtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uLiBUbyB0cnVseSBncmFzcCB3aGF0JiMzOTtzIGhhcHBlbmluZywgSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kYC4gVGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGlmIGEgcHJvY2VzcywgYm91bmQgdG8gYW4gSVB2NiBhZGRyZXNzLCBpcyBhbGxvd2VkIHRvIHJlY2VpdmUgdHJhZmZpYyBkZXN0aW5lZCBmb3IgYSBkaWZmZXJlbnQgYWRkcmVzcyBvbiB0aGF0IGludGVyZmFjZS4gSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljczogd2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gaXQsIHdoYXQgY3JpdGVyaWEgYXJlIGJlaW5nIGNoZWNrZWQgaW50ZXJuYWxseSwgYW5kIHdoYXQgdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBrZXkgdG8gbWFraW5nIGEganVkZ2VtZW50IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfY2FuX25vbmxvY2FsX2JpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXB2Ni5oPTg0Nj1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3RvX2Zsb3dfY29weV92NmFkZHJzKHN0cnVjdCBmbG93X2tleXMgKmZsb3csXG4tLVxuaW5jbHVkZS9uZXQvaXB2Ni5oLTg1Ny1cbmluY2x1ZGUvbmV0L2lwdjYuaDo4NTg6c3RhdGljIGlubGluZSBib29sIGlwdjZfY2FuX25vbmxvY2FsX2JpbmQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTg1OS1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0KVxuLS1cbm5ldC9pcHY0L3BpbmcuYz0zMDI9c3RhdGljIGludCBwaW5nX2NoZWNrX2JpbmRfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X3NvY2sgKmlzayxcbi0tXG5uZXQvaXB2NC9waW5nLmMtMzc1LVxubmV0L2lwdjQvcGluZy5jOjM3NjpcdFx0aWYgKCEoaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGlzaykgfHwgaGFzX2FkZHIgfHxcbm5ldC9pcHY0L3BpbmcuYy0zNzctXHRcdCAgICAgIGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZKSlcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTI2NT1pbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy0zNjUtXHRcdFx0aWYgKCEoYWRkcl90eXBlIFx1MDAyNiBJUFY2X0FERFJfTVVMVElDQVNUKSlcdHtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6MzY2Olx0XHRcdFx0aWYgKCFpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldCkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTM2Ny1cdFx0XHRcdCAgICAhaXB2Nl9jaGtfYWRkcihuZXQsIFx1MDAyNmFkZHItXHUwMDNlc2luNl9hZGRyLFxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmM9Nzk3PWludCBpcDZfZGF0YWdyYW1fc2VuZF9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvZGF0YWdyYW0uYy04NjctXHRcdFx0XHRpbnQgc3RyaWN0ID0gX19pcHY2X2FkZHJfc3JjX3Njb3BlKGFkZHJfdHlwZSkgXHUwMDNjPSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMO1xubmV0L2lwdjYvZGF0YWdyYW0uYzo4Njg6XHRcdFx0XHRpZiAoIWlwdjZfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpbmV0X3NrKHNrKSkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTg2OS1cdFx0XHRcdCAgICAhaXB2Nl9jaGtfYWRkcl9hbmRfZmxhZ3MobmV0LCBcdTAwMjZzcmNfaW5mby1cdTAwM2VpcGk2X2FkZHIsXG4tLVxubmV0L2lwdjYvcmF3LmM9MjE3PXN0YXRpYyBpbnQgcmF3djZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbi0tXG5uZXQvaXB2Ni9yYXcuYy0yNzYtXHRcdGlmICghKGFkZHJfdHlwZSBcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9yYXcuYzoyNzc6XHRcdCAgICAhaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChzb2NrX25ldChzayksIGluZXQpKSB7XG5uZXQvaXB2Ni9yYXcuYy0yNzgtXHRcdFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XG4tLVxubmV0L3NjdHAvaXB2Ni5jPTY4Nz1zdGF0aWMgaW50IHNjdHBfdjZfYXZhaWxhYmxlKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNjdHBfc29jayAqc3ApXG4tLVxubmV0L3NjdHAvaXB2Ni5jLTcxNS1cbm5ldC9zY3RwL2lwdjYuYzo3MTY6XHRyZXMgPSBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgXHUwMDI2c3AtXHUwMDNlaW5ldCkgfHxcbm5ldC9zY3RwL2lwdjYuYy03MTctXHQgICAgICBpcHY2X2Noa19hZGRyKG5ldCwgaW42LCBkZXYsIDApO1xuLS1cbm5ldC9zY3RwL2lwdjYuYz05NDc9c3RhdGljIGludCBzY3RwX2luZXQ2X2JpbmRfdmVyaWZ5KHN0cnVjdCBzY3RwX3NvY2sgKm9wdCwgdW5pb24gc2N0cF9hZGRyICphZGRyKVxuLS1cbm5ldC9zY3RwL2lwdjYuYy05NjQtXHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBhZGRyLVx1MDAzZXY2LnNpbjZfc2NvcGVfaWQpO1xubmV0L3NjdHAvaXB2Ni5jOjk2NTpcdFx0XHRpZiAoIWRldiB8fCAhKGlwdjZfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBcdTAwMjZvcHQtXHUwMDNlaW5ldCkgfHxcbm5ldC9zY3RwL2lwdjYuYy05NjYtXHRcdFx0XHQgICAgICBpcHY2X2Noa19hZGRyKG5ldCwgXHUwMDI2YWRkci1cdTAwM2V2Ni5zaW42X2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTcwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kYCBVc2FnZSoqCgpPa2F5LCBzbyBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgaXMgc3ByaW5rbGVkIHRocm91Z2hvdXQgdGhlIElQdjYgbmV0d29ya2luZyBjb2RlLiBJJiMzOTttIHNlZWluZyBpdCByZWZlcmVuY2VkIGluIGBfX2luZXQ2X2JpbmRgLCBgaXA2X2RhdGFncmFtX3NlbmRfY3RsYCwgYHJhd3Y2X2JpbmRgLCBgc2N0cF92Nl9hdmFpbGFibGVgLCBhbmQgYHNjdHBfaW5ldDZfYmluZF92ZXJpZnlgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgc2NvcGUg4oCTIGxvb2tzIGxpa2UgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGhvdyBJUHY2IHNvY2tldCBiaW5kaW5nIGFuZCBjb250cm9sIG9wZXJhdGlvbnMgd29yaywgcGFydGljdWxhcmx5IGluIGJvdGggcmF3IGFuZCBkYXRhZ3JhbSBjb250ZXh0cywgYW5kIGV2ZW4gd2l0aCBTQ1RQLiBJIGtub3cgYSBiaXQgYWJvdXQgdGhvc2UgcHJvdG9jb2xzLCBzbyBJIGNhbiBzdGFydCB0byBpbmZlciB3aGF0IGl0cyByb2xlIG1pZ2h0IGJlLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBhY3R1YWxseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIHRoaXMgZnVuY3Rpb24gaXMgZXZhbHVhdGluZy4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgYWJpbGl0eSB0byBiaW5kIGEgc29ja2V0IHRvIGFuIGFkZHJlc3MgdGhhdCBpc24mIzM5O3QgbG9jYWwgdG8gdGhlIHN5c3RlbSwgd2hpY2ggcmFpc2VzIGFsbCBzb3J0cyBvZiBzZWN1cml0eSBhbmQgcm91dGluZyBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBnZXQgYSBjbG9zZSBsb29rLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLWxvY2FsIGJpbmRpbmdzIGluIElQdjYuIEkmIzM5O20gY3VyaW91cyB3aGF0IGtpbmQgb2YgY2hlY2tzIGl0IHBlcmZvcm1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwdjYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODU1Olx0XG4gODU2Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gODU3Olx0XG4gODU4Olx0c3RhdGljIGlubGluZSBib29sIGlwdjZfY2FuX25vbmxvY2FsX2JpbmQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIDg1OTpcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXG4gODYwOlx0e1xuIDg2MTpcdFx0cmV0dXJuIFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuaXBfbm9ubG9jYWxfYmluZCkgfHxcbiA4NjI6XHRcdFx0dGVzdF9iaXQoSU5FVF9GTEFHU19GUkVFQklORCwgXHUwMDI2aW5ldC1cdTAwM2VpbmV0X2ZsYWdzKSB8fFxuIDg2MzpcdFx0XHR0ZXN0X2JpdChJTkVUX0ZMQUdTX1RSQU5TUEFSRU5ULCBcdTAwMjZpbmV0LVx1MDAzZWluZXRfZmxhZ3MpO1xuIDg2NDpcdH1cbiA4NjU6XHRcbiA4NjY6XHQvKiBTeXNjdGwgc2V0dGluZ3MgZm9yIG5ldCBpcHY2LmF1dG9fZmxvd2xhYmVscyAqL1xuIDg2NzpcdCNkZWZpbmUgSVA2X0FVVE9fRkxPV19MQUJFTF9PRkZcdFx0MFxuIDg2ODpcdCNkZWZpbmUgSVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcdDFcbiA4Njk6XHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfT1BUSU5cdDJcbiA4NzA6XHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfRk9SQ0VEXHQzXG4gODcxOlx0XG4gODcyOlx0I2RlZmluZSBJUDZfQVVUT19GTE9XX0xBQkVMX01BWFx0XHRJUDZfQVVUT19GTE9XX0xBQkVMX0ZPUkNFRFxuIDg3MzpcdFxuIDg3NDpcdCNkZWZpbmUgSVA2X0RFRkFVTFRfQVVUT19GTE9XX0xBQkVMU1x0SVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgU29ja2V0IE9wdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGB0ZXN0X2JpdChJTkVUX0ZMQUdTX0ZSRUVCSU5ELCAmYW1wO2luZXQtJmd0O2luZXRfZmxhZ3MpYCBhbmQgYHRlc3RfYml0KElORVRfRkxBR1NfVFJBTlNQQVJFTlQsICZhbXA7aW5ldC0mZ3Q7aW5ldF9mbGFncylgIHVzZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgaG93IGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIGFyZSBiZWluZyBoYW5kbGVkLiBJbnRlcmVzdGluZyB0aGF0IHRoZXkmIzM5O3JlIG5vdyBzZXR0aW5nIHRoZXNlIGZsYWdzIHRocm91Z2ggY29uY3VycmVudCBzb2NrZXQgb3BlcmF0aW9ucy4gVGhlIGZhY3QgdGhhdCBgc29ja29wdF9sb2NrX3NvY2soc2spYCBpc24mIzM5O3QgYmVpbmcgYWNxdWlyZWQgYW55bW9yZSBpcyBhIHNpZ25pZmljYW50IGRldGFpbCwgc3VnZ2VzdGluZyBhIHJlLWFyY2hpdGVjdGluZyBvZiBob3cgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIG1hbmFnZWQsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2Ugb3IgY29uY3VycmVuY3kgcmVhc29ucy4gSXQmIzM5O3MgZGVmaW5pdGVseSB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgbGlua2VkIHRvIGBDT05GSUdfSVBWNmAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGVuIEkmIzM5O2xsIHNjYW4gYG5ldC9pcHY2L01ha2VmaWxlYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUNikgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG4gICA3Olx0XG4gICA4Olx0aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxuICAgOTpcdFx0XHRhZGRybGFiZWwubyBcXFxuICAxMDpcdFx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxuICAxMTpcdFx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiAgMTI6XHRcdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4gIDEzOlx0XHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4gIDE0Olx0XG4gIDE1Olx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xuICAxNjpcdGlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG4gIDE3Olx0XG4gIDE4Olx0aXB2Ni0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXG4gIDE5Olx0XHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXG4gIDIwOlx0aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuICAyMTpcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWI2X3J1bGVzLm9cbiAgMjI6XHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMjM6XHRpcHY2LSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDI0Olx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xuICAyNTpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xuICAyNjpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuICAyNzpcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuICAyODpcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgJiM0Mzs9IGlvYW02X2lwdHVubmVsLm9cbiAgMjk6XHRcbiAgMzA6XHRvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xuICAzMTpcdG9iai0kKENPTkZJR19JTkVUNl9FU1ApICYjNDM7PSBlc3A2Lm9cbiAgMzI6XHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuICAzMzpcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICYjNDM7PSBpcGNvbXA2Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwpICYjNDM7PSB4ZnJtNl90dW5uZWwub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICYjNDM7PSB0dW5uZWw2Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSAmIzQzOz0gbWlwNi5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xuICAzODpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAzOTpcdFxuICA0MDpcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA4NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkNoZWNraW5nIGZvciBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0lQVjZgIGlzIGEgbmVjZXNzYXJ5IHJlcXVpcmVtZW50LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQmIzM5O3MgcHJvcGVybHkgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgYENPTkZJR19JUFY2YCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NiBzdWJzeXN0ZW0uIFNvLCBsZXQgbWUgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYC4gSSYjMzk7bGwgb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBpbnRlbmRlZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfSVBWNmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgb3B0aW9ucyBhcmUgdW5kZXJzdG9vZCB3aXRoaW4gdGhlIHJlbGV2YW50IEtjb25maWcgY29udGV4dC4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB0byBwcm9jZWVkLCBzbyBpdCYjMzk7cyBiZXN0IHRvIGNvbmZpcm0gaXQgZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2XFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFyb3VuZCB0aGF0IGxpbmUgNi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZmlsZSBpcywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHRoZSBLY29uZmlnIGZpbGUgcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIElQdjYtcmVsYXRlZCBmZWF0dXJlcyBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSYjMzk7bSBwcm9iYWJseSBpbnRlcmVzdGVkIGluIGhvdyBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHdoYXQgZ3JhbnVsYXIgY29udHJvbCB0aGUgdXNlciBoYXMgb3ZlciBzcGVjaWZpYyBmZWF0dXJlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgZGVzY3JpcHRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZWFjaCBvcHRpb24gZG9lcyBhbmQgd2hlbiBpdCBzaG91bGQgYmUgc2VsZWN0ZWQuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG5pY2hlIHNldHVwcyBvciBzcGVjaWZpYyB1c2UgY2FzZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUFY2XG4gICA3Olx0XHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU3VwcG9ydCBmb3IgSVAgdmVyc2lvbiA2IChJUHY2KS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgSVB2Niwgc2VlXG4gIDE0Olx0XHQgIFx1MDAzY2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lQdjZcdTAwM2UuXG4gIDE1Olx0XHQgIEZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBJUHY2IHVuZGVyIExpbnV4LCBzZWVcbiAgMTY6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYucnN0IGFuZCByZWFkIHRoZSBIT1dUTyBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9IT1dUTy9MaW51eCYjNDM7SVB2Ni1IT1dUTy9cdTAwM2VcbiAgMTg6XHRcbiAgMTk6XHRpZiBJUFY2XG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiAgMjI6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFJvdXRlciBQcmVmZXJlbmNlIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byB0aGUgUm91dGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byBJUHY2IERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYElQdjZgIHdvcmtzIHdpdGhpbiB0aGlzIHN5c3RlbSwgYW5kIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0cyBmdW5jdGlvbmFsaXR5IGlzIGRlcGVuZGVudCBvbiBib3RoIGBORVRgIGFuZCBgSU5FVGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYElQdjZgIGlzIGJ1aWx0IG9uIHRoZSBuZXR3b3JrIGxheWVyIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJuZXQgcHJvdG9jb2wuIFRvIHVuZGVyc3RhbmQgaG93IHRoYXQgYWxsIGZpdHMgdG9nZXRoZXIsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgdGhlIHNwZWNpZmljcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQvS2NvbmZpZ2AgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O25ldC9pcHY2L0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTEzNz1zb3VyY2UgXCYjMzQ7bmV0L2lwdjQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MTM4OnNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0xMzktc291cmNlIFwmIzM0O25ldC9uZXRsYWJlbC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIG9yIHBlcmhhcHMgaG93IGFuIGV4aXN0aW5nIG9uZSBjYW4gYmUgZXhwYW5kZWQuICBMaW5lIDEzOCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIG9mdGVuIGEgY2VudHJhbCBhcmVhIGZvciBzcGVjaWZpYyBmZWF0dXJlcywgb3IgbWF5YmUgcmVsYXRlZCBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYSBuZXR3b3JrIG1vZHVsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGZpbGUuIEkgYW50aWNpcGF0ZSBpdCBtaWdodCBjb250YWluIGEgYGNvbmZpZ2AgZGVmaW5pdGlvbiwgYSBgbWVudWNvbmZpZ2AgYmxvY2ssIG9yIHBlcmhhcHMgZXZlbiBhbiBgaWZgIHN0YXRlbWVudCBiYXNlZCBvbiBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYXQgbGVhc3QgYSBiYXNpYyBgaGVscGAgc2VjdGlvbiBhbmQgcHJvYmFibHkgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBnYXRpbmcgY29uZGl0aW9ucy4gIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgIGJlaGF2aW9yIG9mIHRoZSBUQ1AvSVAgY29kZSBieSB3cml0aW5nIHRvIHRoZSAodmlydHVhbCkgZmlsZXMgaW5cbiAxMzE6XHRcdCAgL3Byb2Mvc3lzL25ldC9pcHY0Lyo7IHRoZSBvcHRpb25zIGFyZSBleHBsYWluZWQgaW4gdGhlIGZpbGVcbiAxMzI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFx1MDAzZS5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgU2hvcnQgYW5zd2VyOiBzYXkgWS5cbiAxMzU6XHRcbiAxMzY6XHRpZiBJTkVUXG4gMTM3Olx0c291cmNlIFwmIzM0O25ldC9pcHY0L0tjb25maWdcJiMzNDtcbiAxMzg6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvS2NvbmZpZ1wmIzM0O1xuIDEzOTpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0bGFiZWwvS2NvbmZpZ1wmIzM0O1xuIDE0MDpcdHNvdXJjZSBcJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZ1wmIzM0O1xuIDE0MTpcdFxuIDE0MjpcdGVuZGlmICMgaWYgSU5FVFxuIDE0MzpcdFxuIDE0NDpcdGNvbmZpZyBORVRXT1JLX1NFQ01BUktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NDIKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU29ja2V0IE9wdGlvbiBDaGFuZ2UgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyByZWxhdGVkIHRvIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY29ycmVjdGx5IGNvbmZpZ3VyaW5nIHRoZSBmdXp6ZXIuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JUFY2YCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSwgd2l0aCBgQ09ORklHX0lORVRgIGFzIGEgZGVwZW5kZW5jeS4KCkJhc2VkIG9uIHRoZSBpbml0aWFsIGNoZWNrLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBbJiMzNDtJUFY2JiMzNDtdYC4gV2hpbGUgYElORVRgIGlzIGEgZGVwZW5kZW5jeSwgYElQVjZgIGl0c2VsZiBpcyB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gY29udHJvbGxpbmcgYGlwdjZfc29ja2dsdWUuY2AuCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0OiBgRm9jdXNTeW1ib2xzYC4gVGhlIGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBpdHMgZW50cnkgcG9pbnQgYGlwdjZfc2V0c29ja29wdGAuIFdlIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlIHRvIGF2b2lkIGRpbHV0aW9uLCBzbyBubyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgcmVzdWx0LiBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBpdCBjYW4gYmUgb21pdHRlZC4gYGRvX2lwdjZfZ2V0c29ja29wdGAgaXMgcmVsZXZhbnQsIGJ1dCB0aGUgZm9jdXMgaXMgb24gbW9kaWZpY2F0aW9uLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaXMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgYW5kIGl0IGlzICpub3QqIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gYGlwdjZfc2V0c29ja29wdGAgaXMgYWxzbyAqbm90KiBzdGF0aWMsIGFuZCBpcyB0aGUgZW50cnkgcG9pbnQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy4KClRoZSBkaWZmIGNvbmZpcm1zIG15IGFzc2Vzc21lbnQ7IG9ubHkgY2hhbmdlcyB3aXRoaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgYW5kIHNwZWNpZmljYWxseSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCAobGluZXMgNDAxLTQxNSBhbmQgNjY2LTY4OCkuIFRodXMsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBgWyYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDssICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDtdYC4KCklzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIHBhdGNoIGFsdGVycyB0aGUgbG9ja2luZyBjb250cmFjdCwgZW5hYmxpbmcgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgdG8gYmUgc2V0IHdpdGhvdXQgaG9sZGluZyB0aGUgc29ja2V0IGxvY2suIFRoaXMgaW1wYWN0cyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIGNvbmN1cnJlbmN5IGlzc3VlcyBhY2Nlc3NpYmxlIHRocm91Z2ggdXNlci1zcGFjZSBgc2V0c29ja29wdGAgY2FsbHMuIFRoaXMgY2hhbmdlIG5lZWRzIHRob3JvdWdoIHRlc3RpbmcgdG8gaWRlbnRpZnkgYW55IHJhY2VzLgoKSW4gc3VtbWFyeSwgdGhlIGZ1enplciB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgbG9ja2luZyBmb3IgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCwgd2hpY2ggY291bGQgZXhwb3NlIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBzZXRzb2Nrb3B0LgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJUFY2JiMzNDtdYAoKUmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyBpbiBkb19pcHY2X3NldHNvY2tvcHQoKSB0byB0aGUgbG9ja2xlc3Mgc3dpdGNoLXN0YXRlbWVudCBibG9jayBiZWZvcmUgbG9ja19zb2NrKHNrKSBpcyBhY3F1aXJlZC4gVGhlIG9wdGlvbnMgYXJlIHNldCB1c2luZyBpbmV0X2Fzc2lnbl9iaXQoKSwgbW9kaWZ5aW5nIGJpdCBmbGFncyBvbiB0aGUgc29ja2V0LiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNlYTk2YmQ0YzQ0Mjk1ODBkNzkyNDcyZjY0YTdiMGU2OTFhMzFhY2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo1NToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0zOTgsNiAmIzQzOzM5OCwyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAogCS8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC4gKi8KIAlzd2l0Y2ggKG9wdG5hbWUpIHsKJiM0MzsJY2FzZSBJUFY2X0ZSRUVCSU5EOgomIzQzOwkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJLyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovCiYjNDM7CQlpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIElQVjZfVFJBTlNQQVJFTlQ6CiYjNDM7CQlpZiAodmFsYm9vbCAmYW1wOyZhbXA7ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkKJiM0MzsJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJLyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovCiYjNDM7CQlpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTsKJiM0MzsJCXJldHVybiAwOwogCWNhc2UgSVBWNl9VTklDQVNUX0hPUFM6CiAJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjY2LDI3ICYjNDM7NjgxLDYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHYgPSAwOwogCQlicmVhazsKIAotCWNhc2UgSVBWNl9UUkFOU1BBUkVOVDoKLQkJaWYgKHZhbGJvb2wgJmFtcDsmYW1wOyAhc29ja29wdF9uc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9SQVcpICZhbXA7JmFtcDsKLQkJICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0diA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKLQkJCWdvdG8gZV9pbnZhbDsKLQkJLyogd2UgZG9uJiMzOTt0IGhhdmUgYSBzZXBhcmF0ZSB0cmFuc3BhcmVudCBiaXQgZm9yIElQVjYgd2UgdXNlIHRoZSBvbmUgaW4gdGhlIElQdjQgc29ja2V0ICovCi0JCWluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpOwotCQlyZXR2ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElQVjZfRlJFRUJJTkQ6Ci0JCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKLQkJCWdvdG8gZV9pbnZhbDsKLQkJLyogd2UgYWxzbyBkb24mIzM5O3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqLwotCQlpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTsKLQkJcmV0diA9IDA7Ci0JCWJyZWFrOwotCiAJY2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjoKIAkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQogCQkJZ290byBlX2ludmFsOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5lZWQgZm9yIGEgS01TQU4gRnV6emluZyBTZXNzaW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBhbmQgdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgd2FycmFudCBzcGlubmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IExldCYjMzk7cyBkaXNzZWN0IHRoaXMgbG9naWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgcHJvYmFibHkgdXNpbmcgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGdvb2QgY29udGV4dC4KClRoZSBkaWZmIGlzIHRvdWNoaW5nIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLCB3aGljaCwgYXMgYSByZW1pbmRlciwgaGFuZGxlcyBzb2NrZXQgb3B0aW9ucyBmb3IgSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBpcyByZXdvcmtpbmcgdGhlIHdheSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBoYW5kbGVzIHNvbWUgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgSVBWNl9GUkVFQklORGAgYW5kIGBJUFY2X1RSQU5TUEFSRU5UYCBhcmUgYmVpbmcgbW92ZWQuIFRoZSBwYXRjaCBpcyBzaGlmdGluZyB0aGVzZSBmcm9tIGJlaW5nIGhhbmRsZWQgKnVuZGVyKiB0aGUgc29ja2V0IGxvY2sgdG8gdGhlIHNlY3Rpb24gZGVzY3JpYmVkIGFzICYjMzQ7SGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiYjMzQ7IFRoaXMgaXMgdGhlIGtleS4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0IG1lIGdvIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzk4IGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3IgbmV3IEtNU0FOIHZ1bG5lcmFiaWxpdGllcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IG1vdmluZyB0aGVzZSBvcHRpb25zIGFyb3VuZC4gT25seSB0aGVuIGNhbiBJIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIDM4MTpcdFx0aW50IHJldHYgPSAtRU5PUFJPVE9PUFQ7XG4gMzgyOlx0XHRpbnQgdmFsLCB2YWxib29sO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpKVxuIDM4NTpcdFx0XHR2YWwgPSAwO1xuIDM4NjpcdFx0ZWxzZSB7XG4gMzg3Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNlPSBzaXplb2YoaW50KSkge1xuIDM4ODpcdFx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxuIDM4OTpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzkwOlx0XHRcdH0gZWxzZVxuIDM5MTpcdFx0XHRcdHZhbCA9IDA7XG4gMzkyOlx0XHR9XG4gMzkzOlx0XG4gMzk0Olx0XHR2YWxib29sID0gKHZhbCAhPSAwKTtcbiAzOTU6XHRcbiAzOTY6XHRcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcbiAzOTc6XHRcdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDM5ODpcdFxuIDM5OTpcdFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIDQwMDpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gNDAxOlx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNDAyOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQwNDpcdFx0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbiA0MDU6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4gNDA2Olx0XHRcdHJldHVybiAwO1xuIDQwNzpcdFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuIDQwODpcdFx0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuIDQwOTpcdFx0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4gNDEwOlx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA0MTE6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDEyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDEzOlx0XHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuIDQxNDpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbiA0MTU6XHRcdFx0cmV0dXJuIDA7XG4gNDE2Olx0XHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIDQxNzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MTk6XHRcdFx0aWYgKHZhbCBcdTAwM2UgMjU1IHx8IHZhbCBcdTAwM2MgLTEpXG4gNDIwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDIxOlx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlaG9wX2xpbWl0LCB2YWwpO1xuIDQyMjpcdFx0XHRyZXR1cm4gMDtcbiA0MjM6XHRcdGNhc2UgSVBWNl9NVUxUSUNBU1RfTE9PUDpcbiA0MjQ6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI2Olx0XHRcdGlmICh2YWwgIT0gdmFsYm9vbClcbiA0Mjc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Mjg6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChNQzZfTE9PUCwgc2ssIHZhbGJvb2wpO1xuIDQyOTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMQoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiAxMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IElQdjYgc2V0c29ja29wdCBIYW5kbGVyIFJlb3JnYW5pemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gd2l0aGluIGBkb19pcHY2X3NldHNvY2tvcHRgLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHNvY2tldCBvcHRpb25zIGJlZm9yZSB0aGUgYGxvY2tfc29jayhzaylgIGNhbGwuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBleGFtaW5pbmcgdGhpcyBjb2RlOgoKYGBgYwoJY2FzZSBJUFY2X0ZSRUVCSU5EOgoJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKCQkJcmV0dXJuIC1FSU5WQUw7CgkJLyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovCgkJaW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7CgkJcmV0dXJuIDA7CgoJY2FzZSBJUFY2X1RSQU5TUEFSRU5UOgoJCWlmICh2YWxib29sICZhbXA7JmFtcDsgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfUkFXKSAmYW1wOyZhbXA7CgkJICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkKCQkJcmV0dXJuIC1FUEVSTTsKCQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCgkJCXJldHVybiAtRUlOVkFMOwoJCS8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqLwoJCWluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpOwoJCXJldHVybiAwOwpgYGAKClRoZXNlIGNhc2VzIHdlcmUgKnByZXZpb3VzbHkqIGhhbmRsZWQgYWZ0ZXIgdGhlIGxvY2suIE5vdyB0aGV5IGFyZSBoYW5kbGVkIGJlZm9yZSB0aGUgbG9jay4gSXQmIzM5O3MgYSBzaW1wbGUgcmVvcmRlcmluZyBiYXNlZCBvbiB0aGUgYXRvbWljIG5hdHVyZSBvZiBgaW5ldF9hc3NpZ25fYml0YCwgd2hpY2ggb3BlcmF0ZXMgb24gYml0cywgbWVhbmluZyBgbG9ja19zb2NrYCBpc24mIzM5O3QgcmVxdWlyZWQgZm9yIGl0cyBvcGVyYXRpb25zLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBiaXQgY2hhbmdlLgoKTm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQsIG5vIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgYXJlIG1vZGlmaWVkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgSSBzZWUgbm8gbmV3IGluc3RhbmNlcyBvZiByZWFkaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSYjMzk7cmUgcmVhZGluZyAqZnJvbSogdXNlcnNwYWNlIHRocm91Z2ggYGNvcHlfZnJvbV9zb2NrcHRyYCwgYW5kIHdyaXRpbmcgYSBiaXQgdG8gYSBrZXJuZWwgc3RydWN0dXJlLiBOb3RoaW5nIGdldHMgY29waWVkICpiYWNrKiB0byB1c2Vyc3BhY2UuIFRoaXMgc2V0c29ja29wdCBjYWxsIGFjdHMgYXMgYSBzZXR0ZXIuCgpIZXJlJiMzOTtzIHRoZSBLTVNBTiByZWFzb25pbmc6CgoqICAgKipQYXRjaCBEZXNjcmlwdGlvbjoqKiBUaGUgcGF0Y2ggbW92ZXMgdGhlIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHNvY2tvcHQgaGFuZGxlcnMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgdG8gdGhlIGxvY2tsZXNzIHNlY3Rpb24gYmVmb3JlIGBsb2NrX3NvY2soc2spYC4KKiAgICoqS01TQU4gUmF0aW9uYWxlOioqIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBpbnRyb2R1Y2UgbmV3IHJlYWRzIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBjb3B5IGRhdGEgYmFjayB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBhIHNldHNvY2tvcHQgb3BlcmF0aW9uLCBzZXR0aW5nIGEgYml0IGZsYWcgdmlhIGBpbmV0X2Fzc2lnbl9iaXRgLgoqICAgKipSZWxldmFudCBTYW5pdGl6ZXJzOioqIFdoaWxlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdHJpZ2dlciBLTVNBTiwgY29uY3VycmVuY3kgYXNwZWN0cyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvdGVudGlhbCBjb25jZXJuLCBhbmQgdGhlcmVmb3JlIEtDU0FOL3JhY2UgZGV0ZWN0b3JzIHdvdWxkIGJlIHJlbGV2YW50IGZvciBleGFtaW5pbmcgdGhlIGVmZmVjdHMgb2YgdGhlIGxvY2tsZXNzIGJpdCBzZXR0aW5nLiBLTVNBTiBob3dldmVyIGRvZXMgbm90IGFwcGx5IGhlcmUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuIFRoZSBjb3JlIGNoYW5nZSBpcyBtZXJlbHkgYSBmdW5jdGlvbmFsIHJlb3JnYW5pemF0aW9uIHdpdGggbm8gcmlzayBvZiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyBpbiBkb19pcHY2X3NldHNvY2tvcHQoKSB0byB0aGUgbG9ja2xlc3Mgc3dpdGNoLXN0YXRlbWVudCBibG9jayBiZWZvcmUgbG9ja19zb2NrKHNrKSBpcyBhY3F1aXJlZC4gVGhlIG9wdGlvbnMgYXJlIHNldCB1c2luZyBpbmV0X2Fzc2lnbl9iaXQoKSwgbW9kaWZ5aW5nIGJpdCBmbGFncyBvbiB0aGUgc29ja2V0LiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MTIuNzExNTg4ODc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMDUzMDc4ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb19pcHY2X3NldHNvY2tvcHQoKSB0byBoYW5kbGUgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyB3aXRob3V0IGFjcXVpcmluZyBzb2Nrb3B0X2xvY2tfc29jaygpLiBUaGlzIGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHNldHNvY2tvcHQoKSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgKGZvciBJUFY2X0ZSRUVCSU5EKSBvciBhcHByb3ByaWF0ZWx5IHBlcm1pdHRlZCBuYW1lc3BhY2VzIChmb3IgSVBWNl9UUkFOU1BBUkVOVCksIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gY29uY3VycmVuY3kgaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NToxMi43MTE1OTQxNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYxODgzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZWE5NmJkNGM0NDI5NTgwZDc5MjQ3MmY2NGE3YjBlNjkxYTMxYWNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbmluZGV4IDFmNjhmYjY0YTQzZWYuLjRiMzUzNjU3MWM5ODAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXFxuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXFxuQEAgLTM5OCw2ICszOTgsMjEgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcbiBcXHQvKiBIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbitcXHRjYXNlIElQVjZfRlJFRUJJTkQ6XFxuK1xcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdC8qIFNoYXJlZCB3aXRoIElQX0ZSRUVCSU5ELiAqL1xcbitcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcXG4rXFx0XFx0aWYgKHZhbGJvb2wgXFx1MDAyNlxcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi9cXG4rXFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxcbiBcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC02NjYsMjcgKzY4MSw2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR2ID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxuLVxcdFxcdGlmICh2YWxib29sIFxcdTAwMjZcXHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xcbi1cXHRcXHRcXHRyZXR2ID0gLUVQRVJNO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuLVxcdFxcdFxcdGdvdG8gZV9pbnZhbDtcXG4tXFx0XFx0Lyogd2UgZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIHRyYW5zcGFyZW50IGJpdCBmb3IgSVBWNiB3ZSB1c2UgdGhlIG9uZSBpbiB0aGUgSVB2NCBzb2NrZXQgKi9cXG4tXFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7XFxuLVxcdFxcdHJldHYgPSAwO1xcbi1cXHRcXHRicmVhaztcXG4tXFxuLVxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG4tXFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbi1cXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuLVxcdFxcdC8qIHdlIGFsc28gZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqL1xcbi1cXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG4tXFx0XFx0cmV0diA9IDA7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXG4gXFx0Y2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjpcXG4gXFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiBcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjE0LjA1ODM0NjY5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcxMjA4NDE3MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2VhOTZiZDRjNDQyOTU4MGQ3OTI0NzJmNjRhN2IwZTY5MWEzMWFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zOTgsNiArMzk4LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFxuIFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4rXHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4rXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbitcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuK1x0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4rXHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuK1x0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC02NjYsMjcgKzY4MSw2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR2ID0gMDtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4tXHRcdGlmICh2YWxib29sIFx1MDAyNlx1MDAyNiAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuLVx0XHRcdHJldHYgPSAtRVBFUk07XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4tXHRcdFx0Z290byBlX2ludmFsO1xuLVx0XHQvKiB3ZSBkb24ndCBoYXZlIGEgc2VwYXJhdGUgdHJhbnNwYXJlbnQgYml0IGZvciBJUFY2IHdlIHVzZSB0aGUgb25lIGluIHRoZSBJUHY0IHNvY2tldCAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuLVx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGFsc28gZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuIFx0Y2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0Z290byBlX2ludmFsO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MTQuMDU4MzQ4NTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE0NzgzNDQyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgQU1ENjQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIHJlcXVlc3QgaXMgdG8gZXZhbHVhdGUgaXQuIEZpbmUsIGxldCdzIGRpdmUgaW4uIFNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIG1vdmluZyB0aGUgaGFuZGxpbmcgb2YgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgd2l0aGluIGBkb19pcHY2X3NldHNvY2tvcHRgLiBSaWdodCwgc28gdGhleSdyZSBtb3ZpbmcgdGhlbSBmcm9tIHRoZSBsb2NrZWQgc2VjdGlvbiB0byB0aGUgdW5sb2NrZWQgc2VjdGlvbi4gVGhlIGNvbW1lbnQgc2F5cyBcIkhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC5cIlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBXaGF0J3MgdGhlIHJhdGlvbmFsZSBoZXJlPyBJcyBpdCBwZXJmb3JtYW5jZS1iYXNlZD8gUmVkdWNlZCBjb250ZW50aW9uPyBJbmNyZWFzZWQgcGFyYWxsZWxpc20/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLlxuXG5SaWdodCwgc28gbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFNwZWNpZmljYWxseSwgSSdsbCBzdGFydCBieSBjaGVja2luZyBhcm91bmQgbGluZSAzOTgsIHdoZXJlIGBkb19pcHY2X3NldHNvY2tvcHRgIGlzIHByb2JhYmx5IGRlZmluZWQsIGFuZCB0aGVuIGNoZWNrIG5lYXIgbGluZSA2NjYgZm9yIGhvdyB0aG9zZSBvcHRpb25zIGFyZSB1c2VkIG9yIG1vdmVkIGFyb3VuZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRob3NlIG9wdGlvbnMgd2VyZSBiZWluZyBoYW5kbGVkIGJlZm9yZSwgYW5kIGhvdyB0aGV5IGFyZSBub3cuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgY2hhbmdlcyB0aGUgbG9ja2luZyBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgY2hhbmdlIHRoYXQncyBiZWluZyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MjUuNTM2Njk2Mzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuIDM4MTpcXHRcXHRpbnQgcmV0diA9IC1FTk9QUk9UT09QVDtcXG4gMzgyOlxcdFxcdGludCB2YWwsIHZhbGJvb2w7XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSlcXG4gMzg1OlxcdFxcdFxcdHZhbCA9IDA7XFxuIDM4NjpcXHRcXHRlbHNlIHtcXG4gMzg3OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzZT0gc2l6ZW9mKGludCkpIHtcXG4gMzg4OlxcdFxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2dmFsLCBvcHR2YWwsIHNpemVvZih2YWwpKSlcXG4gMzg5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzOTA6XFx0XFx0XFx0fSBlbHNlXFxuIDM5MTpcXHRcXHRcXHRcXHR2YWwgPSAwO1xcbiAzOTI6XFx0XFx0fVxcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHR2YWxib29sID0gKHZhbCAhPSAwKTtcXG4gMzk1OlxcdFxcbiAzOTY6XFx0XFx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbiAzOTc6XFx0XFx0XFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHQvKiBIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXFxuIDQwMDpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gNDAxOlxcdFxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG4gNDAyOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MDQ6XFx0XFx0XFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXFxuIDQwNTpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG4gNDA2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MDc6XFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbiA0MDg6XFx0XFx0XFx0aWYgKHZhbGJvb2wgXFx1MDAyNlxcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcXHUwMDI2XFx1MDAyNlxcbiA0MDk6XFx0XFx0XFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4gNDEwOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDQxMTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQxMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDEzOlxcdFxcdFxcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xcbiA0MTQ6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7XFxuIDQxNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDE2OlxcdFxcdGNhc2UgSVBWNl9VTklDQVNUX0hPUFM6XFxuIDQxNzpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQxODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDE5OlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzZSAyNTUgfHwgdmFsIFxcdTAwM2MgLTEpXFxuIDQyMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDIxOlxcdFxcdFxcdFdSSVRFX09OQ0UobnAtXFx1MDAzZWhvcF9saW1pdCwgdmFsKTtcXG4gNDIyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MjM6XFx0XFx0Y2FzZSBJUFY2X01VTFRJQ0FTVF9MT09QOlxcbiA0MjQ6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0MjU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyNjpcXHRcXHRcXHRpZiAodmFsICE9IHZhbGJvb2wpXFxuIDQyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI4OlxcdFxcdFxcdGluZXQ2X2Fzc2lnbl9iaXQoTUM2X0xPT1AsIHNrLCB2YWxib29sKTtcXG4gNDI5OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NToyNS41MzY3ODc5NjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzgzMDA2MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IFNvY2tldCBPcHRpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBJUHY2IHNvY2tldCBvcHRpb25zIGFyZSBiZWluZyBtYW5hZ2VkLiBSaWdodCwgYGRvX2lwdjZfc2V0c29ja29wdGAg4oCTIHRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiAgSXTigJlzIHRoZSBnby10byBmb3IgaGFuZGxpbmcgYHNldHNvY2tvcHRgIGNhbGxzIHNwZWNpZmljYWxseSBmb3IgSVB2Ni4gSSBrbm93IGl0IGRlYWxzIHdpdGggdGhpbmdzIGxpa2UgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIE5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpdCAqdXNlZCogdG8gYmUgaGFuZGxlZCB3aXRoaW4gdGhlIHNvY2tldCBsb2NrLCBvciBhZnRlciBhIGNhbGwgdG8gYGxvY2tfc29jayhzaylgLiBUaGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJvdHRsZW5lY2tzIGNvdWxkIGFyaXNlLiAgSSBzaG91bGQgcHJvYmFibHkgcmUtcmVhZCB0aGUgY29kZSBzdXJyb3VuZGluZyBgbG9ja19zb2NrKHNrKWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgZXhhY3RseSBpcyB0aGF0IGNhbGxlZCB3aXRoaW4gYGRvX2lwdjZfc2V0c29ja29wdGA/IFRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MjkuOTE5Nzk2NjY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHRcXHRjYXNlIElQVjZfTVVMVElDQVNUX0hPUFM6XFxuIDQzMTpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pXFxuIDQzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0djtcXG4gNDMzOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MzU6XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIDI1NSB8fCB2YWwgXFx1MDAzYyAtMSlcXG4gNDM2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mzc6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlbWNhc3RfaG9wcyxcXG4gNDM4OlxcdFxcdFxcdFxcdCAgIHZhbCA9PSAtMSA/IElQVjZfREVGQVVMVF9NQ0FTVEhPUFMgOiB2YWwpO1xcbiA0Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ0MDpcXHRcXHRjYXNlIElQVjZfTVRVOlxcbiA0NDE6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0MzpcXHRcXHRcXHRpZiAodmFsIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNjIElQVjZfTUlOX01UVSlcXG4gNDQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NDU6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlZnJhZ19zaXplLCB2YWwpO1xcbiA0NDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ0NzpcXHRcXHRjYXNlIElQVjZfTUlOSE9QQ09VTlQ6XFxuIDQ0ODpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQ0OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDUwOlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwIHx8IHZhbCBcXHUwMDNlIDI1NSlcXG4gNDUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRcXHRpZiAodmFsKVxcbiA0NTQ6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNmlwNl9taW5faG9wY291bnQpO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRcXHQvKiB0Y3BfdjZfZXJyKCkgYW5kIHRjcF92Nl9yY3YoKSBtaWdodCByZWFkIG1pbl9ob3Bjb3VudFxcbiA0NTc6XFx0XFx0XFx0ICogd2hpbGUgd2UgYXJlIGNoYW5naW5nIGl0LlxcbiA0NTg6XFx0XFx0XFx0ICovXFxuIDQ1OTpcXHRcXHRcXHRXUklURV9PTkNFKG5wLVxcdTAwM2VtaW5faG9wY291bnQsIHZhbCk7XFxuIDQ2MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDYxOlxcdFxcdGNhc2UgSVBWNl9SRUNWRVJSX1JGQzQ4ODQ6XFxuIDQ2MjpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQ2MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDY0OlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwIHx8IHZhbCBcXHUwMDNlIDEpXFxuIDQ2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDY2OlxcdFxcdFxcdGluZXQ2X2Fzc2lnbl9iaXQoUkVDVkVSUjZfUkZDNDg4NCwgc2ssIHZhbGJvb2wpO1xcbiA0Njc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2ODpcXHRcXHRjYXNlIElQVjZfTVVMVElDQVNUX0FMTDpcXG4gNDY5OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDcwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzE6XFx0XFx0XFx0aW5ldDZfYXNzaWduX2JpdChNQzZfQUxMLCBzaywgdmFsYm9vbCk7XFxuIDQ3MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDczOlxcdFxcdGNhc2UgSVBWNl9BVVRPRkxPV0xBQkVMOlxcbiA0NzQ6XFx0XFx0XFx0aW5ldDZfYXNzaWduX2JpdChBVVRPRkxPV0xBQkVMLCBzaywgdmFsYm9vbCk7XFxuIDQ3NTpcXHRcXHRcXHRpbmV0Nl9zZXRfYml0KEFVVE9GTE9XTEFCRUxfU0VULCBzayk7XFxuIDQ3NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDc3OlxcdFxcdGNhc2UgSVBWNl9ET05URlJBRzpcXG4gNDc4OlxcdFxcdFxcdGluZXQ2X2Fzc2lnbl9iaXQoRE9OVEZSQUcsIHNrLCB2YWxib29sKTtcXG4gNDc5OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NToyOS45MTk4OTc1OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ5ODY3MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbG9ja19zb2NrYCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIGBsb2NrX3NvY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24sIG9yIG1hY3JvLCBpcyAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoIGFuZCBwaW5wb2ludCB0aGUgYXJlYXMgb2YgdGhlIGNvZGUgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhpcyB2YXJpYWJsZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHJlZmFjdG9yaW5nIGlzIG5lZWRlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjMyLjU2OTc2NzI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDgwOlxcdFxcdGNhc2UgSVBWNl9SRUNWRVJSOlxcbiA0ODE6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0ODI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ4MzpcXHRcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFJFQ1ZFUlI2LCBzaywgdmFsYm9vbCk7XFxuIDQ4NDpcXHRcXHRcXHRpZiAoIXZhbClcXG4gNDg1OlxcdFxcdFxcdFxcdHNrYl9lcnJxdWV1ZV9wdXJnZShcXHUwMDI2c2stXFx1MDAzZXNrX2Vycm9yX3F1ZXVlKTtcXG4gNDg2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0ODc6XFx0XFx0Y2FzZSBJUFY2X1JPVVRFUl9BTEVSVF9JU09MQVRFOlxcbiA0ODg6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ5MDpcXHRcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFJUQUxFUlRfSVNPTEFURSwgc2ssIHZhbGJvb2wpO1xcbiA0OTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ5MjpcXHRcXHRjYXNlIElQVjZfTVRVX0RJU0NPVkVSOlxcbiA0OTM6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0OTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ5NTpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgSVBWNl9QTVRVRElTQ19ET05UIHx8IHZhbCBcXHUwMDNlIElQVjZfUE1UVURJU0NfT01JVClcXG4gNDk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0OTc6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlcG10dWRpc2MsIHZhbCk7XFxuIDQ5ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDk5OlxcdFxcdGNhc2UgSVBWNl9GTE9XSU5GT19TRU5EOlxcbiA1MDA6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA1MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUwMjpcXHRcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFNOREZMT1csIHNrLCB2YWxib29sKTtcXG4gNTAzOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDQ6XFx0XFx0Y2FzZSBJUFY2X0FERFJfUFJFRkVSRU5DRVM6XFxuIDUwNTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDUwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTA3OlxcdFxcdFxcdHJldHVybiBpcDZfc29ja19zZXRfYWRkcl9wcmVmZXJlbmNlcyhzaywgdmFsKTtcXG4gNTA4OlxcdFxcdGNhc2UgSVBWNl9NVUxUSUNBU1RfSUY6XFxuIDUwOTpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pXFxuIDUxMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiA1MTE6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA1MTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxMzpcXHRcXHRcXHRpZiAodmFsKSB7XFxuIDUxNDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA1MTU6XFx0XFx0XFx0XFx0aW50IGJvdW5kX2Rldl9pZiwgbWlkeDtcXG4gNTE2OlxcdFxcbiA1MTc6XFx0XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHZhbCk7XFxuIDUyMDpcXHRcXHRcXHRcXHRpZiAoIWRldikge1xcbiA1MjE6XFx0XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDUyMjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTIzOlxcdFxcdFxcdFxcdH1cXG4gNTI0OlxcdFxcdFxcdFxcdG1pZHggPSBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KGRldik7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRcXHRcXHRib3VuZF9kZXZfaWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuIDUyOTpcXHRcXHRcXHRcXHRpZiAoYm91bmRfZGV2X2lmIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjMyLjU2OTg3MjMwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDYwMjY2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIGEgc3VtbWFyeSBhcyBpZiBJJ20gcHJvY2Vzc2luZyB0aGUgXCJUaG91Z2h0c1wiIHlvdSd2ZSBwcm92aWRlZDpcblxuKipQcm9jZXNzaW5nIHRoZSBJbmZvcm1hdGlvbi4uLiBMb29raW5nIERlZXBlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gZ2l2ZW4gdGhlIGluc3RydWN0aW9uIHRvIGNvbnRpbnVlIGRvd24gdGhlIHBhZ2UgdG8gZmluZCBzb21ldGhpbmcgZWxzZS4gSXQgaW1wbGllcyB0aGVyZSBpcyBtb3JlIHRvIGNvbWUuIE15IGludGVybmFsIHByb2Nlc3MgaXMsIFwiT2theSwgbGV0J3MgcHJvY2VlZCB0byBhbmFseXplIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uXCJcblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTozNC44MTU5MDI1MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzA6XFx0XFx0XFx0XFx0ICAgIGJvdW5kX2Rldl9pZiAhPSB2YWwgXFx1MDAyNlxcdTAwMjZcXG4gNTMxOlxcdFxcdFxcdFxcdCAgICAoIW1pZHggfHwgbWlkeCAhPSBib3VuZF9kZXZfaWYpKVxcbiA1MzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzMzpcXHRcXHRcXHR9XFxuIDUzNDpcXHRcXHRcXHRXUklURV9PTkNFKG5wLVxcdTAwM2VtY2FzdF9vaWYsIHZhbCk7XFxuIDUzNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTM2OlxcdFxcdGNhc2UgSVBWNl9VTklDQVNUX0lGOlxcbiA1Mzc6XFx0XFx0e1xcbiA1Mzg6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gNTM5OlxcdFxcdFxcdGludCBpZmluZGV4O1xcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRcXHRpZiAob3B0bGVuICE9IHNpemVvZihpbnQpKVxcbiA1NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdFxcdGlmaW5kZXggPSAoX19mb3JjZSBpbnQpbnRvaGwoKF9fZm9yY2UgX19iZTMyKXZhbCk7XFxuIDU0NTpcXHRcXHRcXHRpZiAoIWlmaW5kZXgpIHtcXG4gNTQ2OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UobnAtXFx1MDAzZXVjYXN0X29pZiwgMCk7XFxuIDU0NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTQ4OlxcdFxcdFxcdH1cXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpO1xcbiA1NTE6XFx0XFx0XFx0aWYgKCFkZXYpXFxuIDU1MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIDU1MzpcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdFxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXFxuIDU1NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcXG4gNTU5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1NjA6XFx0XFx0fVxcbiA1NjE6XFx0XFx0fVxcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA1NjY6XFx0XFx0Y2FzZSBJUFY2X1Y2T05MWTpcXG4gNTY3OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSB8fFxcbiA1Njg6XFx0XFx0XFx0ICAgIGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bSlcXG4gNTY5OlxcdFxcdFxcdFxcdGdvdG8gZV9pbnZhbDtcXG4gNTcwOlxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IHZhbGJvb2w7XFxuIDU3MTpcXHRcXHRcXHRyZXR2ID0gMDtcXG4gNTcyOlxcdFxcdFxcdGJyZWFrO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRjYXNlIElQVjZfUkVDVlBLVElORk86XFxuIDU3NTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDU3NjpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDU3NzpcXHRcXHRcXHRucC1cXHUwMDNlcnhvcHQuYml0cy5yeGluZm8gPSB2YWxib29sO1xcbiA1Nzg6XFx0XFx0XFx0cmV0diA9IDA7XFxuIDU3OTpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MzQuODE2MDA3MDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3OTAwMTIxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGlzIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCBpbW1lZGlhdGVseSBJJ20gemVyb2luZyBpbiBvbiBsaW5lIDU2MyDigJMgdGhhdCdzIHdoZXJlIGBzb2Nrb3B0X2xvY2tfc29jayhzaylgIGlzIGNhbGxlZC4gQmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQsIGBJUFY2X1RSQU5TUEFSRU5UYCBhbmQgYElQVjZfRlJFRUJJTkRgIHdlcmUgaGFuZGxlZCAqYWZ0ZXIqIHRoYXQgbG9ja2luZyBjYWxsLiBOb3csIHRoZSBsb2dpYyBmb3Igc2V0dGluZyB0aG9zZSBvcHRpb25zIGlzICpiZWZvcmUqIHRoZSBsb2NrISBTcGVjaWZpY2FsbHksIEkgc2VlIGBpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKWAgYW5kIGBpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKWAgaGFwcGVuaW5nIG91dHNpZGUgdGhlIHByb3RlY3Rpb24gb2YgYHNvY2tvcHRfbG9ja19zb2NrKHNrKWAuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLi4uXG5cbldhaXQsIGlzIHRoYXQgZXZlbiByZWFjaGFibGU/IENhbiBzb21lb25lIGFjdHVhbGx5IHRyaWdnZXIgdGhhdCBjb2RlIHBhdGggd2l0aG91dCB0aGUgbG9jaz8gQWJzb2x1dGVseSEgQW55b25lIGNhbiBjYWxsIGBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GUkVFQklORCwgLi4uKWAgb3IgYHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X1RSQU5TUEFSRU5ULCAuLi4pYCBvbiBhbiBJUHY2IHNvY2tldCwgcmVnYXJkbGVzcyBvZiBpdHMgdHlwZSAoU1RSRUFNLCBER1JBTSwgUkFXKS4gVGhhdCdzIGEgZGVmaW5pdGUgdmVjdG9yIHRvIGNvbnNpZGVyLlxuXG5TbywgdGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSBhbHRlcmluZyBsb2NraW5nIGJlaGF2aW9yIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suIFJlbW92aW5nIHRoYXQgc3luY2hyb25pemF0aW9uIHBvdGVudGlhbGx5IG9wZW5zIHRoZSBkb29yIHRvIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSSdtIHRoaW5raW5nIGRhdGEgcmFjZXMsIHJhY2UgY29uZGl0aW9ucyB3aXRoIGBjb25uZWN0YCwgYGJpbmRgLCBgbGlzdGVuYCwgb3Igb3RoZXIgc29ja2V0IHN0YXRlIGNoYW5nZXMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBkaXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4uLiBsZXQncyBzZWUgd2hhdCB0aGUgZ2l0IGxvZyB0ZWxscyB1cyBhYm91dCB0aGlzIGNvbW1pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjAyLjcxNjEzMjQyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MzA2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9hc3NpZ25fYml0LipGUkVFQklORFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTkwLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbCk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNC1cXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1OlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMS1cXHRcXHRjYXNlIElQVjZfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzI6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMy1cXHRcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy03MTktXFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE2MDAtXFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNjAxOlxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cXHRpbmV0X2Fzc2lnbl9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNzaywgaW5ldF90ZXN0X2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc2spKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDIuNzg3NzY3ODA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3NDI5NTc3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIElQX0ZSRUVCSU5EIGFuZCBJUF9UUkFOU1BBUkVOVCBpbiBpcF9zb2NrZ2x1ZS5jKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2suIEl0IHNlZW1zIElQX0ZSRUVCSU5EIGFuZCBJUF9UUkFOU1BBUkVOVCB3ZXJlIHNoaWZ0ZWQgZWFybGllciBpbiB0aGUgY29kZSwgbGlrZWx5IGluIGEgcHJpb3IgcmV2aXNpb24uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyB6ZXJvIGluIG9uIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBuZWFyIGxpbmUgOTkwLiBJJ2xsIHRha2UgYSBsb29rIGF0IHdoYXQgd2FzIGNoYW5nZWQgYXJvdW5kIHRoYXQgYXJlYS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYWRqdXN0bWVudCBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDQuNTMwNzI3ODkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHRcXHRcXHRpZiAoIXZhbClcXG4gOTgxOlxcdFxcdFxcdFxcdHNrYl9lcnJxdWV1ZV9wdXJnZShcXHUwMDI2c2stXFx1MDAzZXNrX2Vycm9yX3F1ZXVlKTtcXG4gOTgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODM6XFx0XFx0Y2FzZSBJUF9SRUNWRVJSX1JGQzQ4ODQ6XFxuIDk4NDpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMCB8fCB2YWwgXFx1MDAzZSAxKVxcbiA5ODU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk4NjpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoUkVDVkVSUl9SRkM0ODg0LCBzaywgdmFsKTtcXG4gOTg3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODg6XFx0XFx0Y2FzZSBJUF9GUkVFQklORDpcXG4gOTg5OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAxKVxcbiA5OTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk5MTpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWwpO1xcbiA5OTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk5MzpcXHRcXHRjYXNlIElQX0hEUklOQ0w6XFxuIDk5NDpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcpXFxuIDk5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiA5OTY6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEhEUklOQ0wsIHNrLCB2YWwpO1xcbiA5OTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk5ODpcXHRcXHRjYXNlIElQX01VTFRJQ0FTVF9MT09QOlxcbiA5OTk6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIDEpXFxuMTAwMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDAxOlxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChNQ19MT09QLCBzaywgdmFsKTtcXG4xMDAyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMDM6XFx0XFx0Y2FzZSBJUF9NVUxUSUNBU1RfQUxMOlxcbjEwMDQ6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIDEpXFxuMTAwNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDA2OlxcdFxcdFxcdGlmICh2YWwgIT0gMCBcXHUwMDI2XFx1MDAyNiB2YWwgIT0gMSlcXG4xMDA3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMDg6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KE1DX0FMTCwgc2ssIHZhbCk7XFxuMTAwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMDEwOlxcdFxcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XFxuMTAxMTpcXHRcXHRcXHRpZiAoISF2YWwgXFx1MDAyNlxcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShzb2NrX25ldChzayktXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcXHUwMDI2XFx1MDAyNlxcbjEwMTI6XFx0XFx0XFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4xMDEzOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTAxNDpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2MgMSlcXG4xMDE1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMTY6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsKTtcXG4xMDE3OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMTg6XFx0XFx0Y2FzZSBJUF9OT0RFRlJBRzpcXG4xMDE5OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDQuNTMwODcyNTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0OTQ5MTM4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogRnV6emluZyBQb3RlbnRpYWwgLSBJUHY2IFNvY2tldCBPcHRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIElQdjYgaXMgY2F0Y2hpbmcgdXAgd2l0aCBJUHY0IG9uIHRoaXMgc29ja2V0IG9wdGlvbiBiZWhhdmlvciDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYWJpbGl0eSB0byBzZXQgYElQX0ZSRUVCSU5EYCBhbmQgYElQX1RSQU5TUEFSRU5UYCB3aXRob3V0IGFjcXVpcmluZyBhIHNvY2tldCBsb2NrLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6P1xuXG5MZXQncyBicmVhayB0aGlzIGRvd24uIFBlciBvdXIgY3JpdGVyaWEsIHdlJ3JlIGxvb2tpbmcgZm9yIG1vZGlmaWNhdGlvbnMgdG8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdCBhcmU6IGNvcmUgc3Vic3lzdGVtcywgcmVmYWN0b3JpbmcgdGhhdCBpbXBhY3RzIGRhdGEgc3RydWN0dXJlcywgb3IgcmVhY2hhYmxlIGRyaXZlcnMvcHJvdG9jb2xzLlxuXG5JbiB0aGlzIGNhc2UsIGl04oCZcyBhIGRpcmVjdCB0b3VjaCB0byBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gV2UncmUgZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb24gaGFuZGxpbmcgdmlhIGBzZXRzb2Nrb3B0YCwgaW4gdGhpcyBjYXNlIGNvbmNlcm5pbmcgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIFRoZSBtb2RpZmljYXRpb24gaXMga2V5OiB3ZSdyZSBjaGFuZ2luZyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvci4gU2V0dGluZyB0aGUgb3B0aW9ucyBpcyBub3cgaGFwcGVuaW5nIGxvY2tsZXNzbHksIG5vIG5lZWQgZm9yIGBzb2Nrb3B0X2xvY2tfc29jayhzaylgLiBUaGF04oCZcyBhICpkZWZpbml0ZSogcmVkIGZsYWcg4oCTIGFueXRpbWUgeW91IHN0YXJ0IG1lc3Npbmcgd2l0aCBsb2NraW5nLCB5b3UgaW50cm9kdWNlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHZ1bG5lcmFiaWxpdGllcy5cblxuQW5kIHRoZSByZWFjaGFiaWxpdHkgaXMgc29saWQuIFRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNldHNvY2tvcHQoKWAuIEdpdmVuIHRoZSBwcmV2YWxlbmNlIG9mIG5ldHdvcmsgc29ja2V0cyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggcHVyc3VpbmcuIEl0IHRpY2tzIGFsbCB0aGUgYm94ZXMg4oCTIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIG1vZGlmaWNhdGlvbiB0byBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpbXBhY3RzIGxvY2tpbmcuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBvdXIgYEZvY3VzU3ltYm9sc2AuIFdoYXQgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBjbG9zZWx5IHJlbGF0ZWQ/IEluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLCBpdCdzIGNsZWFyOiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBpcyBkaXJlY3RseSBpbXBhY3RlZC4gVGhhdCdzIGEgcHJpbWUgdGFyZ2V0LiBOZXh0IHN0ZXA6IGxldCdzIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYGRvX2lwdjZfc2V0c29ja29wdGAgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgb3B0aW9uIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowOS4wMjU3ODg1MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDI5MDg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz01NzUwPXN0YXRpYyBpbnQgc29sX2lwdjZfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc3Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzo1NzczOlxcdHJldHVybiBkb19pcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NzQtXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihvcHR2YWwpLCAqb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQxNzE9aW50IHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQxNzYtXFx0aWYgKGxldmVsICE9IFNPTF9UQ1ApXFxubmV0L2lwdjQvdGNwLmM6NDE3NzpcXHRcXHQvKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgYW5kIHRjcF92Nl9jb25uZWN0KCkgKi9cXG5uZXQvaXB2NC90Y3AuYy00MTc4LVxcdFxcdHJldHVybiBSRUFEX09OQ0UoaWNzay1cXHUwMDNlaWNza19hZl9vcHMpLVxcdTAwM2VzZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ4NjY9aW50IHRjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4NzEtXFx0aWYgKGxldmVsICE9IFNPTF9UQ1ApXFxubmV0L2lwdjQvdGNwLmM6NDg3MjpcXHRcXHQvKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgYW5kIHRjcF92Nl9jb25uZWN0KCkgKi9cXG5uZXQvaXB2NC90Y3AuYy00ODczLVxcdFxcdHJldHVybiBSRUFEX09OQ0UoaWNzay1cXHUwMDNlaWNza19hZl9vcHMpLVxcdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zMDI9c3RhdGljIGludCBpcHY2X3NldF9vcHRfaGRyKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMzc1LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzozNzY6aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM3Ny1cXHRcXHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz04Njk9aW50IGlwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc5LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4ODA6XFx0ZXJyID0gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04ODEtI2lmZGVmIENPTkZJR19ORVRGSUxURVJcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9NDAzPXN0YXRpYyBpbnQgdGNwX3Y2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNDUyLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpcDZfbWluX2hvcGNvdW50KSkge1xcbm5ldC9pcHY2L3RjcF9pcHY2LmM6NDUzOlxcdFxcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNDU0LVxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYyBSRUFEX09OQ0UodGNwX2luZXQ2X3NrKHNrKS1cXHUwMDNlbWluX2hvcGNvdW50KSkge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xNzMwPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE4NjEtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlwNl9taW5faG9wY291bnQpKSB7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxODYyOlxcdFxcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTg2My1cXHRcXHRpZiAodW5saWtlbHkoaGRyLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYyBSRUFEX09OQ0UodGNwX2luZXQ2X3NrKHNrKS1cXHUwMDNlbWluX2hvcGNvdW50KSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDkuMTUwMDg2NDk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0Njk3ODM5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBJUHY2IFNvY2tldCBPcHRpb25zIGluIGBpcHY2X3NvY2tnbHVlLmNgKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gSVB2NiBzb2NrZXQgYmVoYXZpb3IuIFdlJ3ZlIGxpa2VseSBhbHJlYWR5IGFkZHJlc3NlZCBzb21lIGFyZWFzLCBidXQgbm93IGl0J3MgY3JpdGljYWwgdG8gZGlnIGludG8gYGlwdjZfc29ja2dsdWUuY2AgdG8gc2VlIGhvdyBgaXB2Nl9zZXRzb2Nrb3B0YCBpcyBpbXBsZW1lbnRlZC4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZ2x1ZSBjb2RlIHRoYXQgY29ubmVjdHMgdGhlIGdlbmVyaWMgc29ja2V0IG9wdGlvbnMgZnJhbWV3b3JrIHRvIHRoZSBudWFuY2VzIG9mIElQdjYuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiB3aXRoaW4gdGhpcyBtb2R1bGUsIGdpdmVuIHRoZSBtdWx0aXRocmVhZGVkIG5hdHVyZSBvZiBuZXR3b3JrIG9wZXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgYXJlYXMgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UsIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGNvcHlpbmcsIG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIElQdjYgc3RhY2sgYW5kIHRoZSBzb2NrZXQgbGF5ZXIuIEFueSBwb3RlbnRpYWwgaW1wYWN0IG9uIGVycm9yIGhhbmRsaW5nIGlzIGFsc28gYSBtYWpvciBjb25jZXJuLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB2YXJpb3VzIHNvY2tldCBvcHRpb24gY2hhbmdlcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBoYXZlIGJlZW4gYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTEuNjE5ODcyNzk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjU6XFx0XFx0cmV0diA9IC1FSU5WQUw7XFxuIDg2NjpcXHRcXHRnb3RvIHVubG9jaztcXG4gODY3OlxcdH1cXG4gODY4OlxcdFxcbiA4Njk6XFx0aW50IGlwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIDg3MDpcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gODcxOlxcdHtcXG4gODcyOlxcdFxcdGludCBlcnI7XFxuIDg3MzpcXHRcXG4gODc0OlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfSVAgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcpXFxuIDg3NTpcXHRcXHRcXHRyZXR1cm4gaXBfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0aWYgKGxldmVsICE9IFNPTF9JUFY2KVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gODc5OlxcdFxcbiA4ODA6XFx0XFx0ZXJyID0gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA4ODE6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJcXG4gODgyOlxcdFxcdC8qIHdlIG5lZWQgdG8gZXhjbHVkZSBhbGwgcG9zc2libGUgRU5PUFJPVE9PUFRzIGV4Y2VwdCBkZWZhdWx0IGNhc2UgKi9cXG4gODgzOlxcdFxcdGlmIChlcnIgPT0gLUVOT1BST1RPT1BUIFxcdTAwMjZcXHUwMDI2IG9wdG5hbWUgIT0gSVBWNl9JUFNFQ19QT0xJQ1kgXFx1MDAyNlxcdTAwMjZcXG4gODg0OlxcdFxcdFxcdFxcdG9wdG5hbWUgIT0gSVBWNl9YRlJNX1BPTElDWSlcXG4gODg1OlxcdFxcdFxcdGVyciA9IG5mX3NldHNvY2tvcHQoc2ssIFBGX0lORVQ2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDg4NjpcXHQjZW5kaWZcXG4gODg3OlxcdFxcdHJldHVybiBlcnI7XFxuIDg4ODpcXHR9XFxuIDg4OTpcXHRFWFBPUlRfU1lNQk9MKGlwdjZfc2V0c29ja29wdCk7XFxuIDg5MDpcXHRcXG4gODkxOlxcdHN0YXRpYyBpbnQgaXB2Nl9nZXRzb2Nrb3B0X3N0aWNreShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxcbiA4OTI6XFx0XFx0XFx0XFx0XFx0ICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IGxlbilcXG4gODkzOlxcdHtcXG4gODk0OlxcdFxcdHN0cnVjdCBpcHY2X29wdF9oZHIgKmhkcjtcXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0aWYgKCFvcHQpXFxuIDg5NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDkwMDpcXHRcXHRjYXNlIElQVjZfSE9QT1BUUzpcXG4gOTAxOlxcdFxcdFxcdGhkciA9IG9wdC1cXHUwMDNlaG9wb3B0O1xcbiA5MDI6XFx0XFx0XFx0YnJlYWs7XFxuIDkwMzpcXHRcXHRjYXNlIElQVjZfUlRIRFJEU1RPUFRTOlxcbiA5MDQ6XFx0XFx0XFx0aGRyID0gb3B0LVxcdTAwM2Vkc3Qwb3B0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoxMS42MTk5Njc5MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyMzM4MDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJUHY2IFNvY2tldCBGaWx0ZXJpbmcgSW5xdWlyeSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaylgIGFuZCBgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spYCBmdW5jdGlvbnMgYXJlIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlaXIgdXNhZ2UsIHRvIG1hcCB0aGVpciBpbmZsdWVuY2Ugd2l0aGluIHRoZSBjb2RlLiBTbywgdGhlIG1vc3QgZWZmaWNpZW50IHJvdXRlIGlzIGEgY29kZSBzZWFyY2g6IEknbGwgdXNlIGBncmVwYCB0byBodW50IGRvd24gYWxsIGluc3RhbmNlcyBvZiBgaW5ldF90ZXN0X2JpdGAgdGhhdCBpbnZvbHZlIGVpdGhlciBgRlJFRUJJTkRgIG9yIGBUUkFOU1BBUkVOVGAgYXMgdGhlIGJpdCBhcmd1bWVudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBvciBjb2RlIGJsb2Nrcy4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgZmxhZ3MgaW4gSVB2Ni5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjE0Ljk0MzM1MTY1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzMTc3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF90ZXN0X2JpdFxcXFwoKEZSRUVCSU5EfFRSQU5TUEFSRU5UKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jPTk3PWludCBpbmV0X2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYxLVxcdGluZXRfc29ja29wdC5pc19pY3NrXFx0PSBpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxNjI6XFx0aW5ldF9zb2Nrb3B0LmZyZWViaW5kXFx0PSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYzLVxcdGluZXRfc29ja29wdC5oZHJpbmNsXFx0PSBpbmV0X3Rlc3RfYml0KEhEUklOQ0wsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xNjQtXFx0aW5ldF9zb2Nrb3B0Lm1jX2xvb3BcXHQ9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjE2NTpcXHRpbmV0X3NvY2tvcHQudHJhbnNwYXJlbnQgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTY2LVxcdGluZXRfc29ja29wdC5tY19hbGxcXHQ9IGluZXRfdGVzdF9iaXQoTUNfQUxMLCBzayk7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYz0xNjg9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqaW5ldF90d3NrX2FsbG9jKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTE5OC1cXHRcXHR0dy1cXHUwMDNldHdfaXB2Nm9ubHlcXHQgICAgPSAwO1xcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jOjE5OTpcXHRcXHR0dy1cXHUwMDNldHdfdHJhbnNwYXJlbnQgID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwMC1cXHRcXHR0dy1cXHUwMDNldHdfY29ubmVjdF9iaW5kID0gISEoc2stXFx1MDAzZXNrX3VzZXJsb2NrcyBcXHUwMDI2IFNPQ0tfQ09OTkVDVF9CSU5EKTtcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUwNz1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjEtXFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjI6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTU2My1cXHRcXHRnb3RvIGNvcHl2YWw7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NzMtXFx0Y2FzZSBJUF9UUkFOU1BBUkVOVDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NzQ6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTU3NS1cXHRcXHRnb3RvIGNvcHl2YWw7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4Ny1cXHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXFx1MDAyNnRtcF9vcHQsIHNrYiwgc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc2ODg6XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlbm9fc3JjY2hlY2sgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4OS1cXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTM9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5Ny1cXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExOTg6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMTk5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDEtXFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAyOlxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMy1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Mzk3PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI4LVxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0Mjk6XFx0XFx0XFx0XFx0XFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc3NrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy00MzAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMi1cXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMzOlxcdFxcdFxcdFxcdFxcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDM0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz02OTk9c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3NvbF9pcF9zZXQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcxOS1cXHRjYXNlIElQX0ZSRUVCSU5EOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NzIwOlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzIxLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy03MjMtXFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssXFxubmV0L21wdGNwL3NvY2tvcHQuYzo3MjQ6XFx0XFx0XFx0XFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyNS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTQ1Nz1zdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjYtXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDY3OlxcdFxcdFxcdFxcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY4LVxcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY5LVxcdFxcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ3MDpcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ3MS1cXHRjYXNlIElQX0JJTkRfQUREUkVTU19OT19QT1JUOlxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDgyPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5Mi1cXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTM6XFx0XFx0XFx0XFx0XFx0ICAgIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk0LVxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0OTUtXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDk2OlxcdFxcdFxcdFxcdFxcdCAgICBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5Ny1cXHR9XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTE1NTA9c3RhdGljIHZvaWQgc3luY19zb2NrZXRfb3B0aW9ucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNTk5LVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTYwMDpcXHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNzaywgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE2MDE6XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzc2ssIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNjAyLVxcdGluZXRfYXNzaWduX2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc3NrLCBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzaykpO1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0zNTI9c3RhdGljIGludCBzY3RwX3Y0X2F2YWlsYWJsZSh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzY3RwX3NvY2sgKnNwKVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy0zNjItXFx0ICAgcmV0ICE9IFJUTl9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MzYzOlxcdCAgICFpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2NC1cXHQgICAgIVJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoxNS4wMjc2NzQ5OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ1OTUzMzI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUgb2YgRlJFRUJJTkQgYW5kIFRSQU5TUEFSRU5UIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGBGUkVFQklORGAgYW5kIGBUUkFOU1BBUkVOVGAgc29ja2V0IG9wdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoZXJlIHRoZXkncmUgYWN0dWFsbHkgZGVwbG95ZWQgaW4gdGhlIGtlcm5lbCwgeW91IGtub3csIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW1wbGljYXRpb25zIGZ1bGx5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJwbGF5IHdpdGggb3RoZXIgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucywgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLCBJIGhhdmVuJ3QgZnVsbHkgY29uc2lkZXJlZCB5ZXQuXG5cblNvLCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHRyYWNpbmcgdGhlaXIgdXNhZ2UgYmV5b25kIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIGNhbGxzLCBtYXliZSBpbiBmdW5jdGlvbnMgbGlrZSBgaW5ldF9iaW5kYCBvciByZWxhdGVkIGJpbmQgZnVuY3Rpb25zLCB0byBzZWUgaWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgaW4gZGlmZmVyZW50IGNvbnRleHRzLiBBIHdpZGVyIHZpZXcgb2YgdGhlIGNvZGUgY291bGQgcXVpY2tseSBvZmZlciB1cCB0aG9zZSBlZGdlLWNhc2VzLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1vcmUgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIHRoZWlyIGJlaGF2aW9yIGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRoYXQgbGFyZ2VyIGNvbnRleHQgdG8gcmVhbGx5IGdyYXNwIHRoZSBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGVtIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGF0IGJpZ2dlciBwaWN0dXJlIGlzIHJlYWxseSB3aGF0IEkgbmVlZCB0byBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTcuNDg3MjEwODI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU3MTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nhbl9ub25sb2NhbF9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcGluZy5jPTMwMj1zdGF0aWMgaW50IHBpbmdfY2hlY2tfYmluZF9hZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfc29jayAqaXNrLFxcbi0tXFxubmV0L2lwdjQvcGluZy5jLTMzMC1cXHRcXHQgICAgKGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC9waW5nLmM6MzMxOlxcdFxcdCAgICAgIWluZXRfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpc2spKSlcXG5uZXQvaXB2NC9waW5nLmMtMzMyLVxcdFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTcuNTU1Nzg4NDQ3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MDM4NTQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEJpbmRpbmcgQmVoYXZpb3IqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG5vbi1sb2NhbCBiaW5kaW5nIHdvcmtzLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byBjbGFyaWZ5aW5nIHRoZSBiZWhhdmlvci4gSWYgdGhhdCBkb2Vzbid0IHlpZWxkIHRoZSBzcGVjaWZpYyBpbnNpZ2h0cyBJIG5lZWQsIEknbGwgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgYXQgdGhlIG1vcmUgZ2VuZXJhbCBgaW5ldDZfYmluZGAgZnVuY3Rpb24sIG9yIHRoZSBgYWZfaW5ldDYuY2Agc291cmNlIGZpbGUgaXRzZWxmLiBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIG9mdGVuIHNoZWRzIGxpZ2h0IG9uIElQdjQgYXNwZWN0cyB0b28sIGdpdmVuIHRoZWlyIGludGVydHdpbmVkIG5hdHVyZS4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgY29uZGl0aW9ucywgY2hlY2tzLCBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIHN1cnJvdW5kaW5nIGhvdyB3ZSBhbGxvdyBvciBwcmV2ZW50IGEgc29ja2V0IGZyb20gYmluZGluZyB0byBhbiBhZGRyZXNzIHRoYXQgaXNuJ3QgZXhwbGljaXRseSBhc3NpZ25lZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjE5LjQ1OTY0NjY3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MzAwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlJFRUJJTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAwLVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDE6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDItXFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDMtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwNDpcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1OlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9OTkzPWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDAtXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEyMDE6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAyOlxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTkuNTA1MTgzMDIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxOTIxMjYxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgYW5kIFRyYW5zcGFyZW5jeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYFRSQU5TUEFSRU5UYCwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LiBNeSBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHdpdGhpbiB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkuIEknbSBpbWFnaW5pbmcgdGhlcmUncyBzb21lIGtpbmQgb2Ygc29ja2V0IG9wdGlvbiBvciBhIGZsYWcgZGVmaW5lZCBzb21ld2hlcmUgdGhhdCdzIHRpZWQgdG8gdGhpcyBjb25jZXB0IG9mIHRyYW5zcGFyZW5jeS4gSSdtIHBpY3R1cmluZyB0aGUgaW5jbHVkZSBmaWxlcywgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnPigKYgd2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBEb2VzIGl0IHJlbGF0ZSB0byBhZGRyZXNzIGhhbmRsaW5nIG9yIHJvdXRpbmcgaW4gYW55IHNwZWNpZmljIHdheSB3aXRoaW4gdGhlIElQdjYgc3RhY2s/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0cmFuc3BhcmVuY3kgaXMgKmltcGxlbWVudGVkKiBpbiBJUHY2IHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIEVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGUgSVB2NiBwcm90b2NvbCBoYW5kbGVzIGNvbm5lY3Rpb25zLCByb3V0aW5nLCBhbmQgZmlsdGVyaW5nIHdoZW4gdGhpcyBcIlRSQU5TUEFSRU5UXCIgc2V0dGluZyBpcyBlbmdhZ2VkLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBhc3BlY3RzIG9mIGEgY29ubmVjdGlvbiBhcmUgZXhwb3NlZCwgb3IgaGlkZGVuLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyNi42OTczMTIwOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjkzMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRSQU5TUEFSRU5UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNi1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA3OlxcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDA4LVxcdFxcdGlmICh2YWxib29sIFxcdTAwMjZcXHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MTItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQxMzpcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi9cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDE0OlxcdFxcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MTUtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9OTkzPWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExOTYtXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExOTc6XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTk4OlxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MjYuNzQ0NjEwNzgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3NzcxODk3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBhIEZ1bmN0aW9uIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20ga25lZS1kZWVwIGluIHRoaXMgbmV0d29ya2luZyBjb2RlLCBhbmQgSSd2ZSBoaXQgYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYCBpcyBkb2luZy4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLCBidXQgSSBjYW4ndCBpbW1lZGlhdGVseSByZWNhbGwgaXRzIGRlZmluaXRpb24gb3IgdGhlIHNwZWNpZmljcyBvZiBpdHMgaW1wbGVtZW50YXRpb24uIFRoaXMgc3VnZ2VzdHMgSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBkZWZpbmVkLiBJcyBpdCBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgZmlsZT8gSXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXIgSSdtIG1pc3Npbmc/IE9yIG1heWJlIGl0J3MgY29taW5nIGZyb20gYSBtb3JlIGdlbmVyYWwgbmV0d29ya2luZyBsaWJyYXJ5IHRoYXQgSSBoYXZlIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaD8gVGhlIG5hbWUgaGludHMgYXQgcGVybWlzc2lvbnMgYW5kIGJpbmRpbmcgc29ja2V0cywgYnV0IEkgcmVhbGx5IG5lZWQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgdG8gc2VlIGlmIG15IHVuZGVyc3RhbmRpbmcgaXMgY29ycmVjdCBhbmQgd2hhdCB0aGUgc3BlY2lmaWMgZGV0YWlscyBhcmUuIFRpbWUgdG8gc3RhcnQgdGhlIGh1bnQhIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBhbiBJREUgc2VhcmNoLCBidXQgSSBtaWdodCBuZWVkIHRvIGxldmVyYWdlIHRoZSBjcm9zcy1yZWZlcmVuY2UgY2FwYWJpbGl0aWVzIG9mIG15IGVkaXRvciBpZiBpdCdzIG1vcmUgZGVlcGx5IG5lc3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozMi41MjE4MDMyNjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTI0NjE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nhbl9ub25sb2NhbF9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfc29jay5oPTQyNz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9nZXRfY29udmVydF9jc3VtKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQzMi1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0MzM6c3RhdGljIGlubGluZSBib29sIGluZXRfY2FuX25vbmxvY2FsX2JpbmQoc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQzNC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaD00NDE9c3RhdGljIGlubGluZSBib29sIGluZXRfYWRkcl92YWxpZF9vcl9ub25sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDUte1xcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oOjQ0NjpcXHRyZXR1cm4gaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIHx8XFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQ3LVxcdFxcdGFkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MzIuNjYxMDU1MTA2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNDM2NzM5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IEJpbmRpbmcgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbmV0d29yayBzb2NrZXQgYmluZGluZywgc3BlY2lmaWNhbGx5IG5vbi1sb2NhbCBiaW5kcy4gSSBzZWUgdGhpcyBmdW5jdGlvbiBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgYmVpbmcgZmxhZ2dlZCBhcyByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZTogaXQncyBjbGVhcmx5IGNvbm5lY3RlZCB0byBgRlJFRUJJTkRgIGFuZCBgVFJBTlNQQVJFTlRgIHNvY2tldCBvcHRpb25zLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgaXQgd29ya3MuIExldCBtZSBqdXN0IGdsYW5jZSBhdCBgaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmhgLCBsaW5lcyA0MzAtNDQwLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBsb2dpYy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCwgYmVjYXVzZSB0aG9zZSBmbGFncyBoYXZlIGEgbG90IG9mIGJlYXJpbmcgb24gaG93IHRoZSBrZXJuZWwgdHJlYXRzIG91dGdvaW5nIHBhY2tldHMgYW5kIHNvdXJjZSBhZGRyZXNzZXMsIGRlcGVuZGluZyBvbiB0aGUgc29ja2V0IGFuZCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjM1LjAwNDczMTY2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0X3NvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0fVxcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXG4gNDMzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kKHN0cnVjdCBuZXQgKm5ldCxcXG4gNDM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGluZXRfc29jayAqaW5ldClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdHJldHVybiBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSB8fFxcbiA0Mzc6XFx0XFx0XFx0dGVzdF9iaXQoSU5FVF9GTEFHU19GUkVFQklORCwgXFx1MDAyNmluZXQtXFx1MDAzZWluZXRfZmxhZ3MpIHx8XFxuIDQzODpcXHRcXHRcXHR0ZXN0X2JpdChJTkVUX0ZMQUdTX1RSQU5TUEFSRU5ULCBcXHUwMDI2aW5ldC1cXHUwMDNlaW5ldF9mbGFncyk7XFxuIDQzOTpcXHR9XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbiA0NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQsXFxuIDQ0MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTMyIGFkZHIsXFxuIDQ0NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGFkZHJfdHlwZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MzUuMDA0ODA0OTI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODgwMjAwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW50ZXJuYWwgSW52ZXN0aWdhdGlvbiBvZiBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgaW4gSVB2NioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYC4gVGhlIGZpcnN0IHRoaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBpcyBjaGVjayBmb3IgYElORVRfRkxBR1NfRlJFRUJJTkRgIGFuZCBgSU5FVF9GTEFHU19UUkFOU1BBUkVOVGAuIE1ha2VzIHNlbnNlLCB0aG9zZSBmbGFncyBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBhbGxvd2luZyBiaW5kaW5nIHRvIG5vbi1sb2NhbCBhZGRyZXNzZXMuIEJ1dCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIHVzZWQgd2l0aGluIHRoZSBJUHY2IHN0YWNrPyBJIG5lZWQgdG8gdHJhY2UgaXRzIHBhdGggdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYmV0dGVyLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBJUHY2IGhhbmRsZXMgdGhlc2Ugc2NlbmFyaW9zLiBMZXQncyBzZWUuLi4gYGluZXQ2X2JpbmRgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB3aGVyZSBpdCdzIGNhbGxlZCBpbiB0aGUgSVB2NiBjb250ZXh0LiBMZXQgbWUgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozNy4yOTI4MjgwOThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODI1MzcxMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfY2FuX25vbmxvY2FsX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozOC41NzUzNzM0ODFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1Mjg1MzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIHByb2JhYmx5IGNvbmNlcm5pbmcgSVB2Ni4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIElQdjYgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcywgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggY29tbW9uIGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3Igc3lzY3RsIHZhcmlhYmxlcyB0aGF0IGluZmx1ZW5jZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIElQIGFkZHJlc3NlcyBhbmQgYmluZGluZ3MuIFRvIGRvIHRoYXQsIEknbGwgdXNlIGBncmVwYC4gSSB3YW50IHRvIHNlYXJjaCBmb3IgdGhlIHRlcm1zIGBpbmV0X2ZsYWdzYCwgYmVjYXVzZSBpdCdzIGEgdXNlZnVsIG5hbWUgZm9yIGZsYWdzLCBhbmQgYHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kYCwgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdG8gaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3lzdGVtIGJpbmRpbmcgdG8gYWRkcmVzc2VzIHRoYXQgaXQgZG9lc24ndCBvd24uIEFuZCBzaW5jZSBJJ20gY29uY2VybmVkIGFib3V0IElQdjYgc3BlY2lmaWNhbGx5LCBJJ2xsIHRhcmdldCB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgdG8gZm9jdXMgbXkgc2VhcmNoIGFuZCBtaW5pbWl6ZSBpcnJlbGV2YW50IHJlc3VsdHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0MC44MjgyMzc5NjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjM3MjQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjdGxfaXBfbm9ubG9jYWxfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQwLjg5NjQ4NjcxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjIzNDIzODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGluZXQ2X2JpbmRgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpbmV0Nl9iaW5kYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBjb2RlIHdpdGhpbiBgbmV0L2lwdjYvYWZfaW5ldDYuY2AsIGxvb2tpbmcgYXQgdGhlIGBpbmV0Nl9iaW5kYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgYmluZGluZyBhbiBJUHY2IHNvY2tldCB0byBhIGxvY2FsIGFkZHJlc3MgcmVzaWRlcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGFkZHJlc3MgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQsIGhvdyB0aGUgc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJvdXRpbmcgc3Vic3lzdGVtIGZvciBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gaWYgdGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgb25lLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgYmluZGluZyBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGl0IGhhbmRsZXMgc2NvcGVkIGFkZHJlc3NlcyB2ZXJzdXMgZ2xvYmFsIG9uZXM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBgSVBWNl9WNk9OTFlgIG9wdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGR1YWwtc3RhY2sgc29ja2V0cy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBzb2xpZCBncmlwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ4MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQzLjExOTkxMzAyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMzI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlJFRUJJTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuYz05Nz1pbnQgaW5ldF9kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE2MS1cXHRpbmV0X3NvY2tvcHQuaXNfaWNza1xcdD0gaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzayk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTYyOlxcdGluZXRfc29ja29wdC5mcmVlYmluZFxcdD0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE2My1cXHRpbmV0X3NvY2tvcHQuaGRyaW5jbFxcdD0gaW5ldF90ZXN0X2JpdChIRFJJTkNMLCBzayk7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTYwOT12b2lkIGlwX3NvY2tfc2V0X2ZyZWViaW5kKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTYxMC17XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo2MTE6XFx0aW5ldF9zZXRfYml0KEZSRUVCSU5ELCBzayk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02MTItfVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05MTEtXFx0Y2FzZSBJUF9ST1VURVJfQUxFUlQ6XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5MTI6XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTkxMy1cXHRjYXNlIElQX1BBU1NTRUM6XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk4Ny1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjk4ODpcXHRjYXNlIElQX0ZSRUVCSU5EOlxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTg5LVxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAxKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTkwLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbCk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTYwLVxcdFxcdGdvdG8gY29weXZhbDtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjE6XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjI6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTU2My1cXHRcXHRnb3RvIGNvcHl2YWw7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwMC1cXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDAxOlxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAyLVxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAzLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDQ6XFx0XFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwNTpcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDA2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk5Mz1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMjAwLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAxOlxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTIwMjpcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDMtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQwNi1cXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MDc6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDA4LVxcdFxcdGxvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMC1cXHRcXHRcXHRicmVhaztcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQzMTpcXHRcXHRjYXNlIElQVjZfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzI6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQzMzpcXHRcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9NDQ0PXN0YXRpYyBib29sIG1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ0OC1cXHRcXHQvKiBzaG91bGQgd29yayBmaW5lICovXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0NDk6XFx0XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ1MC1cXHRcXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy01MTUtXFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NTE2OlxcdFxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTUxNy1cXHRcXHRjYXNlIElQVjZfUEtUSU5GTzpcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy03MTgtXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxubmV0L21wdGNwL3NvY2tvcHQuYzo3MTk6XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9NzczPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzc2LVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Nzc3OlxcdGNhc2UgSVBfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYy03NzgtXFx0Y2FzZSBJUF9UUkFOU1BBUkVOVDpcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTQ1Nz1zdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjQtXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sIFJFQURfT05DRShpbmV0X3NrKHNrKS1cXHUwMDNldG9zKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDY1OlxcdGNhc2UgSVBfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY2LVxcdFxcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ2NzpcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ2OC1cXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDgyPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5My1cXHRcXHRcXHRcXHRcXHQgICAgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTQ6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NS1cXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTY6XFx0XFx0XFx0XFx0XFx0ICAgIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk3LVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE2MDAtXFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNjAxOlxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cXHRpbmV0X2Fzc2lnbl9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNzaywgaW5ldF90ZXN0X2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc2spKTtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9MzUyPXN0YXRpYyBpbnQgc2N0cF92NF9hdmFpbGFibGUodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMzYyLVxcdCAgIHJldCAhPSBSVE5fTE9DQUwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjM2MzpcXHQgICAhaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0zNjQtXFx0ICAgICFSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NDMuMTg3MTUwOTQ2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3NTAxNTg2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgTm9uLUxvY2FsIEJpbmRpbmcgQ2FwYWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBpbmV0Nl9jYW5fbm9ubG9jYWxfYmluZGAgZnVuY3Rpb24gYWN0dWFsbHkgKmV4aXN0cyouIEknbSBmYWlybHkgY2VydGFpbiBJJ3ZlIGNvbWUgYWNyb3NzIGl0IGJlZm9yZSwgYnV0IGJldHRlciB0byBiZSBzdXJlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbi4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGgsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9uZXQvaXB2Ni5oYC4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGdpdmVuIHRoZSBuYW1lLiBJZiB0aGF0IGRvZXNuJ3QgeWllbGQgcmVzdWx0cywgb3IgaWYgSSB3YW50IHRvIGJlICpyZWFsbHkqIHRob3JvdWdoIGFuZCBjaGVjayBmb3IgYW55IHBvdGVudGlhbCB1c2VzIG9mIHRoZSB1bmRlcmx5aW5nIGNvbmNlcHQsIEkgY2FuIGFsd2F5cyBidXN0IG91dCBhIGBncmVwYCBmb3IgYGNhbl9ub25sb2NhbF9iaW5kYCBhY3Jvc3MgdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHdpbGwgbGV0IG1lIGNvbmZpcm0gdGhlIGZ1bmN0aW9uIGFuZCBpdHMgYmVoYXZpb3IgYW5kIHVzZSBjYXNlcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQ1LjkzNzMxMTY4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODYxOTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9jYW5fbm9ubG9jYWxfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NDYuMDYyMTgzMDMyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNzQxNDA4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBEaXZpbmc6IFRoZSBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgSHVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSd2ZSBnb3QgYSBodW5jaCDigJMgbGV0J3Mgc2VlIGlmIGl0IGhvbGRzIHVwLiBNeSBmaXJzdCBtb3ZlIGhlcmUgaXMgdG8gZ2V0IGEgYnJvYWQgdmlldywgYSByZWFsIGxheSBvZiB0aGUgbGFuZCwgc28gSSdtIGdvaW5nIHRvIHJ1biBhIGdsb2JhbCBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZSBsb29raW5nIGZvciBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAuIEkgd2FudCB0byBzZWUgKmV2ZXJ5KiBpbnN0YW5jZSwgZXZlcnkgdXNhZ2UsIGV2ZXJ5IGRlY2xhcmF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgcHJvdmlkZSB0aGUgY29udGV4dCBJIG5lZWQuIFRoaXMgaW5pdGlhbCBzY2FuIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbi4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgYml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0OC4yMzYzMjY5NDFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzA3NzgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9jYW5fbm9ubG9jYWxfYmluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0X3NvY2suaD00Mjc9c3RhdGljIGlubGluZSBib29sIGluZXRfZ2V0X2NvbnZlcnRfY3N1bShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzItXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6NDMzOnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0KVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQ1LXtcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0NDY6XFx0cmV0dXJuIGluZXRfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpbmV0KSB8fFxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0Ny1cXHRcXHRhZGRyID09IGh0b25sKElOQUREUl9BTlkpIHx8XFxuLS1cXG5uZXQvaXB2NC9waW5nLmM9MzAyPXN0YXRpYyBpbnQgcGluZ19jaGVja19iaW5kX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9zb2NrICppc2ssXFxuLS1cXG5uZXQvaXB2NC9waW5nLmMtMzMwLVxcdFxcdCAgICAoY2hrX2FkZHJfcmV0ICE9IFJUTl9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L3BpbmcuYzozMzE6XFx0XFx0ICAgICAhaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGlzaykpKVxcbm5ldC9pcHY0L3BpbmcuYy0zMzItXFx0XFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0OS45MDcxNDA1MzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcwODQ0MDMzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBJUHY2IEJpbmRpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBJUHY2IGJpbmRpbmcgaXNzdWUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmV0Nl9iaW5kYCwgc28gSSdtIG5hdmlnYXRpbmcgc3RyYWlnaHQgdG8gdGhhdCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L2FmX2luZXQ2LmNgLiBMZXQncyBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHNwZWNpZmljYWxseSwgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgc29ja2V0IGF0dGVtcHRzIHRvIGJpbmQgdG8gYW4gSVB2NiBhZGRyZXNzLiBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwncyBhZGRyZXNzIGZhbWlseSBhYnN0cmFjdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGR1YWwgbmF0dXJlIG9mIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLiBUaW1lIHRvIGRpc3NlY3QgdGhpcyBjb2RlIGFuZCBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowNi45OTE1NDYzMDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdGlmICghc2spXFxuIDQ2MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDY0OlxcdFxcbiA0NjU6XFx0XFx0LyogRnJlZSBtYyBsaXN0cyAqL1xcbiA0NjY6XFx0XFx0aXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0LyogRnJlZSBhYyBsaXN0cyAqL1xcbiA0Njk6XFx0XFx0aXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0cmV0dXJuIGluZXRfcmVsZWFzZShzb2NrKTtcXG4gNDcyOlxcdH1cXG4gNDczOlxcdEVYUE9SVF9TWU1CT0woaW5ldDZfcmVsZWFzZSk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdHZvaWQgaW5ldDZfY2xlYW51cF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4gNDc2OlxcdHtcXG4gNDc3OlxcdFxcdHN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTtcXG4gNDc4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ3OTpcXHRcXHRzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDtcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdHNrYiA9IHhjaGcoXFx1MDAyNm5wLVxcdTAwM2Vwa3RvcHRpb25zLCBOVUxMKTtcXG4gNDg0OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRza2IgPSB4Y2hnKFxcdTAwMjZucC1cXHUwMDNlcnhwbXR1LCBOVUxMKTtcXG4gNDg3OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHQvKiBGcmVlIGZsb3dsYWJlbHMgKi9cXG4gNDkwOlxcdFxcdGZsNl9mcmVlX3NvY2tsaXN0KHNrKTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0LyogRnJlZSB0eCBvcHRpb25zICovXFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdG9wdCA9IHVucmN1X3BvaW50ZXIoeGNoZyhcXHUwMDI2bnAtXFx1MDAzZW9wdCwgTlVMTCkpO1xcbiA0OTU6XFx0XFx0aWYgKG9wdCkge1xcbiA0OTY6XFx0XFx0XFx0YXRvbWljX3N1YihvcHQtXFx1MDAzZXRvdF9sZW4sIFxcdTAwMjZzay1cXHUwMDNlc2tfb21lbV9hbGxvYyk7XFxuIDQ5NzpcXHRcXHRcXHR0eG9wdF9wdXQob3B0KTtcXG4gNDk4OlxcdFxcdH1cXG4gNDk5OlxcdH1cXG4gNTAwOlxcdFxcbiA1MDE6XFx0LypcXG4gNTAyOlxcdCAqXFx0VGhpcyBkb2VzIGJvdGggcGVlcm5hbWUgYW5kIHNvY2tuYW1lLlxcbiA1MDM6XFx0ICovXFxuIDUwNDpcXHRpbnQgaW5ldDZfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbiA1MDU6XFx0XFx0XFx0ICBpbnQgcGVlcilcXG4gNTA2OlxcdHtcXG4gNTA3OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdWFkZHI7XFxuIDUwODpcXHRcXHRpbnQgc2luX2FkZHJfbGVuID0gc2l6ZW9mKCpzaW4pO1xcbiA1MDk6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDUxMDpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuIDUxMTpcXHRcXHRzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdHNpbi1cXHUwMDNlc2luNl9mYW1pbHkgPSBBRl9JTkVUNjtcXG4gNTE0OlxcdFxcdHNpbi1cXHUwMDNlc2luNl9mbG93aW5mbyA9IDA7XFxuIDUxNTpcXHRcXHRzaW4tXFx1MDAzZXNpbjZfc2NvcGVfaWQgPSAwO1xcbiA1MTY6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gNTE3OlxcdFxcdGlmIChwZWVyKSB7XFxuIDUxODpcXHRcXHRcXHRpZiAoIWluZXQtXFx1MDAzZWluZXRfZHBvcnQgfHxcXG4gNTE5OlxcdFxcdFxcdCAgICAoKCgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiAoVENQRl9DTE9TRSB8IFRDUEZfU1lOX1NFTlQpKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowNi45OTE2Mzk0NzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk2OTg4NzkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgQmluZCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgaW5ldDZfYmluZGAuIExldCdzIGdldCByaWdodCBpbnRvIGl0LCBJJ2xsIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBJIGtub3cgdGhhdCBgaW5ldDZgIHN0dWZmIGlzIGhhbmRsZWQgaW4gYG5ldC9pcHY2YCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZmluZCBgYWZfaW5ldDYuY2AuIE5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSBgaW5ldDZfYmluZGAgZnVuY3Rpb24gZGVmaW5pdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGNhbiB1c2UgbXkgSURFJ3Mgc2VhcmNoLCBvciBhIHF1aWNrIGBncmVwYCBpZiBJJ20gb24gdGhlIGNvbW1hbmQgbGluZSwgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGxvY2F0aW9uLiBGcm9tIHRoZXJlIEknbGwgc3RhcnQgdG8gcmVjb25zdHJ1Y3QgdGhlIGxvZ2ljYWwgcGF0aCB0aGF0IGlzIG5lZWRlZCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxOTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjA4Ljk2MTUzMTEwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNjgyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGluZXQ2X2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jPTI2NT1pbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTQyNS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjQyNjppbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDI3LXtcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDUxLS8qIGJpbmQgZm9yIElORVQ2IEFQSSAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDUyOmludCBpbmV0Nl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDUzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MDkuMDA5OTAzOTQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNTcxNjU0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGNvZGUsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYF9faW5ldDZfYmluZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBgX19pbmV0Nl9iaW5kYC4uLiB0aGF0IG5hbWUgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIElQdjYgc29ja2V0IGJpbmRpbmcsIHRoZSBjcml0aWNhbCBzdGVwIG9mIGFzc29jaWF0aW5nIGEgc29ja2V0IHdpdGggYSBzcGVjaWZpYyBhZGRyZXNzIGFuZCBwb3J0LiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBudWFuY2VzIG9mIElQdjYgYWRkcmVzc2luZywgc2NvcGluZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZXJyb3IgY2hlY2tpbmcgcmVsYXRlZCB0byBhZGRyZXNzIGNvbmZsaWN0cyBhbmQgcHJpdmlsZWdlZCBwb3J0cy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBzb2NrYWRkcl9pbjZgIHN0cnVjdHVyZSwgb2J2aW91c2x5LCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc29ja2V0J3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGxpa2VseSB0aGUgYGluZXQ2X3NvY2tgIHN0cnVjdHVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjaywgZXNwZWNpYWxseSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYW5kIGFueSBuZXRmaWx0ZXIgaG9va3MuIEkgd2FudCB0byBzZWUgaWYgaXTigJlzIHVzaW5nIGFueSBvZiB0aGUgbmV3ZXIgSVB2NiBzcGVjaWZpYyBBUEkgZmVhdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgdXNlcyBsb2NrcyB0byBwcm90ZWN0IGNyaXRpY2FsIHNlY3Rpb25zIG9mIHRoZSBzdHJ1Y3R1cmUuIEknbGwgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGNvZGUgaGFuZGxlcyB3aWxkY2FyZCBhZGRyZXNzZXMgKDo6KSBvciB1bnNwZWNpZmllZCBJUHY2IGFkZHJlc3Nlcy4gQmFzaWNhbGx5LCBJ4oCZbSBtZW50YWxseSBzY2FubmluZyBmb3IgcG90ZW50aWFsIHBpdGZhbGxzIGFuZCBpbmVmZmljaWVuY2llcyByZWxhdGVkIHRvIElQdjYtc3BlY2lmaWMgYWRkcmVzcyBoYW5kbGluZywgcG9ydCBhc3NpZ25tZW50LCBhbmQgZXJyb3IgY29uZGl0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MTIuMTY3MDcxODc3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNTpcXHRcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xcbiAzMTY6XFx0XFx0XFx0XFx0aWYgKCFkZXYpIHtcXG4gMzE3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIDMxODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDMxOTpcXHRcXHRcXHRcXHR9XFxuIDMyMDpcXHRcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdFxcdC8qIFJlcHJvZHVjZSBBRl9JTkVUIGNoZWNrcyB0byBtYWtlIHRoZSBiaW5kaW5ncyBjb25zaXN0ZW50ICovXFxuIDMyMzpcXHRcXHRcXHR2NGFkZHIgPSBhZGRyLVxcdTAwM2VzaW42X2FkZHIuczZfYWRkcjMyWzNdO1xcbiAzMjQ6XFx0XFx0XFx0Y2hrX2FkZHJfcmV0ID0gaW5ldF9hZGRyX3R5cGVfZGV2X3RhYmxlKG5ldCwgZGV2LCB2NGFkZHIpO1xcbiAzMjU6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdFxcdGlmICghaW5ldF9hZGRyX3ZhbGlkX29yX25vbmxvY2FsKG5ldCwgaW5ldCwgdjRhZGRyLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNoa19hZGRyX3JldCkpIHtcXG4gMzI5OlxcdFxcdFxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbiAzMzA6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDMzMTpcXHRcXHRcXHR9XFxuIDMzMjpcXHRcXHR9IGVsc2Uge1xcbiAzMzM6XFx0XFx0XFx0aWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKSB7XFxuIDMzNDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMzc6XFx0XFx0XFx0XFx0aWYgKF9faXB2Nl9hZGRyX25lZWRzX3Njb3BlX2lkKGFkZHJfdHlwZSkpIHtcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgXFx1MDAyNlxcdTAwMjZcXG4gMzM5OlxcdFxcdFxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzaW42X3Njb3BlX2lkKSB7XFxuIDM0MDpcXHRcXHRcXHRcXHRcXHRcXHQvKiBPdmVycmlkZSBhbnkgZXhpc3RpbmcgYmluZGluZywgaWYgYW5vdGhlciBvbmVcXG4gMzQxOlxcdFxcdFxcdFxcdFxcdFxcdCAqIGlzIHN1cHBsaWVkIGJ5IHVzZXIuXFxuIDM0MjpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMzQzOlxcdFxcdFxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYgPSBhZGRyLVxcdTAwM2VzaW42X3Njb3BlX2lkO1xcbiAzNDQ6XFx0XFx0XFx0XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRcXHRcXHRcXHQvKiBCaW5kaW5nIHRvIGxpbmstbG9jYWwgYWRkcmVzcyByZXF1aXJlcyBhbiBpbnRlcmZhY2UgKi9cXG4gMzQ3OlxcdFxcdFxcdFxcdFxcdGlmICghc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZikge1xcbiAzNDg6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzQ5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMzUwOlxcdFxcdFxcdFxcdFxcdH1cXG4gMzUxOlxcdFxcdFxcdFxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpIHtcXG4gMzU0OlxcdFxcdFxcdFxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjEyLjE2NzE5NTU5N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE0MjQwNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIGxpbmVzIDM1NS0zODUgb2YgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBleHByZXNzZWQgYXMgYSBwZXJzb25hbCByZWZsZWN0aW9uOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgSVB2NiBBZGRyZXNzIEZhbWlseSBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBhcyB0aGUgZGV0YWlscyBjYW4gZ2V0IHF1aXRlIGludHJpY2F0ZS4gRm9jdXNpbmcgb24gbGluZXMgMzU1LTM4NSwgaXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGguLi4gKmFoLCB5ZXMsIHRoZSBgaW5ldDZfY3JlYXRlYCBmdW5jdGlvbidzIGhhbmRsaW5nIG9mIHNwZWNpZmljIHNvY2tldCBvcHRpb25zKi4gSSBiZXQgd2UgYXJlIGxvb2tpbmcgYXQgaG93IGEgc29ja2V0IGlzIGJlaW5nIHNldCB1cCBpbiByZWxhdGlvbiB0byB0aGluZ3MgbGlrZSB0cmFmZmljIGNsYXNzZXMsIGZsb3cgbGFiZWxzLCBhbmQgc2NvcGUgSUQuXG5cbkknbSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCB0aGUgZmluZXItZ3JhaW5lZCBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBQcm9iYWJseSwgd2UgYXJlIGNoZWNraW5nIGZvciBpbnZhbGlkIHZhbHVlcywgYW5kIHByb3Blcmx5IGFzc2lnbmluZyBvciBpbml0aWFsaXppbmcgdGhvc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGlzIGxpa2VseSBtYWtpbmcgc3VyZSB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB1bmRlcmx5aW5nIElQdjYgcHJvdG9jb2wuIE1heWJlIHRoZXJlJ3Mgc29tZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIG5ldHdvcmsgaW50ZXJmYWNlcyBoYXBwZW5pbmcgaW4gdGhpcyBzZWdtZW50OyBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgdGhhdCBtaWdodCBzaWduYWwgdGhhdC5cblxuSXQncyBsaWtlbHkgY2hlY2tpbmcgYW5kIHZhbGlkYXRpbmcgc3BlY2lmaWMgc2V0dGluZ3MgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgUkZDcyBhbmQgb3RoZXIgc3RhbmRhcmRzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3IgZGVmYXVsdCB2YWx1ZXMgYmVpbmcgc2V0LCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGluZ3MgY2FuIGdldCBpbnRlcmVzdGluZy4gVGhlcmUgY291bGQgYmUgc3VidGxldGllcyBpbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgb3IgbmV0d29yayBzdGFjay4gSG1tLCBJIGFudGljaXBhdGUgdGhlcmUgYXJlIGEgc2VyaWVzIG9mIGBpZmAgc3RhdGVtZW50cyByZWxhdGVkIHRvIHZhbGlkYXRpbmcgc29ja2V0IG9wdGlvbiBwYXJhbWV0ZXJzLiBNeSBndWVzcyBpcyB0aGVyZSBhcmUgY2hlY2tzIGZvciBpbnZhbGlkIHRyYWZmaWMgY2xhc3MgdmFsdWVzLCBmbG93IGxhYmVscywgYW5kIGVuc3VyaW5nIHRoZSBzY29wZSBJRCBpcyB3aXRoaW4gdGhlIGFwcHJvcHJpYXRlIHJhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY0MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MTQuOTgxNDM3OTAyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1NTpcXHRcXHRcXHRcXHRcXHRpZiAoIWRldikge1xcbiAzNTY6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdH1cXG4gMzU5OlxcdFxcdFxcdFxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0XFx0XFx0LyogaXB2NCBhZGRyIG9mIHRoZSBzb2NrZXQgaXMgaW52YWxpZC4gIE9ubHkgdGhlXFxuIDM2MjpcXHRcXHRcXHRcXHQgKiB1bnNwZWNpZmllZCBhbmQgbWFwcGVkIGFkZHJlc3MgaGF2ZSBhIHY0IGVxdWl2YWxlbnQuXFxuIDM2MzpcXHRcXHRcXHRcXHQgKi9cXG4gMzY0OlxcdFxcdFxcdFxcdHY0YWRkciA9IExPT1BCQUNLNF9JUFY2O1xcbiAzNjU6XFx0XFx0XFx0XFx0aWYgKCEoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpXFx0e1xcbiAzNjY6XFx0XFx0XFx0XFx0XFx0aWYgKCFpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldCkgXFx1MDAyNlxcdTAwMjZcXG4gMzY3OlxcdFxcdFxcdFxcdFxcdCAgICAhaXB2Nl9jaGtfYWRkcihuZXQsIFxcdTAwMjZhZGRyLVxcdTAwM2VzaW42X2FkZHIsXFxuIDM2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXYsIDApKSB7XFxuIDM2OTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUFERFJOT1RBVkFJTDtcXG4gMzcwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMzcxOlxcdFxcdFxcdFxcdFxcdH1cXG4gMzcyOlxcdFxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzNzQ6XFx0XFx0XFx0fVxcbiAzNzU6XFx0XFx0fVxcbiAzNzY6XFx0XFxuIDM3NzpcXHRcXHRpbmV0LVxcdTAwM2VpbmV0X3Jjdl9zYWRkciA9IHY0YWRkcjtcXG4gMzc4OlxcdFxcdGluZXQtXFx1MDAzZWluZXRfc2FkZHIgPSB2NGFkZHI7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdHNrLVxcdTAwM2Vza192Nl9yY3Zfc2FkZHIgPSBhZGRyLVxcdTAwM2VzaW42X2FkZHI7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGlmICghKGFkZHJfdHlwZSBcXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpKVxcbiAzODM6XFx0XFx0XFx0bnAtXFx1MDAzZXNhZGRyID0gYWRkci1cXHUwMDNlc2luNl9hZGRyO1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRzYXZlZF9pcHY2b25seSA9IHNrLVxcdTAwM2Vza19pcHY2b25seTtcXG4gMzg2OlxcdFxcdGlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSBcXHUwMDI2XFx1MDAyNiBhZGRyX3R5cGUgIT0gSVBWNl9BRERSX01BUFBFRClcXG4gMzg3OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IDE7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBhcmUgYWxsb3dlZCB0byBiaW5kIGhlcmUuICovXFxuIDM5MDpcXHRcXHRpZiAoc251bSB8fCAhKGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKSB8fFxcbiAzOTE6XFx0XFx0XFx0ICAgICAgKGZsYWdzIFxcdTAwMjYgQklORF9GT1JDRV9BRERSRVNTX05PX1BPUlQpKSkge1xcbiAzOTI6XFx0XFx0XFx0ZXJyID0gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWdldF9wb3J0KHNrLCBzbnVtKTtcXG4gMzkzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMzk0OlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IHNhdmVkX2lwdjZvbmx5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzoxNC45ODE1NDUzNjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5NDAwMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NiBhbmQgTm9uLUxvY2FsIEJpbmRpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpYC4uLiB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgSVB2NiBuZXR3b3JraW5nIGFuZCB0aGUgY3J1Y2lhbCBjb25jZXB0IG9mIG5vbi1sb2NhbCBiaW5kaW5nLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgd2hlcmUgc29ja2V0IGJpbmRpbmcgYmVoYXZpb3IgbWlnaHQgZGV2aWF0ZSBmcm9tIHRoZSBub3JtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uLiBUbyB0cnVseSBncmFzcCB3aGF0J3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYGlwdjZfY2FuX25vbmxvY2FsX2JpbmRgLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IGVuY2Fwc3VsYXRlIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgaWYgYSBwcm9jZXNzLCBib3VuZCB0byBhbiBJUHY2IGFkZHJlc3MsIGlzIGFsbG93ZWQgdG8gcmVjZWl2ZSB0cmFmZmljIGRlc3RpbmVkIGZvciBhIGRpZmZlcmVudCBhZGRyZXNzIG9uIHRoYXQgaW50ZXJmYWNlLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWNzOiB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byBpdCwgd2hhdCBjcml0ZXJpYSBhcmUgYmVpbmcgY2hlY2tlZCBpbnRlcm5hbGx5LCBhbmQgd2hhdCB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byBtYWtpbmcgYSBqdWRnZW1lbnQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3MTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjE3LjE3NTU1MTczOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDEwMDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X2Nhbl9ub25sb2NhbF9iaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwdjYuaD04NDY9c3RhdGljIGlubGluZSB2b2lkIGlwaF90b19mbG93X2NvcHlfdjZhZGRycyhzdHJ1Y3QgZmxvd19rZXlzICpmbG93LFxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTg1Ny1cXG5pbmNsdWRlL25ldC9pcHY2Lmg6ODU4OnN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9pcHY2LmgtODU5LVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldClcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYz0zMDI9c3RhdGljIGludCBwaW5nX2NoZWNrX2JpbmRfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X3NvY2sgKmlzayxcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy0zNzUtXFxubmV0L2lwdjQvcGluZy5jOjM3NjpcXHRcXHRpZiAoIShpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaXNrKSB8fCBoYXNfYWRkciB8fFxcbm5ldC9pcHY0L3BpbmcuYy0zNzctXFx0XFx0ICAgICAgYWRkcl90eXBlID09IElQVjZfQUREUl9BTlkpKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz0yNjU9aW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy0zNjUtXFx0XFx0XFx0aWYgKCEoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpXFx0e1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6MzY2OlxcdFxcdFxcdFxcdGlmICghaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvYWZfaW5ldDYuYy0zNjctXFx0XFx0XFx0XFx0ICAgICFpcHY2X2Noa19hZGRyKG5ldCwgXFx1MDAyNmFkZHItXFx1MDAzZXNpbjZfYWRkcixcXG4tLVxcbm5ldC9pcHY2L2RhdGFncmFtLmM9Nzk3PWludCBpcDZfZGF0YWdyYW1fc2VuZF9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTg2Ny1cXHRcXHRcXHRcXHRpbnQgc3RyaWN0ID0gX19pcHY2X2FkZHJfc3JjX3Njb3BlKGFkZHJfdHlwZSkgXFx1MDAzYz0gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTDtcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjg2ODpcXHRcXHRcXHRcXHRpZiAoIWlwdjZfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpbmV0X3NrKHNrKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTg2OS1cXHRcXHRcXHRcXHQgICAgIWlwdjZfY2hrX2FkZHJfYW5kX2ZsYWdzKG5ldCwgXFx1MDAyNnNyY19pbmZvLVxcdTAwM2VpcGk2X2FkZHIsXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0yMTc9c3RhdGljIGludCByYXd2Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMjc2LVxcdFxcdGlmICghKGFkZHJfdHlwZSBcXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvcmF3LmM6Mjc3OlxcdFxcdCAgICAhaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChzb2NrX25ldChzayksIGluZXQpKSB7XFxubmV0L2lwdjYvcmF3LmMtMjc4LVxcdFxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTY4Nz1zdGF0aWMgaW50IHNjdHBfdjZfYXZhaWxhYmxlKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNjdHBfc29jayAqc3ApXFxuLS1cXG5uZXQvc2N0cC9pcHY2LmMtNzE1LVxcbm5ldC9zY3RwL2lwdjYuYzo3MTY6XFx0cmVzID0gaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIFxcdTAwMjZzcC1cXHUwMDNlaW5ldCkgfHxcXG5uZXQvc2N0cC9pcHY2LmMtNzE3LVxcdCAgICAgIGlwdjZfY2hrX2FkZHIobmV0LCBpbjYsIGRldiwgMCk7XFxuLS1cXG5uZXQvc2N0cC9pcHY2LmM9OTQ3PXN0YXRpYyBpbnQgc2N0cF9pbmV0Nl9iaW5kX3ZlcmlmeShzdHJ1Y3Qgc2N0cF9zb2NrICpvcHQsIHVuaW9uIHNjdHBfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy05NjQtXFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBhZGRyLVxcdTAwM2V2Ni5zaW42X3Njb3BlX2lkKTtcXG5uZXQvc2N0cC9pcHY2LmM6OTY1OlxcdFxcdFxcdGlmICghZGV2IHx8ICEoaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIFxcdTAwMjZvcHQtXFx1MDAzZWluZXQpIHx8XFxubmV0L3NjdHAvaXB2Ni5jLTk2Ni1cXHRcXHRcXHRcXHQgICAgICBpcHY2X2Noa19hZGRyKG5ldCwgXFx1MDAyNmFkZHItXFx1MDAzZXY2LnNpbjZfYWRkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MTguNzg5NjU3NDY3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4OTE4OTAxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgaXMgc3ByaW5rbGVkIHRocm91Z2hvdXQgdGhlIElQdjYgbmV0d29ya2luZyBjb2RlLiBJJ20gc2VlaW5nIGl0IHJlZmVyZW5jZWQgaW4gYF9faW5ldDZfYmluZGAsIGBpcDZfZGF0YWdyYW1fc2VuZF9jdGxgLCBgcmF3djZfYmluZGAsIGBzY3RwX3Y2X2F2YWlsYWJsZWAsIGFuZCBgc2N0cF9pbmV0Nl9iaW5kX3ZlcmlmeWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGl0cyBzY29wZSDigJMgbG9va3MgbGlrZSBpdCdzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBob3cgSVB2NiBzb2NrZXQgYmluZGluZyBhbmQgY29udHJvbCBvcGVyYXRpb25zIHdvcmssIHBhcnRpY3VsYXJseSBpbiBib3RoIHJhdyBhbmQgZGF0YWdyYW0gY29udGV4dHMsIGFuZCBldmVuIHdpdGggU0NUUC4gSSBrbm93IGEgYml0IGFib3V0IHRob3NlIHByb3RvY29scywgc28gSSBjYW4gc3RhcnQgdG8gaW5mZXIgd2hhdCBpdHMgcm9sZSBtaWdodCBiZS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBhY3R1YWxseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIHRoaXMgZnVuY3Rpb24gaXMgZXZhbHVhdGluZy4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHRoZSBhYmlsaXR5IHRvIGJpbmQgYSBzb2NrZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGlzbid0IGxvY2FsIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIHJhaXNlcyBhbGwgc29ydHMgb2Ygc2VjdXJpdHkgYW5kIHJvdXRpbmcgY29uc2lkZXJhdGlvbnMuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBnZXQgYSBjbG9zZSBsb29rLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLWxvY2FsIGJpbmRpbmdzIGluIElQdjYuIEknbSBjdXJpb3VzIHdoYXQga2luZCBvZiBjaGVja3MgaXQgcGVyZm9ybXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjEuNjgxNTQ5NjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXB2Ni5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1NTpcXHRcXG4gODU2OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA4NTc6XFx0XFxuIDg1ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIDg1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXFxuIDg2MDpcXHR7XFxuIDg2MTpcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5zeXNjdGwuaXBfbm9ubG9jYWxfYmluZCkgfHxcXG4gODYyOlxcdFxcdFxcdHRlc3RfYml0KElORVRfRkxBR1NfRlJFRUJJTkQsIFxcdTAwMjZpbmV0LVxcdTAwM2VpbmV0X2ZsYWdzKSB8fFxcbiA4NjM6XFx0XFx0XFx0dGVzdF9iaXQoSU5FVF9GTEFHU19UUkFOU1BBUkVOVCwgXFx1MDAyNmluZXQtXFx1MDAzZWluZXRfZmxhZ3MpO1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0XFxuIDg2NjpcXHQvKiBTeXNjdGwgc2V0dGluZ3MgZm9yIG5ldCBpcHY2LmF1dG9fZmxvd2xhYmVscyAqL1xcbiA4Njc6XFx0I2RlZmluZSBJUDZfQVVUT19GTE9XX0xBQkVMX09GRlxcdFxcdDBcXG4gODY4OlxcdCNkZWZpbmUgSVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcXHQxXFxuIDg2OTpcXHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfT1BUSU5cXHQyXFxuIDg3MDpcXHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfRk9SQ0VEXFx0M1xcbiA4NzE6XFx0XFxuIDg3MjpcXHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfTUFYXFx0XFx0SVA2X0FVVE9fRkxPV19MQUJFTF9GT1JDRURcXG4gODczOlxcdFxcbiA4NzQ6XFx0I2RlZmluZSBJUDZfREVGQVVMVF9BVVRPX0ZMT1dfTEFCRUxTXFx0SVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjEuNjgxNjQ3NDlaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg4NTA0Nzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBTb2NrZXQgT3B0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGB0ZXN0X2JpdChJTkVUX0ZMQUdTX0ZSRUVCSU5ELCBcdTAwMjZpbmV0LVx1MDAzZWluZXRfZmxhZ3MpYCBhbmQgYHRlc3RfYml0KElORVRfRkxBR1NfVFJBTlNQQVJFTlQsIFx1MDAyNmluZXQtXHUwMDNlaW5ldF9mbGFncylgIHVzZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgaG93IGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIGFyZSBiZWluZyBoYW5kbGVkLiBJbnRlcmVzdGluZyB0aGF0IHRoZXkncmUgbm93IHNldHRpbmcgdGhlc2UgZmxhZ3MgdGhyb3VnaCBjb25jdXJyZW50IHNvY2tldCBvcGVyYXRpb25zLiBUaGUgZmFjdCB0aGF0IGBzb2Nrb3B0X2xvY2tfc29jayhzaylgIGlzbid0IGJlaW5nIGFjcXVpcmVkIGFueW1vcmUgaXMgYSBzaWduaWZpY2FudCBkZXRhaWwsIHN1Z2dlc3RpbmcgYSByZS1hcmNoaXRlY3Rpbmcgb2YgaG93IHRoZXNlIHNvY2tldCBvcHRpb25zIGFyZSBtYW5hZ2VkLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIG9yIGNvbmN1cnJlbmN5IHJlYXNvbnMuIEl0J3MgZGVmaW5pdGVseSB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsaW5rZWQgdG8gYENPTkZJR19JUFY2YC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgdG8gc2VlIGlmIGl0IHJlbGllcyBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgdGhlbiBJJ2xsIHNjYW4gYG5ldC9pcHY2L01ha2VmaWxlYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjQuNTY2Njk4MTI0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVDYpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxuICAxNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlwdjYtJChDT05GSUdfWEZSTSkgKz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXFxcXG4gIDE5OlxcdFxcdHhmcm02X291dHB1dC5vIHhmcm02X3Byb3RvY29sLm9cXG4gIDIwOlxcdGlwdjYtJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIub1xcbiAgMjE6XFx0aXB2Ni0kKENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUykgKz0gZmliNl9ydWxlcy5vXFxuICAyMjpcXHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjM6XFx0aXB2Ni0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAyNDpcXHRpcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG4gIDI1OlxcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxuICAyNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSArPSBzZWc2X2htYWMub1xcbiAgMjc6XFx0aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4gIDI4OlxcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgKz0gaW9hbTZfaXB0dW5uZWwub1xcbiAgMjk6XFx0XFxuICAzMDpcXHRvYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxuICAzMTpcXHRvYmotJChDT05GSUdfSU5FVDZfRVNQKSArPSBlc3A2Lm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRCkgKz0gZXNwNl9vZmZsb2FkLm9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICs9IGlwY29tcDYub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMKSArPSB4ZnJtNl90dW5uZWwub1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgKz0gdHVubmVsNi5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSArPSBtaXA2Lm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhL1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIvXFxuICAzOTpcXHRcXG4gIDQwOlxcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgKz0gaXA2X3Z0aS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjI0LjU2Njc2Mzg5NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODUwNTYxOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipDaGVja2luZyBmb3IgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0lQVjZgIGlzIGEgbmVjZXNzYXJ5IHJlcXVpcmVtZW50LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQncyBwcm9wZXJseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGBDT05GSUdfSVBWNmAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjYgc3Vic3lzdGVtLiBTbywgbGV0IG1lIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2AuIEknbGwgb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBpbnRlbmRlZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfSVBWNmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgb3B0aW9ucyBhcmUgdW5kZXJzdG9vZCB3aXRoaW4gdGhlIHJlbGV2YW50IEtjb25maWcgY29udGV4dC4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB0byBwcm9jZWVkLCBzbyBpdCdzIGJlc3QgdG8gY29uZmlybSBpdCBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwODYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjI2LjQxNzMyODkwNloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Nzg0NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjI2LjQ2NDAwOTU2OVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDMyNjAyMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IHJpZ2h0IGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFyb3VuZCB0aGF0IGxpbmUgNi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBJJ20gYXNzdW1pbmcgdGhpcyBmaWxlIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgdGhlIEtjb25maWcgZmlsZSByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgSVB2Ni1yZWxhdGVkIGZlYXR1cmVzIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJ20gcHJvYmFibHkgaW50ZXJlc3RlZCBpbiBob3cgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IGdyYW51bGFyIGNvbnRyb2wgdGhlIHVzZXIgaGFzIG92ZXIgc3BlY2lmaWMgZmVhdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgZGVzY3JpcHRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZWFjaCBvcHRpb24gZG9lcyBhbmQgd2hlbiBpdCBzaG91bGQgYmUgc2VsZWN0ZWQuIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgbmljaGUgc2V0dXBzIG9yIHNwZWNpZmljIHVzZSBjYXNlcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiBzdG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzoyOC44OTY2MTUzMDZaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBJUFY2XFxuICAgNzpcXHRcXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTdXBwb3J0IGZvciBJUCB2ZXJzaW9uIDYgKElQdjYpLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IElQdjYsIHNlZVxcbiAgMTQ6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVB2NlxcdTAwM2UuXFxuICAxNTpcXHRcXHQgIEZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBJUHY2IHVuZGVyIExpbnV4LCBzZWVcXG4gIDE2OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYucnN0IGFuZCByZWFkIHRoZSBIT1dUTyBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvSE9XVE8vTGludXgrSVB2Ni1IT1dUTy9cXHUwMDNlXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIElQVjZcXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG4gIDIyOlxcdFxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgUm91dGVyIFByZWZlcmVuY2UgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIHRoZSBSb3V0ZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjguODk2NjkzNzQ2WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3ODYyNTg3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gSVB2NiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgSVB2NmAgd29ya3Mgd2l0aGluIHRoaXMgc3lzdGVtLCBhbmQgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIGJvdGggYE5FVGAgYW5kIGBJTkVUYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgSVB2NmAgaXMgYnVpbHQgb24gdGhlIG5ldHdvcmsgbGF5ZXIgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbnRlcm5ldCBwcm90b2NvbC4gVG8gdW5kZXJzdGFuZCBob3cgdGhhdCBhbGwgZml0cyB0b2dldGhlciwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSB0aGUgc3BlY2lmaWNzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYG5ldC9LY29uZmlnYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MzAuNjgyOTU2Mzg3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc4MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9pcHY2L0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MTM3PXNvdXJjZSBcXFwibmV0L2lwdjQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoxMzg6c291cmNlIFxcXCJuZXQvaXB2Ni9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTEzOS1zb3VyY2UgXFxcIm5ldC9uZXRsYWJlbC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzozMC43NTY3NDYzNDVaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE2Njk1MjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUgYWdhaW4uIExldCdzIGdldCByaWdodCB0byBpdC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIG9yIHBlcmhhcHMgaG93IGFuIGV4aXN0aW5nIG9uZSBjYW4gYmUgZXhwYW5kZWQuICBMaW5lIDEzOCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0J3Mgb2Z0ZW4gYSBjZW50cmFsIGFyZWEgZm9yIHNwZWNpZmljIGZlYXR1cmVzLCBvciBtYXliZSByZWxhdGVkIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IHdpdGhpbiBhIG5ldHdvcmsgbW9kdWxlLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBzZWN0aW9uIG9mIHRoZSBmaWxlLiBJIGFudGljaXBhdGUgaXQgbWlnaHQgY29udGFpbiBhIGBjb25maWdgIGRlZmluaXRpb24sIGEgYG1lbnVjb25maWdgIGJsb2NrLCBvciBwZXJoYXBzIGV2ZW4gYW4gYGlmYCBzdGF0ZW1lbnQgYmFzZWQgb24gYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgYXQgbGVhc3QgYSBiYXNpYyBgaGVscGAgc2VjdGlvbiBhbmQgcHJvYmFibHkgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBnYXRpbmcgY29uZGl0aW9ucy4gIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MzQuOTIzNzAxNDkzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ICBiZWhhdmlvciBvZiB0aGUgVENQL0lQIGNvZGUgYnkgd3JpdGluZyB0byB0aGUgKHZpcnR1YWwpIGZpbGVzIGluXFxuIDEzMTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvaXB2NC8qOyB0aGUgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlXFxuIDEzMjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFx1MDAzZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBTaG9ydCBhbnN3ZXI6IHNheSBZLlxcbiAxMzU6XFx0XFxuIDEzNjpcXHRpZiBJTkVUXFxuIDEzNzpcXHRzb3VyY2UgXFxcIm5ldC9pcHY0L0tjb25maWdcXFwiXFxuIDEzODpcXHRzb3VyY2UgXFxcIm5ldC9pcHY2L0tjb25maWdcXFwiXFxuIDEzOTpcXHRzb3VyY2UgXFxcIm5ldC9uZXRsYWJlbC9LY29uZmlnXFxcIlxcbiAxNDA6XFx0c291cmNlIFxcXCJuZXQvbXB0Y3AvS2NvbmZpZ1xcXCJcXG4gMTQxOlxcdFxcbiAxNDI6XFx0ZW5kaWYgIyBpZiBJTkVUXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdGNvbmZpZyBORVRXT1JLX1NFQ01BUktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MzQuOTIzODMzOTgzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjY5MjU2OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBTb2NrZXQgT3B0aW9uIENoYW5nZSBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIHJlbGF0ZWQgdG8gYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvcnJlY3RseSBjb25maWd1cmluZyB0aGUgZnV6emVyLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfSVBWNmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIHdpdGggYENPTkZJR19JTkVUYCBhcyBhIGRlcGVuZGVuY3kuXG5cbkJhc2VkIG9uIHRoZSBpbml0aWFsIGNoZWNrLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBbXCJJUFY2XCJdYC4gV2hpbGUgYElORVRgIGlzIGEgZGVwZW5kZW5jeSwgYElQVjZgIGl0c2VsZiBpcyB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gY29udHJvbGxpbmcgYGlwdjZfc29ja2dsdWUuY2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHBhcnQ6IGBGb2N1c1N5bWJvbHNgLiBUaGUgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGRvX2lwdjZfc2V0c29ja29wdGAgYW5kIGl0cyBlbnRyeSBwb2ludCBgaXB2Nl9zZXRzb2Nrb3B0YC4gV2UgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUgdG8gYXZvaWQgZGlsdXRpb24sIHNvIG5vIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgY291bGQgaW1wYWN0IHRoZSByZXN1bHQuIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kYCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIGl0IGNhbiBiZSBvbWl0dGVkLiBgZG9faXB2Nl9nZXRzb2Nrb3B0YCBpcyByZWxldmFudCwgYnV0IHRoZSBmb2N1cyBpcyBvbiBtb2RpZmljYXRpb24uIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGlzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBpdCBpcyAqbm90KiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIGBpcHY2X3NldHNvY2tvcHRgIGlzIGFsc28gKm5vdCogc3RhdGljLCBhbmQgaXMgdGhlIGVudHJ5IHBvaW50LiBJJ20gZm9jdXNpbmcgb24gdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy5cblxuVGhlIGRpZmYgY29uZmlybXMgbXkgYXNzZXNzbWVudDsgb25seSBjaGFuZ2VzIHdpdGhpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGBkb19pcHY2X3NldHNvY2tvcHRgIChsaW5lcyA0MDEtNDE1IGFuZCA2NjYtNjg4KS4gVGh1cywgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGBbXCJkb19pcHY2X3NldHNvY2tvcHRcIiwgXCJpcHY2X3NldHNvY2tvcHRcIl1gLlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGxvY2tpbmcgY29udHJhY3QsIGVuYWJsaW5nIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHRvIGJlIHNldCB3aXRob3V0IGhvbGRpbmcgdGhlIHNvY2tldCBsb2NrLiBUaGlzIGltcGFjdHMgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBjb25jdXJyZW5jeSBpc3N1ZXMgYWNjZXNzaWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgYHNldHNvY2tvcHRgIGNhbGxzLiBUaGlzIGNoYW5nZSBuZWVkcyB0aG9yb3VnaCB0ZXN0aW5nIHRvIGlkZW50aWZ5IGFueSByYWNlcy5cblxuSW4gc3VtbWFyeSwgdGhlIGZ1enplciB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgbG9ja2luZyBmb3IgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCwgd2hpY2ggY291bGQgZXhwb3NlIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBzZXRzb2Nrb3B0LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiZG9faXB2Nl9zZXRzb2Nrb3B0XCIsIFwiaXB2Nl9zZXRzb2Nrb3B0XCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIklQVjZcIl1gXG5cblJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjQyLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1ODowNS4xOTMwOTQyODVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY2NTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX2lwdjZfc2V0c29ja29wdFwiLFxuICAgIFwiaXB2Nl9zZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gaGFuZGxlIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgd2l0aG91dCBhY3F1aXJpbmcgc29ja29wdF9sb2NrX3NvY2soKS4gVGhpcyBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBzZXRzb2Nrb3B0KCkgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIChmb3IgSVBWNl9GUkVFQklORCkgb3IgYXBwcm9wcmlhdGVseSBwZXJtaXR0ZWQgbmFtZXNwYWNlcyAoZm9yIElQVjZfVFJBTlNQQVJFTlQpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZW5zdXJlIG5vIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByZWdyZXNzaW9ucyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9faXB2Nl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcHY2X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb19pcHY2X3NldHNvY2tvcHQoKSB0byBoYW5kbGUgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyB3aXRob3V0IGFjcXVpcmluZyBzb2Nrb3B0X2xvY2tfc29jaygpLiBUaGlzIGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHNldHNvY2tvcHQoKSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgKGZvciBJUFY2X0ZSRUVCSU5EKSBvciBhcHByb3ByaWF0ZWx5IHBlcm1pdHRlZCBuYW1lc3BhY2VzIChmb3IgSVBWNl9UUkFOU1BBUkVOVCksIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gY29uY3VycmVuY3kgaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1ODowNS4yNjY3NjY5OTNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDk3ODkxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTg6MDUuMjY3MjIyMjMzWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk0OTc0MzI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIGluIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIHRoZSBsb2NrbGVzcyBzd2l0Y2gtc3RhdGVtZW50IGJsb2NrIGJlZm9yZSBsb2NrX3NvY2soc2spIGlzIGFjcXVpcmVkLiBUaGUgb3B0aW9ucyBhcmUgc2V0IHVzaW5nIGluZXRfYXNzaWduX2JpdCgpLCBtb2RpZnlpbmcgYml0IGZsYWdzIG9uIHRoZSBzb2NrZXQuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2VhOTZiZDRjNDQyOTU4MGQ3OTI0NzJmNjRhN2IwZTY5MWEzMWFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zOTgsNiArMzk4LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFxuIFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4rXHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4rXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbitcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuK1x0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4rXHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuK1x0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC02NjYsMjcgKzY4MSw2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR2ID0gMDtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4tXHRcdGlmICh2YWxib29sIFx1MDAyNlx1MDAyNiAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuLVx0XHRcdHJldHYgPSAtRVBFUk07XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4tXHRcdFx0Z290byBlX2ludmFsO1xuLVx0XHQvKiB3ZSBkb24ndCBoYXZlIGEgc2VwYXJhdGUgdHJhbnNwYXJlbnQgYml0IGZvciBJUFY2IHdlIHVzZSB0aGUgb25lIGluIHRoZSBJUHY0IHNvY2tldCAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuLVx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGFsc28gZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuIFx0Y2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0Z290byBlX2ludmFsO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTg6MDUuMjY3MjIzMzYzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyMjcxNTk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZWVkIGZvciBhIEtNU0FOIEZ1enppbmcgU2Vzc2lvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiBhIHBhdGNoIGFuZCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IHNwaW5uaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gTGV0J3MgZGlzc2VjdCB0aGlzIGxvZ2ljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGRpZmYgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBwcm9iYWJseSB1c2luZyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBjb250ZXh0LlxuXG5UaGUgZGlmZiBpcyB0b3VjaGluZyBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCwgd2hpY2gsIGFzIGEgcmVtaW5kZXIsIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMgZm9yIElQdjYuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggaXMgcmV3b3JraW5nIHRoZSB3YXkgYGRvX2lwdjZfc2V0c29ja29wdGAgaGFuZGxlcyBzb21lIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgYXJlIGJlaW5nIG1vdmVkLiBUaGUgcGF0Y2ggaXMgc2hpZnRpbmcgdGhlc2UgZnJvbSBiZWluZyBoYW5kbGVkICp1bmRlciogdGhlIHNvY2tldCBsb2NrIHRvIHRoZSBzZWN0aW9uIGRlc2NyaWJlZCBhcyBcIkhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC5cIiBUaGlzIGlzIHRoZSBrZXkuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0IG1lIGdvIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzk4IGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSdzIGEgcG90ZW50aWFsIGZvciBuZXcgS01TQU4gdnVsbmVyYWJpbGl0aWVzIGJlaW5nIGludHJvZHVjZWQgYnkgbW92aW5nIHRoZXNlIG9wdGlvbnMgYXJvdW5kLiBPbmx5IHRoZW4gY2FuIEkgbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB0aGUgZnV6emluZyBzZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTg6MTEuNDk0Mzg2MDU3WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gMzgxOlxcdFxcdGludCByZXR2ID0gLUVOT1BST1RPT1BUO1xcbiAzODI6XFx0XFx0aW50IHZhbCwgdmFsYm9vbDtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpKVxcbiAzODU6XFx0XFx0XFx0dmFsID0gMDtcXG4gMzg2OlxcdFxcdGVsc2Uge1xcbiAzODc6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNlPSBzaXplb2YoaW50KSkge1xcbiAzODg6XFx0XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxcbiAzODk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM5MDpcXHRcXHRcXHR9IGVsc2VcXG4gMzkxOlxcdFxcdFxcdFxcdHZhbCA9IDA7XFxuIDM5MjpcXHRcXHR9XFxuIDM5MzpcXHRcXG4gMzk0OlxcdFxcdHZhbGJvb2wgPSAodmFsICE9IDApO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHRpZiAoaXA2X21yb3V0ZV9vcHQob3B0bmFtZSkpXFxuIDM5NzpcXHRcXHRcXHRyZXR1cm4gaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDM5ODpcXHRcXG4gMzk5OlxcdFxcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC4gKi9cXG4gNDAwOlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA0MDE6XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA0MDI6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQwNDpcXHRcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cXG4gNDA1OlxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xcbiA0MDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQwNzpcXHRcXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxuIDQwODpcXHRcXHRcXHRpZiAodmFsYm9vbCBcXHUwMDI2XFx1MDAyNiAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFxcdTAwMjZcXHUwMDI2XFxuIDQwOTpcXHRcXHRcXHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbiA0MTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNDExOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDEyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTM6XFx0XFx0XFx0LyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovXFxuIDQxNDpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcXG4gNDE1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MTY6XFx0XFx0Y2FzZSBJUFY2X1VOSUNBU1RfSE9QUzpcXG4gNDE3OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDE4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTk6XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIDI1NSB8fCB2YWwgXFx1MDAzYyAtMSlcXG4gNDIwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MjE6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlaG9wX2xpbWl0LCB2YWwpO1xcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQyMzpcXHRcXHRjYXNlIElQVjZfTVVMVElDQVNUX0xPT1A6XFxuIDQyNDpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQyNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI2OlxcdFxcdFxcdGlmICh2YWwgIT0gdmFsYm9vbClcXG4gNDI3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mjg6XFx0XFx0XFx0aW5ldDZfYXNzaWduX2JpdChNQzZfTE9PUCwgc2ssIHZhbGJvb2wpO1xcbiA0Mjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU4OjExLjQ5NDUxOTIwN1oiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzI3MDExODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBJUHY2IHNldHNvY2tvcHQgSGFuZGxlciBSZW9yZ2FuaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGEgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGRvX2lwdjZfc2V0c29ja29wdGAuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgc29ja2V0IG9wdGlvbnMgYmVmb3JlIHRoZSBgbG9ja19zb2NrKHNrKWAgY2FsbC5cblxuRXNzZW50aWFsbHksIEknbSBleGFtaW5pbmcgdGhpcyBjb2RlOlxuXG5gYGBjXG5cdGNhc2UgSVBWNl9GUkVFQklORDpcblx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcblx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdC8qIFNoYXJlZCB3aXRoIElQX0ZSRUVCSU5ELiAqL1xuXHRcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xuXHRcdHJldHVybiAwO1xuXG5cdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcblx0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuXHRcdCAgICAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcblx0XHRcdHJldHVybiAtRVBFUk07XG5cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG5cdFx0XHRyZXR1cm4gLUVJTlZBTDtcblx0XHQvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi9cblx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcblx0XHRyZXR1cm4gMDtcbmBgYFxuXG5UaGVzZSBjYXNlcyB3ZXJlICpwcmV2aW91c2x5KiBoYW5kbGVkIGFmdGVyIHRoZSBsb2NrLiBOb3cgdGhleSBhcmUgaGFuZGxlZCBiZWZvcmUgdGhlIGxvY2suIEl0J3MgYSBzaW1wbGUgcmVvcmRlcmluZyBiYXNlZCBvbiB0aGUgYXRvbWljIG5hdHVyZSBvZiBgaW5ldF9hc3NpZ25fYml0YCwgd2hpY2ggb3BlcmF0ZXMgb24gYml0cywgbWVhbmluZyBgbG9ja19zb2NrYCBpc24ndCByZXF1aXJlZCBmb3IgaXRzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGJpdCBjaGFuZ2UuXG5cbk5vIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBjaGFuZ2VkLCBubyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIGFyZSBtb2RpZmllZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkgc2VlIG5vIG5ldyBpbnN0YW5jZXMgb2YgcmVhZGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgcmVhZGluZyAqZnJvbSogdXNlcnNwYWNlIHRocm91Z2ggYGNvcHlfZnJvbV9zb2NrcHRyYCwgYW5kIHdyaXRpbmcgYSBiaXQgdG8gYSBrZXJuZWwgc3RydWN0dXJlLiBOb3RoaW5nIGdldHMgY29waWVkICpiYWNrKiB0byB1c2Vyc3BhY2UuIFRoaXMgc2V0c29ja29wdCBjYWxsIGFjdHMgYXMgYSBzZXR0ZXIuXG5cbkhlcmUncyB0aGUgS01TQU4gcmVhc29uaW5nOlxuXG4qICAgKipQYXRjaCBEZXNjcmlwdGlvbjoqKiBUaGUgcGF0Y2ggbW92ZXMgdGhlIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHNvY2tvcHQgaGFuZGxlcnMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgdG8gdGhlIGxvY2tsZXNzIHNlY3Rpb24gYmVmb3JlIGBsb2NrX3NvY2soc2spYC5cbiogICAqKktNU0FOIFJhdGlvbmFsZToqKiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgaW50cm9kdWNlIG5ldyByZWFkcyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgY29weSBkYXRhIGJhY2sgdG8gdXNlciBzcGFjZS4gSXQncyBhIHNldHNvY2tvcHQgb3BlcmF0aW9uLCBzZXR0aW5nIGEgYml0IGZsYWcgdmlhIGBpbmV0X2Fzc2lnbl9iaXRgLlxuKiAgICoqUmVsZXZhbnQgU2FuaXRpemVyczoqKiBXaGlsZSB0aGlzIHBhdGNoIGRvZXNuJ3QgdHJpZ2dlciBLTVNBTiwgY29uY3VycmVuY3kgYXNwZWN0cyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvdGVudGlhbCBjb25jZXJuLCBhbmQgdGhlcmVmb3JlIEtDU0FOL3JhY2UgZGV0ZWN0b3JzIHdvdWxkIGJlIHJlbGV2YW50IGZvciBleGFtaW5pbmcgdGhlIGVmZmVjdHMgb2YgdGhlIGxvY2tsZXNzIGJpdCBzZXR0aW5nLiBLTVNBTiBob3dldmVyIGRvZXMgbm90IGFwcGx5IGhlcmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gVGhlIGNvcmUgY2hhbmdlIGlzIG1lcmVseSBhIGZ1bmN0aW9uYWwgcmVvcmdhbml6YXRpb24gd2l0aCBubyByaXNrIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIxLCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1ODoyNC43NjQ2Mzk4NDVaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIGluIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIHRoZSBsb2NrbGVzcyBzd2l0Y2gtc3RhdGVtZW50IGJsb2NrIGJlZm9yZSBsb2NrX3NvY2soc2spIGlzIGFjcXVpcmVkLiBUaGUgb3B0aW9ucyBhcmUgc2V0IHVzaW5nIGluZXRfYXNzaWduX2JpdCgpLCBtb2RpZnlpbmcgYml0IGZsYWdzIG9uIHRoZSBzb2NrZXQuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 13:53:15 +0000 UTC FinishedAt: 2026-09-12 13:58:27 +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": "348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "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": "348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "0949f8b9-d37e-473d-9e25-4c87ed0c3a43" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_ipv6_setsockopt", "ipv6_setsockopt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZWE5NmJkNGM0NDI5NTgwZDc5MjQ3MmY2NGE3YjBlNjkxYTMxYWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NTU6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zOTgsNiAmIzQzOzM5OCwyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC4gKi9cbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuJiM0MztcdGNhc2UgSVBWNl9GUkVFQklORDpcbiYjNDM7XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdC8qIFNoYXJlZCB3aXRoIElQX0ZSRUVCSU5ELiAqL1xuJiM0MztcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4mIzQzO1x0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0LyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovXG4mIzQzO1x0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0Y2FzZSBJUFY2X1VOSUNBU1RfSE9QUzpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNjY2LDI3ICYjNDM7NjgxLDYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdHJldHYgPSAwO1xuIFx0XHRicmVhaztcbiBcbi1cdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcbi1cdFx0aWYgKHZhbGJvb2wgXHUwMDI2XHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7XG4tXHRcdFx0cmV0diA9IC1FUEVSTTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGRvbiYjMzk7dCBoYXZlIGEgc2VwYXJhdGUgdHJhbnNwYXJlbnQgYml0IGZvciBJUFY2IHdlIHVzZSB0aGUgb25lIGluIHRoZSBJUHY0IHNvY2tldCAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuLVx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGFsc28gZG9uJiMzOTt0IGhhdmUgYSBzZXBhcmF0ZSBmcmVlYmluZCBiaXQgZm9yIElQVjYgKi9cbi1cdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4tXHRcdHJldHYgPSAwO1xuLVx0XHRicmVhaztcbi1cbiBcdGNhc2UgSVBWNl9SRUNWT1JJR0RTVEFERFI6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIFx0XHRcdGdvdG8gZV9pbnZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwdjZfc2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkb19pcHY2X3NldHNvY2tvcHQoKSB0byBoYW5kbGUgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyB3aXRob3V0IGFjcXVpcmluZyBzb2Nrb3B0X2xvY2tfc29jaygpLiBUaGlzIGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHNldHNvY2tvcHQoKSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgKGZvciBJUFY2X0ZSRUVCSU5EKSBvciBhcHByb3ByaWF0ZWx5IHBlcm1pdHRlZCBuYW1lc3BhY2VzIChmb3IgSVBWNl9UUkFOU1BBUkVOVCksIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gY29uY3VycmVuY3kgaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2VhOTZiZDRjNDQyOTU4MGQ3OTI0NzJmNjRhN2IwZTY5MWEzMWFjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDFmNjhmYjY0YTQzZWYuLjRiMzUzNjU3MWM5ODAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTM5OCw2ICYjNDM7Mzk4LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCiAJLyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqLwogCXN3aXRjaCAob3B0bmFtZSkgewomIzQzOwljYXNlIElQVjZfRlJFRUJJTkQ6CiYjNDM7CQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi8KJiM0MzsJCWluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgSVBWNl9UUkFOU1BBUkVOVDoKJiM0MzsJCWlmICh2YWxib29sICZhbXA7JmFtcDsgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfUkFXKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi8KJiM0MzsJCWluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpOwomIzQzOwkJcmV0dXJuIDA7CiAJY2FzZSBJUFY2X1VOSUNBU1RfSE9QUzoKIAkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NjYsMjcgJiM0Mzs2ODEsNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJcmV0diA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBJUFY2X1RSQU5TUEFSRU5UOgotCQlpZiAodmFsYm9vbCAmYW1wOyZhbXA7ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykgJmFtcDsmYW1wOwotCQkgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7Ci0JCQlyZXR2ID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQotCQkJZ290byBlX2ludmFsOwotCQkvKiB3ZSBkb24mIzM5O3QgaGF2ZSBhIHNlcGFyYXRlIHRyYW5zcGFyZW50IGJpdCBmb3IgSVBWNiB3ZSB1c2UgdGhlIG9uZSBpbiB0aGUgSVB2NCBzb2NrZXQgKi8KLQkJaW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7Ci0JCXJldHYgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVBWNl9GUkVFQklORDoKLQkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQotCQkJZ290byBlX2ludmFsOwotCQkvKiB3ZSBhbHNvIGRvbiYjMzk7dCBoYXZlIGEgc2VwYXJhdGUgZnJlZWJpbmQgYml0IGZvciBJUFY2ICovCi0JCWluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpOwotCQlyZXR2ID0gMDsKLQkJYnJlYWs7Ci0KIAljYXNlIElQVjZfUkVDVk9SSUdEU1RBRERSOgogCQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiAJCQlnb3RvIGVfaW52YWw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgQU1ENjQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgcmVxdWVzdCBpcyB0byBldmFsdWF0ZSBpdC4gRmluZSwgbGV0JiMzOTtzIGRpdmUgaW4uIFNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIG1vdmluZyB0aGUgaGFuZGxpbmcgb2YgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgd2l0aGluIGBkb19pcHY2X3NldHNvY2tvcHRgLiBSaWdodCwgc28gdGhleSYjMzk7cmUgbW92aW5nIHRoZW0gZnJvbSB0aGUgbG9ja2VkIHNlY3Rpb24gdG8gdGhlIHVubG9ja2VkIHNlY3Rpb24uIFRoZSBjb21tZW50IHNheXMgJiMzNDtIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuJiMzNDsKCk15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IHRoZSBjaGFuZ2U/IFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBoZXJlPyBJcyBpdCBwZXJmb3JtYW5jZS1iYXNlZD8gUmVkdWNlZCBjb250ZW50aW9uPyBJbmNyZWFzZWQgcGFyYWxsZWxpc20/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4KClJpZ2h0LCBzbyBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYXJvdW5kIGxpbmUgMzk4LCB3aGVyZSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBpcyBwcm9iYWJseSBkZWZpbmVkLCBhbmQgdGhlbiBjaGVjayBuZWFyIGxpbmUgNjY2IGZvciBob3cgdGhvc2Ugb3B0aW9ucyBhcmUgdXNlZCBvciBtb3ZlZCBhcm91bmQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aG9zZSBvcHRpb25zIHdlcmUgYmVpbmcgaGFuZGxlZCBiZWZvcmUsIGFuZCBob3cgdGhleSBhcmUgbm93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGNoYW5nZXMgdGhlIGxvY2tpbmcgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBsZWdpdGltYXRlIGNoYW5nZSB0aGF0JiMzOTtzIGJlaW5nIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIDM4MTpcdFx0aW50IHJldHYgPSAtRU5PUFJPVE9PUFQ7XG4gMzgyOlx0XHRpbnQgdmFsLCB2YWxib29sO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpKVxuIDM4NTpcdFx0XHR2YWwgPSAwO1xuIDM4NjpcdFx0ZWxzZSB7XG4gMzg3Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNlPSBzaXplb2YoaW50KSkge1xuIDM4ODpcdFx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxuIDM4OTpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzkwOlx0XHRcdH0gZWxzZVxuIDM5MTpcdFx0XHRcdHZhbCA9IDA7XG4gMzkyOlx0XHR9XG4gMzkzOlx0XG4gMzk0Olx0XHR2YWxib29sID0gKHZhbCAhPSAwKTtcbiAzOTU6XHRcbiAzOTY6XHRcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcbiAzOTc6XHRcdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDM5ODpcdFxuIDM5OTpcdFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIDQwMDpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gNDAxOlx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNDAyOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQwNDpcdFx0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbiA0MDU6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4gNDA2Olx0XHRcdHJldHVybiAwO1xuIDQwNzpcdFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuIDQwODpcdFx0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuIDQwOTpcdFx0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4gNDEwOlx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA0MTE6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDEyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDEzOlx0XHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuIDQxNDpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbiA0MTU6XHRcdFx0cmV0dXJuIDA7XG4gNDE2Olx0XHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIDQxNzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MTk6XHRcdFx0aWYgKHZhbCBcdTAwM2UgMjU1IHx8IHZhbCBcdTAwM2MgLTEpXG4gNDIwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDIxOlx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlaG9wX2xpbWl0LCB2YWwpO1xuIDQyMjpcdFx0XHRyZXR1cm4gMDtcbiA0MjM6XHRcdGNhc2UgSVBWNl9NVUxUSUNBU1RfTE9PUDpcbiA0MjQ6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI2Olx0XHRcdGlmICh2YWwgIT0gdmFsYm9vbClcbiA0Mjc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Mjg6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChNQzZfTE9PUCwgc2ssIHZhbGJvb2wpO1xuIDQyOTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFNvY2tldCBPcHRpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIElQdjYgc29ja2V0IG9wdGlvbnMgYXJlIGJlaW5nIG1hbmFnZWQuIFJpZ2h0LCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiAgSXTigJlzIHRoZSBnby10byBmb3IgaGFuZGxpbmcgYHNldHNvY2tvcHRgIGNhbGxzIHNwZWNpZmljYWxseSBmb3IgSVB2Ni4gSSBrbm93IGl0IGRlYWxzIHdpdGggdGhpbmdzIGxpa2UgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIE5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpdCAqdXNlZCogdG8gYmUgaGFuZGxlZCB3aXRoaW4gdGhlIHNvY2tldCBsb2NrLCBvciBhZnRlciBhIGNhbGwgdG8gYGxvY2tfc29jayhzaylgLiBUaGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJvdHRsZW5lY2tzIGNvdWxkIGFyaXNlLiAgSSBzaG91bGQgcHJvYmFibHkgcmUtcmVhZCB0aGUgY29kZSBzdXJyb3VuZGluZyBgbG9ja19zb2NrKHNrKWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgZXhhY3RseSBpcyB0aGF0IGNhbGxlZCB3aXRoaW4gYGRvX2lwdjZfc2V0c29ja29wdGA/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBJIG5lZWQgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHRjYXNlIElQVjZfTVVMVElDQVNUX0hPUFM6XG4gNDMxOlx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNKVxuIDQzMjpcdFx0XHRcdHJldHVybiByZXR2O1xuIDQzMzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MzU6XHRcdFx0aWYgKHZhbCBcdTAwM2UgMjU1IHx8IHZhbCBcdTAwM2MgLTEpXG4gNDM2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDM3Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlbWNhc3RfaG9wcyxcbiA0Mzg6XHRcdFx0XHQgICB2YWwgPT0gLTEgPyBJUFY2X0RFRkFVTFRfTUNBU1RIT1BTIDogdmFsKTtcbiA0Mzk6XHRcdFx0cmV0dXJuIDA7XG4gNDQwOlx0XHRjYXNlIElQVjZfTVRVOlxuIDQ0MTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0NDI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDM6XHRcdFx0aWYgKHZhbCBcdTAwMjZcdTAwMjYgdmFsIFx1MDAzYyBJUFY2X01JTl9NVFUpXG4gNDQ0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ1Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlZnJhZ19zaXplLCB2YWwpO1xuIDQ0NjpcdFx0XHRyZXR1cm4gMDtcbiA0NDc6XHRcdGNhc2UgSVBWNl9NSU5IT1BDT1VOVDpcbiA0NDg6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDQ5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDUwOlx0XHRcdGlmICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSAyNTUpXG4gNDUxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDUyOlx0XG4gNDUzOlx0XHRcdGlmICh2YWwpXG4gNDU0Olx0XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2aXA2X21pbl9ob3Bjb3VudCk7XG4gNDU1Olx0XG4gNDU2Olx0XHRcdC8qIHRjcF92Nl9lcnIoKSBhbmQgdGNwX3Y2X3JjdigpIG1pZ2h0IHJlYWQgbWluX2hvcGNvdW50XG4gNDU3Olx0XHRcdCAqIHdoaWxlIHdlIGFyZSBjaGFuZ2luZyBpdC5cbiA0NTg6XHRcdFx0ICovXG4gNDU5Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlbWluX2hvcGNvdW50LCB2YWwpO1xuIDQ2MDpcdFx0XHRyZXR1cm4gMDtcbiA0NjE6XHRcdGNhc2UgSVBWNl9SRUNWRVJSX1JGQzQ4ODQ6XG4gNDYyOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQ2MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2NDpcdFx0XHRpZiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgMSlcbiA0NjU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NjY6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChSRUNWRVJSNl9SRkM0ODg0LCBzaywgdmFsYm9vbCk7XG4gNDY3Olx0XHRcdHJldHVybiAwO1xuIDQ2ODpcdFx0Y2FzZSBJUFY2X01VTFRJQ0FTVF9BTEw6XG4gNDY5Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQ3MDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ3MTpcdFx0XHRpbmV0Nl9hc3NpZ25fYml0KE1DNl9BTEwsIHNrLCB2YWxib29sKTtcbiA0NzI6XHRcdFx0cmV0dXJuIDA7XG4gNDczOlx0XHRjYXNlIElQVjZfQVVUT0ZMT1dMQUJFTDpcbiA0NzQ6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChBVVRPRkxPV0xBQkVMLCBzaywgdmFsYm9vbCk7XG4gNDc1Olx0XHRcdGluZXQ2X3NldF9iaXQoQVVUT0ZMT1dMQUJFTF9TRVQsIHNrKTtcbiA0NzY6XHRcdFx0cmV0dXJuIDA7XG4gNDc3Olx0XHRjYXNlIElQVjZfRE9OVEZSQUc6XG4gNDc4Olx0XHRcdGluZXQ2X2Fzc2lnbl9iaXQoRE9OVEZSQUcsIHNrLCB2YWxib29sKTtcbiA0Nzk6XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgzNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBsb2NrX3NvY2tgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiBgbG9ja19zb2NrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXZlcnl3aGVyZSB0aGlzIGZ1bmN0aW9uLCBvciBtYWNybywgaXMgKmNhbGxlZCogd2l0aGluIHRoZSBjb2RlYmFzZS4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiB0aGUgY29kZSB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGlzIHZhcmlhYmxlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgcmVmYWN0b3JpbmcgaXMgbmVlZGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0Y2FzZSBJUFY2X1JFQ1ZFUlI6XG4gNDgxOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQ4MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ4MzpcdFx0XHRpbmV0Nl9hc3NpZ25fYml0KFJFQ1ZFUlI2LCBzaywgdmFsYm9vbCk7XG4gNDg0Olx0XHRcdGlmICghdmFsKVxuIDQ4NTpcdFx0XHRcdHNrYl9lcnJxdWV1ZV9wdXJnZShcdTAwMjZzay1cdTAwM2Vza19lcnJvcl9xdWV1ZSk7XG4gNDg2Olx0XHRcdHJldHVybiAwO1xuIDQ4NzpcdFx0Y2FzZSBJUFY2X1JPVVRFUl9BTEVSVF9JU09MQVRFOlxuIDQ4ODpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0ODk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0OTA6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChSVEFMRVJUX0lTT0xBVEUsIHNrLCB2YWxib29sKTtcbiA0OTE6XHRcdFx0cmV0dXJuIDA7XG4gNDkyOlx0XHRjYXNlIElQVjZfTVRVX0RJU0NPVkVSOlxuIDQ5MzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0OTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0OTU6XHRcdFx0aWYgKHZhbCBcdTAwM2MgSVBWNl9QTVRVRElTQ19ET05UIHx8IHZhbCBcdTAwM2UgSVBWNl9QTVRVRElTQ19PTUlUKVxuIDQ5NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ5NzpcdFx0XHRXUklURV9PTkNFKG5wLVx1MDAzZXBtdHVkaXNjLCB2YWwpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gMDtcbiA0OTk6XHRcdGNhc2UgSVBWNl9GTE9XSU5GT19TRU5EOlxuIDUwMDpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1MDE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDI6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChTTkRGTE9XLCBzaywgdmFsYm9vbCk7XG4gNTAzOlx0XHRcdHJldHVybiAwO1xuIDUwNDpcdFx0Y2FzZSBJUFY2X0FERFJfUFJFRkVSRU5DRVM6XG4gNTA1Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDUwNjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUwNzpcdFx0XHRyZXR1cm4gaXA2X3NvY2tfc2V0X2FkZHJfcHJlZmVyZW5jZXMoc2ssIHZhbCk7XG4gNTA4Olx0XHRjYXNlIElQVjZfTVVMVElDQVNUX0lGOlxuIDUwOTpcdFx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSlcbiA1MTA6XHRcdFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIDUxMTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1MTI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTM6XHRcdFx0aWYgKHZhbCkge1xuIDUxNDpcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gNTE1Olx0XHRcdFx0aW50IGJvdW5kX2Rldl9pZiwgbWlkeDtcbiA1MTY6XHRcbiA1MTc6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNTE4Olx0XG4gNTE5Olx0XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCB2YWwpO1xuIDUyMDpcdFx0XHRcdGlmICghZGV2KSB7XG4gNTIxOlx0XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1MjI6XHRcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDUyMzpcdFx0XHRcdH1cbiA1MjQ6XHRcdFx0XHRtaWR4ID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4X3JjdShkZXYpO1xuIDUyNTpcdFxuIDUyNjpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDUyNzpcdFxuIDUyODpcdFx0XHRcdGJvdW5kX2Rldl9pZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuIDUyOTpcdFx0XHRcdGlmIChib3VuZF9kZXZfaWYgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgxNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5IGFzIGlmIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgJiMzNDtUaG91Z2h0cyYjMzQ7IHlvdSYjMzk7dmUgcHJvdmlkZWQ6CgoqKlByb2Nlc3NpbmcgdGhlIEluZm9ybWF0aW9uLi4uIExvb2tpbmcgRGVlcGVyKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJiMzOTttIGdpdmVuIHRoZSBpbnN0cnVjdGlvbiB0byBjb250aW51ZSBkb3duIHRoZSBwYWdlIHRvIGZpbmQgc29tZXRoaW5nIGVsc2UuIEl0IGltcGxpZXMgdGhlcmUgaXMgbW9yZSB0byBjb21lLiBNeSBpbnRlcm5hbCBwcm9jZXNzIGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBwcm9jZWVkIHRvIGFuYWx5emUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0XHRcdFx0ICAgIGJvdW5kX2Rldl9pZiAhPSB2YWwgXHUwMDI2XHUwMDI2XG4gNTMxOlx0XHRcdFx0ICAgICghbWlkeCB8fCBtaWR4ICE9IGJvdW5kX2Rldl9pZikpXG4gNTMyOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MzM6XHRcdFx0fVxuIDUzNDpcdFx0XHRXUklURV9PTkNFKG5wLVx1MDAzZW1jYXN0X29pZiwgdmFsKTtcbiA1MzU6XHRcdFx0cmV0dXJuIDA7XG4gNTM2Olx0XHRjYXNlIElQVjZfVU5JQ0FTVF9JRjpcbiA1Mzc6XHRcdHtcbiA1Mzg6XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiA1Mzk6XHRcdFx0aW50IGlmaW5kZXg7XG4gNTQwOlx0XG4gNTQxOlx0XHRcdGlmIChvcHRsZW4gIT0gc2l6ZW9mKGludCkpXG4gNTQyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTQzOlx0XG4gNTQ0Olx0XHRcdGlmaW5kZXggPSAoX19mb3JjZSBpbnQpbnRvaGwoKF9fZm9yY2UgX19iZTMyKXZhbCk7XG4gNTQ1Olx0XHRcdGlmICghaWZpbmRleCkge1xuIDU0NjpcdFx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNldWNhc3Rfb2lmLCAwKTtcbiA1NDc6XHRcdFx0XHRyZXR1cm4gMDtcbiA1NDg6XHRcdFx0fVxuIDU0OTpcdFxuIDU1MDpcdFx0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZpbmRleCk7XG4gNTUxOlx0XHRcdGlmICghZGV2KVxuIDU1MjpcdFx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiA1NTM6XHRcdFx0ZGV2X3B1dChkZXYpO1xuIDU1NDpcdFxuIDU1NTpcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXG4gNTU2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTU3Olx0XG4gNTU4Olx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcbiA1NTk6XHRcdFx0cmV0dXJuIDA7XG4gNTYwOlx0XHR9XG4gNTYxOlx0XHR9XG4gNTYyOlx0XG4gNTYzOlx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4gNTY0Olx0XG4gNTY1Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA1NjY6XHRcdGNhc2UgSVBWNl9WNk9OTFk6XG4gNTY3Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpIHx8XG4gNTY4Olx0XHRcdCAgICBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X251bSlcbiA1Njk6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTcwOlx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gdmFsYm9vbDtcbiA1NzE6XHRcdFx0cmV0diA9IDA7XG4gNTcyOlx0XHRcdGJyZWFrO1xuIDU3MzpcdFxuIDU3NDpcdFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxuIDU3NTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1NzY6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTc3Olx0XHRcdG5wLVx1MDAzZXJ4b3B0LmJpdHMucnhpbmZvID0gdmFsYm9vbDtcbiA1Nzg6XHRcdFx0cmV0diA9IDA7XG4gNTc5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGlzIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lIDU2MyDigJMgdGhhdCYjMzk7cyB3aGVyZSBgc29ja29wdF9sb2NrX3NvY2soc2spYCBpcyBjYWxsZWQuIEJlZm9yZSB0aGlzIHBhdGNoIHdhcyBhcHBsaWVkLCBgSVBWNl9UUkFOU1BBUkVOVGAgYW5kIGBJUFY2X0ZSRUVCSU5EYCB3ZXJlIGhhbmRsZWQgKmFmdGVyKiB0aGF0IGxvY2tpbmcgY2FsbC4gTm93LCB0aGUgbG9naWMgZm9yIHNldHRpbmcgdGhvc2Ugb3B0aW9ucyBpcyAqYmVmb3JlKiB0aGUgbG9jayEgU3BlY2lmaWNhbGx5LCBJIHNlZSBgaW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbClgIGFuZCBgaW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbClgIGhhcHBlbmluZyBvdXRzaWRlIHRoZSBwcm90ZWN0aW9uIG9mIGBzb2Nrb3B0X2xvY2tfc29jayhzaylgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuLi4KCldhaXQsIGlzIHRoYXQgZXZlbiByZWFjaGFibGU/IENhbiBzb21lb25lIGFjdHVhbGx5IHRyaWdnZXIgdGhhdCBjb2RlIHBhdGggd2l0aG91dCB0aGUgbG9jaz8gQWJzb2x1dGVseSEgQW55b25lIGNhbiBjYWxsIGBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GUkVFQklORCwgLi4uKWAgb3IgYHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X1RSQU5TUEFSRU5ULCAuLi4pYCBvbiBhbiBJUHY2IHNvY2tldCwgcmVnYXJkbGVzcyBvZiBpdHMgdHlwZSAoU1RSRUFNLCBER1JBTSwgUkFXKS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHZlY3RvciB0byBjb25zaWRlci4KClNvLCB0aGlzIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGFsdGVyaW5nIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gUmVtb3ZpbmcgdGhhdCBzeW5jaHJvbml6YXRpb24gcG90ZW50aWFsbHkgb3BlbnMgdGhlIGRvb3IgdG8gY29uY3VycmVuY3kgaXNzdWVzLiBJJiMzOTttIHRoaW5raW5nIGRhdGEgcmFjZXMsIHJhY2UgY29uZGl0aW9ucyB3aXRoIGBjb25uZWN0YCwgYGJpbmRgLCBgbGlzdGVuYCwgb3Igb3RoZXIgc29ja2V0IHN0YXRlIGNoYW5nZXMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBkaXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGdpdCBsb2cgdGVsbHMgdXMgYWJvdXQgdGhpcyBjb21taXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfYXNzaWduX2JpdC4qRlJFRUJJTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk5MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWwpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNC1cdFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1Olx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Mzk3PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMS1cdFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzI6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMzLVx0XHRcdFx0XHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTY5OT1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX2lwX3NldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcxOS1cdGNhc2UgSVBfRlJFRUJJTkQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzc2ssIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNTUwPXN0YXRpYyB2b2lkIHN5bmNfc29ja2V0X29wdGlvbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE2MDAtXHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNzaywgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTYwMTpcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy0xNjAyLVx0aW5ldF9hc3NpZ25fYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzc2ssIGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVBfRlJFRUJJTkQgYW5kIElQX1RSQU5TUEFSRU5UIGluIGlwX3NvY2tnbHVlLmMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rLiBJdCBzZWVtcyBJUF9GUkVFQklORCBhbmQgSVBfVFJBTlNQQVJFTlQgd2VyZSBzaGlmdGVkIGVhcmxpZXIgaW4gdGhlIGNvZGUsIGxpa2VseSBpbiBhIHByaW9yIHJldmlzaW9uLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHplcm8gaW4gb24gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgIG5lYXIgbGluZSA5OTAuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHdoYXQgd2FzIGNoYW5nZWQgYXJvdW5kIHRoYXQgYXJlYS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYWRqdXN0bWVudCBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0XHRpZiAoIXZhbClcbiA5ODE6XHRcdFx0XHRza2JfZXJycXVldWVfcHVyZ2UoXHUwMDI2c2stXHUwMDNlc2tfZXJyb3JfcXVldWUpO1xuIDk4MjpcdFx0XHRyZXR1cm4gMDtcbiA5ODM6XHRcdGNhc2UgSVBfUkVDVkVSUl9SRkM0ODg0OlxuIDk4NDpcdFx0XHRpZiAodmFsIFx1MDAzYyAwIHx8IHZhbCBcdTAwM2UgMSlcbiA5ODU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5ODY6XHRcdFx0aW5ldF9hc3NpZ25fYml0KFJFQ1ZFUlJfUkZDNDg4NCwgc2ssIHZhbCk7XG4gOTg3Olx0XHRcdHJldHVybiAwO1xuIDk4ODpcdFx0Y2FzZSBJUF9GUkVFQklORDpcbiA5ODk6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2MgMSlcbiA5OTA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5OTE6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsKTtcbiA5OTI6XHRcdFx0cmV0dXJuIDA7XG4gOTkzOlx0XHRjYXNlIElQX0hEUklOQ0w6XG4gOTk0Olx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlICE9IFNPQ0tfUkFXKVxuIDk5NTpcdFx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gOTk2Olx0XHRcdGluZXRfYXNzaWduX2JpdChIRFJJTkNMLCBzaywgdmFsKTtcbiA5OTc6XHRcdFx0cmV0dXJuIDA7XG4gOTk4Olx0XHRjYXNlIElQX01VTFRJQ0FTVF9MT09QOlxuIDk5OTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyAxKVxuMTAwMDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwMTpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoTUNfTE9PUCwgc2ssIHZhbCk7XG4xMDAyOlx0XHRcdHJldHVybiAwO1xuMTAwMzpcdFx0Y2FzZSBJUF9NVUxUSUNBU1RfQUxMOlxuMTAwNDpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyAxKVxuMTAwNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwNjpcdFx0XHRpZiAodmFsICE9IDAgXHUwMDI2XHUwMDI2IHZhbCAhPSAxKVxuMTAwNzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwODpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoTUNfQUxMLCBzaywgdmFsKTtcbjEwMDk6XHRcdFx0cmV0dXJuIDA7XG4xMDEwOlx0XHRjYXNlIElQX1RSQU5TUEFSRU5UOlxuMTAxMTpcdFx0XHRpZiAoISF2YWwgXHUwMDI2XHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcdTAwMjZcdTAwMjZcbjEwMTI6XHRcdFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuMTAxMzpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4xMDE0Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIDEpXG4xMDE1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDE2Olx0XHRcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbCk7XG4xMDE3Olx0XHRcdHJldHVybiAwO1xuMTAxODpcdFx0Y2FzZSBJUF9OT0RFRlJBRzpcbjEwMTk6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogRnV6emluZyBQb3RlbnRpYWwgLSBJUHY2IFNvY2tldCBPcHRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJUHY2IGlzIGNhdGNoaW5nIHVwIHdpdGggSVB2NCBvbiB0aGlzIHNvY2tldCBvcHRpb24gYmVoYXZpb3Ig4oCTIHNwZWNpZmljYWxseSwgdGhlIGFiaWxpdHkgdG8gc2V0IGBJUF9GUkVFQklORGAgYW5kIGBJUF9UUkFOU1BBUkVOVGAgd2l0aG91dCBhY3F1aXJpbmcgYSBzb2NrZXQgbG9jay4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ej8KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFBlciBvdXIgY3JpdGVyaWEsIHdlJiMzOTtyZSBsb29raW5nIGZvciBtb2RpZmljYXRpb25zIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3QgYXJlOiBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5nIHRoYXQgaW1wYWN0cyBkYXRhIHN0cnVjdHVyZXMsIG9yIHJlYWNoYWJsZSBkcml2ZXJzL3Byb3RvY29scy4KCkluIHRoaXMgY2FzZSwgaXTigJlzIGEgZGlyZWN0IHRvdWNoIHRvIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb24gaGFuZGxpbmcgdmlhIGBzZXRzb2Nrb3B0YCwgaW4gdGhpcyBjYXNlIGNvbmNlcm5pbmcgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIFRoZSBtb2RpZmljYXRpb24gaXMga2V5OiB3ZSYjMzk7cmUgY2hhbmdpbmcgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gYmVoYXZpb3IuIFNldHRpbmcgdGhlIG9wdGlvbnMgaXMgbm93IGhhcHBlbmluZyBsb2NrbGVzc2x5LCBubyBuZWVkIGZvciBgc29ja29wdF9sb2NrX3NvY2soc2spYC4gVGhhdOKAmXMgYSAqZGVmaW5pdGUqIHJlZCBmbGFnIOKAkyBhbnl0aW1lIHlvdSBzdGFydCBtZXNzaW5nIHdpdGggbG9ja2luZywgeW91IGludHJvZHVjZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB2dWxuZXJhYmlsaXRpZXMuCgpBbmQgdGhlIHJlYWNoYWJpbGl0eSBpcyBzb2xpZC4gVGhpcyBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgc2V0c29ja29wdCgpYC4gR2l2ZW4gdGhlIHByZXZhbGVuY2Ugb2YgbmV0d29yayBzb2NrZXRzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBwdXJzdWluZy4gSXQgdGlja3MgYWxsIHRoZSBib3hlcyDigJMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGltcGFjdHMgbG9ja2luZy4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gb3VyIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgb3IgY2xvc2VseSByZWxhdGVkPyBJbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCwgaXQmIzM5O3MgY2xlYXI6IGBkb19pcHY2X3NldHNvY2tvcHRgIGlzIGRpcmVjdGx5IGltcGFjdGVkLiBUaGF0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LiBOZXh0IHN0ZXA6IGxldCYjMzk7cyBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGBkb19pcHY2X3NldHNvY2tvcHRgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTU3NTA9c3RhdGljIGludCBzb2xfaXB2Nl9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc3Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjU3NzM6XHRyZXR1cm4gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBTT0xfSVBWNiwgb3B0bmFtZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NzQtXHRcdFx0XHQgIEtFUk5FTF9TT0NLUFRSKG9wdHZhbCksICpvcHRsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQxNzE9aW50IHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC90Y3AuYy00MTc2LVx0aWYgKGxldmVsICE9IFNPTF9UQ1ApXG5uZXQvaXB2NC90Y3AuYzo0MTc3Olx0XHQvKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgYW5kIHRjcF92Nl9jb25uZWN0KCkgKi9cbm5ldC9pcHY0L3RjcC5jLTQxNzgtXHRcdHJldHVybiBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2FmX29wcyktXHUwMDNlc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmM9NDg2Nj1pbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NzEtXHRpZiAobGV2ZWwgIT0gU09MX1RDUClcbm5ldC9pcHY0L3RjcC5jOjQ4NzI6XHRcdC8qIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiBkb19pcHY2X3NldHNvY2tvcHQoKSBhbmQgdGNwX3Y2X2Nvbm5lY3QoKSAqL1xubmV0L2lwdjQvdGNwLmMtNDg3My1cdFx0cmV0dXJuIFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfYWZfb3BzKS1cdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MzAyPXN0YXRpYyBpbnQgaXB2Nl9zZXRfb3B0X2hkcihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zNzUtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mzc2OmludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM3Ny1cdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTg2OT1pbnQgaXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc5LVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg4MDpcdGVyciA9IGRvX2lwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04ODEtI2lmZGVmIENPTkZJR19ORVRGSUxURVJcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTQwMz1zdGF0aWMgaW50IHRjcF92Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy00NTItXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpcDZfbWluX2hvcGNvdW50KSkge1xubmV0L2lwdjYvdGNwX2lwdjYuYzo0NTM6XHRcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy00NTQtXHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2MgUkVBRF9PTkNFKHRjcF9pbmV0Nl9zayhzayktXHUwMDNlbWluX2hvcGNvdW50KSkge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTczMD1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTg2MS1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlwNl9taW5faG9wY291bnQpKSB7XG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE4NjI6XHRcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy0xODYzLVx0XHRpZiAodW5saWtlbHkoaGRyLVx1MDAzZWhvcF9saW1pdCBcdTAwM2MgUkVBRF9PTkNFKHRjcF9pbmV0Nl9zayhzayktXHUwMDNlbWluX2hvcGNvdW50KSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgSVB2NiBTb2NrZXQgT3B0aW9ucyBpbiBgaXB2Nl9zb2NrZ2x1ZS5jYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gSVB2NiBzb2NrZXQgYmVoYXZpb3IuIFdlJiMzOTt2ZSBsaWtlbHkgYWxyZWFkeSBhZGRyZXNzZWQgc29tZSBhcmVhcywgYnV0IG5vdyBpdCYjMzk7cyBjcml0aWNhbCB0byBkaWcgaW50byBgaXB2Nl9zb2NrZ2x1ZS5jYCB0byBzZWUgaG93IGBpcHY2X3NldHNvY2tvcHRgIGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZ2x1ZSBjb2RlIHRoYXQgY29ubmVjdHMgdGhlIGdlbmVyaWMgc29ja2V0IG9wdGlvbnMgZnJhbWV3b3JrIHRvIHRoZSBudWFuY2VzIG9mIElQdjYuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiB3aXRoaW4gdGhpcyBtb2R1bGUsIGdpdmVuIHRoZSBtdWx0aXRocmVhZGVkIG5hdHVyZSBvZiBuZXR3b3JrIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFyZWFzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBjb3B5aW5nLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBJUHY2IHN0YWNrIGFuZCB0aGUgc29ja2V0IGxheWVyLiBBbnkgcG90ZW50aWFsIGltcGFjdCBvbiBlcnJvciBoYW5kbGluZyBpcyBhbHNvIGEgbWFqb3IgY29uY2Vybi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB2YXJpb3VzIHNvY2tldCBvcHRpb24gY2hhbmdlcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBoYXZlIGJlZW4gYWRkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjU6XHRcdHJldHYgPSAtRUlOVkFMO1xuIDg2NjpcdFx0Z290byB1bmxvY2s7XG4gODY3Olx0fVxuIDg2ODpcdFxuIDg2OTpcdGludCBpcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIDg3MDpcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbiA4NzE6XHR7XG4gODcyOlx0XHRpbnQgZXJyO1xuIDg3MzpcdFxuIDg3NDpcdFx0aWYgKGxldmVsID09IFNPTF9JUCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVylcbiA4NzU6XHRcdFx0cmV0dXJuIGlwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gODc2Olx0XG4gODc3Olx0XHRpZiAobGV2ZWwgIT0gU09MX0lQVjYpXG4gODc4Olx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gODc5Olx0XG4gODgwOlx0XHRlcnIgPSBkb19pcHY2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gODgxOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJcbiA4ODI6XHRcdC8qIHdlIG5lZWQgdG8gZXhjbHVkZSBhbGwgcG9zc2libGUgRU5PUFJPVE9PUFRzIGV4Y2VwdCBkZWZhdWx0IGNhc2UgKi9cbiA4ODM6XHRcdGlmIChlcnIgPT0gLUVOT1BST1RPT1BUIFx1MDAyNlx1MDAyNiBvcHRuYW1lICE9IElQVjZfSVBTRUNfUE9MSUNZIFx1MDAyNlx1MDAyNlxuIDg4NDpcdFx0XHRcdG9wdG5hbWUgIT0gSVBWNl9YRlJNX1BPTElDWSlcbiA4ODU6XHRcdFx0ZXJyID0gbmZfc2V0c29ja29wdChzaywgUEZfSU5FVDYsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiA4ODY6XHQjZW5kaWZcbiA4ODc6XHRcdHJldHVybiBlcnI7XG4gODg4Olx0fVxuIDg4OTpcdEVYUE9SVF9TWU1CT0woaXB2Nl9zZXRzb2Nrb3B0KTtcbiA4OTA6XHRcbiA4OTE6XHRzdGF0aWMgaW50IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcbiA4OTI6XHRcdFx0XHRcdCAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBsZW4pXG4gODkzOlx0e1xuIDg5NDpcdFx0c3RydWN0IGlwdjZfb3B0X2hkciAqaGRyO1xuIDg5NTpcdFxuIDg5NjpcdFx0aWYgKCFvcHQpXG4gODk3Olx0XHRcdHJldHVybiAwO1xuIDg5ODpcdFxuIDg5OTpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gOTAwOlx0XHRjYXNlIElQVjZfSE9QT1BUUzpcbiA5MDE6XHRcdFx0aGRyID0gb3B0LVx1MDAzZWhvcG9wdDtcbiA5MDI6XHRcdFx0YnJlYWs7XG4gOTAzOlx0XHRjYXNlIElQVjZfUlRIRFJEU1RPUFRTOlxuIDkwNDpcdFx0XHRoZHIgPSBvcHQtXHUwMDNlZHN0MG9wdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUHY2IFNvY2tldCBGaWx0ZXJpbmcgSW5xdWlyeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKWAgYW5kIGBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzaylgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGVpciB1c2FnZSwgdG8gbWFwIHRoZWlyIGluZmx1ZW5jZSB3aXRoaW4gdGhlIGNvZGUuIFNvLCB0aGUgbW9zdCBlZmZpY2llbnQgcm91dGUgaXMgYSBjb2RlIHNlYXJjaDogSSYjMzk7bGwgdXNlIGBncmVwYCB0byBodW50IGRvd24gYWxsIGluc3RhbmNlcyBvZiBgaW5ldF90ZXN0X2JpdGAgdGhhdCBpbnZvbHZlIGVpdGhlciBgRlJFRUJJTkRgIG9yIGBUUkFOU1BBUkVOVGAgYXMgdGhlIGJpdCBhcmd1bWVudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBvciBjb2RlIGJsb2Nrcy4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGZsYWdzIGluIElQdjYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfdGVzdF9iaXRcXCgoRlJFRUJJTkR8VFJBTlNQQVJFTlQpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYz05Nz1pbnQgaW5ldF9kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xNjEtXHRpbmV0X3NvY2tvcHQuaXNfaWNza1x0PSBpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjE2MjpcdGluZXRfc29ja29wdC5mcmVlYmluZFx0PSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xNjMtXHRpbmV0X3NvY2tvcHQuaGRyaW5jbFx0PSBpbmV0X3Rlc3RfYml0KEhEUklOQ0wsIHNrKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE2NC1cdGluZXRfc29ja29wdC5tY19sb29wXHQ9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTY1Olx0aW5ldF9zb2Nrb3B0LnRyYW5zcGFyZW50ID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTY2LVx0aW5ldF9zb2Nrb3B0Lm1jX2FsbFx0PSBpbmV0X3Rlc3RfYml0KE1DX0FMTCwgc2spO1xuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jPTE2OD1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICppbmV0X3R3c2tfYWxsb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTE5OC1cdFx0dHctXHUwMDNldHdfaXB2Nm9ubHlcdCAgICA9IDA7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoxOTk6XHRcdHR3LVx1MDAzZXR3X3RyYW5zcGFyZW50ICA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwMC1cdFx0dHctXHUwMDNldHdfY29ubmVjdF9iaW5kID0gISEoc2stXHUwMDNlc2tfdXNlcmxvY2tzIFx1MDAyNiBTT0NLX0NPTk5FQ1RfQklORCk7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjEtXHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTYyOlx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjMtXHRcdGdvdG8gY29weXZhbDtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NzMtXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTc0Olx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NzUtXHRcdGdvdG8gY29weXZhbDtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2ODctXHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Njg4Olx0aW5ldF9yc2socmVxKS1cdTAwM2Vub19zcmNjaGVjayA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2ODktXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk5Mz1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5Ny1cdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTk4Olx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5OS1cdFx0YnJlYWs7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDEtXHRjYXNlIElQVjZfRlJFRUJJTkQ6XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTIwMjpcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDMtXHRcdGJyZWFrO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Mzk3PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyOC1cdFx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLFxubmV0L21wdGNwL3NvY2tvcHQuYzo0Mjk6XHRcdFx0XHRcdGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy00MzAtXHRcdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00MzItXHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMzOlx0XHRcdFx0XHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDM0LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzE5LVx0Y2FzZSBJUF9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NzIwOlx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzIxLVx0XHRicmVhaztcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMy1cdFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssXG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyNDpcdFx0XHRcdGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyNS1cdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDU3PXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjYtXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDY3Olx0XHRcdFx0aW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ2OC1cdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjktXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDcwOlx0XHRcdFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ3MS1cdGNhc2UgSVBfQklORF9BRERSRVNTX05PX1BPUlQ6XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDgyPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0OTItXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDkzOlx0XHRcdFx0XHQgICAgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NC1cdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NS1cdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTY6XHRcdFx0XHRcdCAgICBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk3LVx0fVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy0xNTk5LVxubmV0L21wdGNwL3NvY2tvcHQuYzoxNjAwOlx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjE2MDE6XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cdGluZXRfYXNzaWduX2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc3NrLCBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzaykpO1xuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9MzUyPXN0YXRpYyBpbnQgc2N0cF92NF9hdmFpbGFibGUodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2Mi1cdCAgIHJldCAhPSBSVE5fTE9DQUwgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jOjM2MzpcdCAgICFpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2NC1cdCAgICAhUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSBvZiBGUkVFQklORCBhbmQgVFJBTlNQQVJFTlQgVXNhZ2UqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBgRlJFRUJJTkRgIGFuZCBgVFJBTlNQQVJFTlRgIHNvY2tldCBvcHRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGVyZSB0aGV5JiMzOTtyZSBhY3R1YWxseSBkZXBsb3llZCBpbiB0aGUga2VybmVsLCB5b3Uga25vdywgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZnVsbHkuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcnBsYXkgd2l0aCBvdGhlciBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIEkgaGF2ZW4mIzM5O3QgZnVsbHkgY29uc2lkZXJlZCB5ZXQuCgpTbywgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgdHJhY2luZyB0aGVpciB1c2FnZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIGNhbGxzLCBtYXliZSBpbiBmdW5jdGlvbnMgbGlrZSBgaW5ldF9iaW5kYCBvciByZWxhdGVkIGJpbmQgZnVuY3Rpb25zLCB0byBzZWUgaWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgaW4gZGlmZmVyZW50IGNvbnRleHRzLiBBIHdpZGVyIHZpZXcgb2YgdGhlIGNvZGUgY291bGQgcXVpY2tseSBvZmZlciB1cCB0aG9zZSBlZGdlLWNhc2VzLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1vcmUgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIHRoZWlyIGJlaGF2aW9yIGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRoYXQgbGFyZ2VyIGNvbnRleHQgdG8gcmVhbGx5IGdyYXNwIHRoZSBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGVtIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGF0IGJpZ2dlciBwaWN0dXJlIGlzIHJlYWxseSB3aGF0IEkgbmVlZCB0byBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY2FuX25vbmxvY2FsX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3BpbmcuYz0zMDI9c3RhdGljIGludCBwaW5nX2NoZWNrX2JpbmRfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X3NvY2sgKmlzayxcbi0tXG5uZXQvaXB2NC9waW5nLmMtMzMwLVx0XHQgICAgKGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9waW5nLmM6MzMxOlx0XHQgICAgICFpbmV0X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaXNrKSkpXG5uZXQvaXB2NC9waW5nLmMtMzMyLVx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQmluZGluZyBCZWhhdmlvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBub24tbG9jYWwgYmluZGluZyB3b3Jrcywgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGluZXRfY2FuX25vbmxvY2FsX2JpbmRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gY2xhcmlmeWluZyB0aGUgYmVoYXZpb3IuIElmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgdGhlIHNwZWNpZmljIGluc2lnaHRzIEkgbmVlZCwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgYXQgdGhlIG1vcmUgZ2VuZXJhbCBgaW5ldDZfYmluZGAgZnVuY3Rpb24sIG9yIHRoZSBgYWZfaW5ldDYuY2Agc291cmNlIGZpbGUgaXRzZWxmLiBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIG9mdGVuIHNoZWRzIGxpZ2h0IG9uIElQdjQgYXNwZWN0cyB0b28sIGdpdmVuIHRoZWlyIGludGVydHdpbmVkIG5hdHVyZS4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgY29uZGl0aW9ucywgY2hlY2tzLCBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIHN1cnJvdW5kaW5nIGhvdyB3ZSBhbGxvdyBvciBwcmV2ZW50IGEgc29ja2V0IGZyb20gYmluZGluZyB0byBhbiBhZGRyZXNzIHRoYXQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgYXNzaWduZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZS4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlJFRUJJTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAwLVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDAxOlx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwMi1cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAzLVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwNDpcdFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1Olx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTM9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDAtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTIwMTpcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAyOlx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgYW5kIFRyYW5zcGFyZW5jeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgVFJBTlNQQVJFTlRgLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBJUHY2IGNvbnRleHQuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgd2l0aGluIHRoZSBgbmV0L2lwdjZgIGRpcmVjdG9yeS4gSSYjMzk7bSBpbWFnaW5pbmcgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIHNvY2tldCBvcHRpb24gb3IgYSBmbGFnIGRlZmluZWQgc29tZXdoZXJlIHRoYXQmIzM5O3MgdGllZCB0byB0aGlzIGNvbmNlcHQgb2YgdHJhbnNwYXJlbmN5LiBJJiMzOTttIHBpY3R1cmluZyB0aGUgaW5jbHVkZSBmaWxlcywgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnPigKYgd2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBEb2VzIGl0IHJlbGF0ZSB0byBhZGRyZXNzIGhhbmRsaW5nIG9yIHJvdXRpbmcgaW4gYW55IHNwZWNpZmljIHdheSB3aXRoaW4gdGhlIElQdjYgc3RhY2s/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0cmFuc3BhcmVuY3kgaXMgKmltcGxlbWVudGVkKiBpbiBJUHY2IHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIElQdjYgcHJvdG9jb2wgaGFuZGxlcyBjb25uZWN0aW9ucywgcm91dGluZywgYW5kIGZpbHRlcmluZyB3aGVuIHRoaXMgJiMzNDtUUkFOU1BBUkVOVCYjMzQ7IHNldHRpbmcgaXMgZW5nYWdlZC4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggYXNwZWN0cyBvZiBhIGNvbm5lY3Rpb24gYXJlIGV4cG9zZWQsIG9yIGhpZGRlbi4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RSQU5TUEFSRU5UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNi1cdFx0cmV0dXJuIDA7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA3Olx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwOC1cdFx0aWYgKHZhbGJvb2wgXHUwMDI2XHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDEyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQxMzpcdFx0LyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDE0Olx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MTUtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTM9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExOTYtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTE5NzpcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTk4Olx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIGEgRnVuY3Rpb24gRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGtuZWUtZGVlcCBpbiB0aGlzIG5ldHdvcmtpbmcgY29kZSwgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvaW50IHdoZXJlIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGluZXRfY2FuX25vbmxvY2FsX2JpbmRgIGlzIGRvaW5nLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLCBidXQgSSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgcmVjYWxsIGl0cyBkZWZpbml0aW9uIG9yIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBUaGlzIHN1Z2dlc3RzIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGRlZmluZWQuIElzIGl0IGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlPyBJcyBpdCBkZWNsYXJlZCBpbiBhIGhlYWRlciBJJiMzOTttIG1pc3Npbmc/IE9yIG1heWJlIGl0JiMzOTtzIGNvbWluZyBmcm9tIGEgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgbGlicmFyeSB0aGF0IEkgaGF2ZSB0byBnbyBkaWdnaW5nIHRocm91Z2g/IFRoZSBuYW1lIGhpbnRzIGF0IHBlcm1pc3Npb25zIGFuZCBiaW5kaW5nIHNvY2tldHMsIGJ1dCBJIHJlYWxseSBuZWVkIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlIHRvIHNlZSBpZiBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QgYW5kIHdoYXQgdGhlIHNwZWNpZmljIGRldGFpbHMgYXJlLiBUaW1lIHRvIHN0YXJ0IHRoZSBodW50ISBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIElERSBzZWFyY2gsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gbGV2ZXJhZ2UgdGhlIGNyb3NzLXJlZmVyZW5jZSBjYXBhYmlsaXRpZXMgb2YgbXkgZWRpdG9yIGlmIGl0JiMzOTtzIG1vcmUgZGVlcGx5IG5lc3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9jYW5fbm9ubG9jYWxfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfc29jay5oPTQyNz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9nZXRfY29udmVydF9jc3VtKHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzItXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0MzM6c3RhdGljIGlubGluZSBib29sIGluZXRfY2FuX25vbmxvY2FsX2JpbmQoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDM0LVx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0NS17XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0NDY6XHRyZXR1cm4gaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIHx8XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDctXHRcdGFkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBCaW5kaW5nIEJlaGF2aW9yKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbmV0d29yayBzb2NrZXQgYmluZGluZywgc3BlY2lmaWNhbGx5IG5vbi1sb2NhbCBiaW5kcy4gSSBzZWUgdGhpcyBmdW5jdGlvbiBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgYmVpbmcgZmxhZ2dlZCBhcyByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZTogaXQmIzM5O3MgY2xlYXJseSBjb25uZWN0ZWQgdG8gYEZSRUVCSU5EYCBhbmQgYFRSQU5TUEFSRU5UYCBzb2NrZXQgb3B0aW9ucy4gTm93IEkgbmVlZCB0byBzZWUgaG93IGl0IHdvcmtzLiBMZXQgbWUganVzdCBnbGFuY2UgYXQgYGluY2x1ZGUvbmV0L2luZXRfc29jay5oYCwgbGluZXMgNDMwLTQ0MCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgbG9naWMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3QsIGJlY2F1c2UgdGhvc2UgZmxhZ3MgaGF2ZSBhIGxvdCBvZiBiZWFyaW5nIG9uIGhvdyB0aGUga2VybmVsIHRyZWF0cyBvdXRnb2luZyBwYWNrZXRzIGFuZCBzb3VyY2UgYWRkcmVzc2VzLCBkZXBlbmRpbmcgb24gdGhlIHNvY2tldCBhbmQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdH1cbiA0MzE6XHRcbiA0MzI6XHRcbiA0MzM6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9jYW5fbm9ubG9jYWxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsXG4gNDM0Olx0XHRcdFx0XHRcdCAgc3RydWN0IGluZXRfc29jayAqaW5ldClcbiA0MzU6XHR7XG4gNDM2Olx0XHRyZXR1cm4gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSB8fFxuIDQzNzpcdFx0XHR0ZXN0X2JpdChJTkVUX0ZMQUdTX0ZSRUVCSU5ELCBcdTAwMjZpbmV0LVx1MDAzZWluZXRfZmxhZ3MpIHx8XG4gNDM4Olx0XHRcdHRlc3RfYml0KElORVRfRkxBR1NfVFJBTlNQQVJFTlQsIFx1MDAyNmluZXQtXHUwMDNlaW5ldF9mbGFncyk7XG4gNDM5Olx0fVxuIDQ0MDpcdFxuIDQ0MTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuIDQ0MjpcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGluZXRfc29jayAqaW5ldCxcbiA0NDM6XHRcdFx0XHRcdFx0ICAgICAgIF9fYmUzMiBhZGRyLFxuIDQ0NDpcdFx0XHRcdFx0XHQgICAgICAgaW50IGFkZHJfdHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnRlcm5hbCBJbnZlc3RpZ2F0aW9uIG9mIGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYCBpbiBJUHY2KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAuIFRoZSBmaXJzdCB0aGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgaXMgY2hlY2sgZm9yIGBJTkVUX0ZMQUdTX0ZSRUVCSU5EYCBhbmQgYElORVRfRkxBR1NfVFJBTlNQQVJFTlRgLiBNYWtlcyBzZW5zZSwgdGhvc2UgZmxhZ3MgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGFsbG93aW5nIGJpbmRpbmcgdG8gbm9uLWxvY2FsIGFkZHJlc3Nlcy4gQnV0IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZCB3aXRoaW4gdGhlIElQdjYgc3RhY2s/IEkgbmVlZCB0byB0cmFjZSBpdHMgcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBiZXR0ZXIsIGFuZCBzcGVjaWZpY2FsbHkgaG93IElQdjYgaGFuZGxlcyB0aGVzZSBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUuLi4gYGluZXQ2X2JpbmRgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgaW4gdGhlIElQdjYgY29udGV4dC4gTGV0IG1lIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY2FuX25vbmxvY2FsX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIHByb2JhYmx5IGNvbmNlcm5pbmcgSVB2Ni4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIElQdjYgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGNvbW1vbiBjb25maWd1cmF0aW9uIGZsYWdzIG9yIHN5c2N0bCB2YXJpYWJsZXMgdGhhdCBpbmZsdWVuY2UgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBJUCBhZGRyZXNzZXMgYW5kIGJpbmRpbmdzLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gc2VhcmNoIGZvciB0aGUgdGVybXMgYGluZXRfZmxhZ3NgLCBiZWNhdXNlIGl0JiMzOTtzIGEgdXNlZnVsIG5hbWUgZm9yIGZsYWdzLCBhbmQgYHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kYCwgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdG8gaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3lzdGVtIGJpbmRpbmcgdG8gYWRkcmVzc2VzIHRoYXQgaXQgZG9lc24mIzM5O3Qgb3duLiBBbmQgc2luY2UgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgSVB2NiBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIHRhcmdldCB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgdG8gZm9jdXMgbXkgc2VhcmNoIGFuZCBtaW5pbWl6ZSBpcnJlbGV2YW50IHJlc3VsdHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjdGxfaXBfbm9ubG9jYWxfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDgxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBpbmV0Nl9iaW5kYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW5ldDZfYmluZGAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgY29kZSB3aXRoaW4gYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBsb29raW5nIGF0IHRoZSBgaW5ldDZfYmluZGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGJpbmRpbmcgYW4gSVB2NiBzb2NrZXQgdG8gYSBsb2NhbCBhZGRyZXNzIHJlc2lkZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBhZGRyZXNzIHZhbGlkYXRpb24gaXMgcGVyZm9ybWVkLCBob3cgdGhlIHNvY2tldCBvcHRpb25zIGFyZSBoYW5kbGVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBmb3Igc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uIGlmIHRoZSB1c2VyIGRpZG4mIzM5O3Qgc3BlY2lmeSBvbmUuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgYmluZGluZyBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGl0IGhhbmRsZXMgc2NvcGVkIGFkZHJlc3NlcyB2ZXJzdXMgZ2xvYmFsIG9uZXM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBgSVBWNl9WNk9OTFlgIG9wdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGR1YWwtc3RhY2sgc29ja2V0cy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBzb2xpZCBncmlwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGUkVFQklORCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmM9OTc9aW50IGluZXRfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYxLVx0aW5ldF9zb2Nrb3B0LmlzX2ljc2tcdD0gaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzayk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxNjI6XHRpbmV0X3NvY2tvcHQuZnJlZWJpbmRcdD0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYzLVx0aW5ldF9zb2Nrb3B0LmhkcmluY2xcdD0gaW5ldF90ZXN0X2JpdChIRFJJTkNMLCBzayk7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz02MDk9dm9pZCBpcF9zb2NrX3NldF9mcmVlYmluZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTYxMC17XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjYxMTpcdGluZXRfc2V0X2JpdChGUkVFQklORCwgc2spO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02MTItfVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTkxMS1cdGNhc2UgSVBfUk9VVEVSX0FMRVJUOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5MTI6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05MTMtXHRjYXNlIElQX1BBU1NTRUM6XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05ODctXHRcdHJldHVybiAwO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5ODg6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05ODktXHRcdGlmIChvcHRsZW4gXHUwMDNjIDEpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk5MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWwpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUwNz1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTYwLVx0XHRnb3RvIGNvcHl2YWw7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjE6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTYyOlx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjMtXHRcdGdvdG8gY29weXZhbDtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDAtXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDE6XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAyLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA0Olx0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDU6XHRcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk5Mz1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMC1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAxOlx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEyMDI6XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMjAzLVx0XHRicmVhaztcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00MDYtXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjQwNzpcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDA4LVx0XHRsb2NrX3NvY2soc2spO1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDMwLVx0XHRcdGJyZWFrO1xubmV0L21wdGNwL3NvY2tvcHQuYzo0MzE6XHRcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMyOlx0XHRcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQzMzpcdFx0XHRcdFx0aW5ldF90ZXN0X2JpdChGUkVFQklORCwgc3NrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzNC1cdFx0XHRicmVhaztcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTQ0ND1zdGF0aWMgYm9vbCBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDQ4LVx0XHQvKiBzaG91bGQgd29yayBmaW5lICovXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ0OTpcdFx0Y2FzZSBJUF9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDUwLVx0XHRjYXNlIElQX1RSQU5TUEFSRU5UOlxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNTE1LVx0XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjUxNjpcdFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxubmV0L21wdGNwL3NvY2tvcHQuYy01MTctXHRcdGNhc2UgSVBWNl9QS1RJTkZPOlxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzE4LVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjcxOTpcdGNhc2UgSVBfRlJFRUJJTkQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzc2ssIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz03NzM9c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzc2LVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjc3NzpcdGNhc2UgSVBfRlJFRUJJTkQ6XG5uZXQvbXB0Y3Avc29ja29wdC5jLTc3OC1cdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDU3PXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjQtXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLCBSRUFEX09OQ0UoaW5ldF9zayhzayktXHUwMDNldG9zKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0NjU6XHRjYXNlIElQX0ZSRUVCSU5EOlxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY2LVx0XHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ2NzpcdFx0XHRcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjgtXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTQ4Mj1zdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDkzLVx0XHRcdFx0XHQgICAgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ5NDpcdGNhc2UgSVBWNl9GUkVFQklORDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NS1cdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTY6XHRcdFx0XHRcdCAgICBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk3LVx0fVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy0xNjAwLVx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjE2MDE6XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cdGluZXRfYXNzaWduX2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc3NrLCBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzaykpO1xuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9MzUyPXN0YXRpYyBpbnQgc2N0cF92NF9hdmFpbGFibGUodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2Mi1cdCAgIHJldCAhPSBSVE5fTE9DQUwgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jOjM2MzpcdCAgICFpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2NC1cdCAgICAhUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBJUHY2IE5vbi1Mb2NhbCBCaW5kaW5nIENhcGFiaWxpdHkqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYGluZXQ2X2Nhbl9ub25sb2NhbF9iaW5kYCBmdW5jdGlvbiBhY3R1YWxseSAqZXhpc3RzKi4gSSYjMzk7bSBmYWlybHkgY2VydGFpbiBJJiMzOTt2ZSBjb21lIGFjcm9zcyBpdCBiZWZvcmUsIGJ1dCBiZXR0ZXIgdG8gYmUgc3VyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uLiBNeSBmaXJzdCBwb3J0IG9mIGNhbGwgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgdGhlIHN0YW5kYXJkIGluY2x1ZGUgcGF0aCwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL25ldC9pcHY2LmhgLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGdpdmVuIHRoZSBuYW1lLiBJZiB0aGF0IGRvZXNuJiMzOTt0IHlpZWxkIHJlc3VsdHMsIG9yIGlmIEkgd2FudCB0byBiZSAqcmVhbGx5KiB0aG9yb3VnaCBhbmQgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdXNlcyBvZiB0aGUgdW5kZXJseWluZyBjb25jZXB0LCBJIGNhbiBhbHdheXMgYnVzdCBvdXQgYSBgZ3JlcGAgZm9yIGBjYW5fbm9ubG9jYWxfYmluZGAgYWNyb3NzIHRoZSBzb3VyY2UgdHJlZS4gVGhpcyB3aWxsIGxldCBtZSBjb25maXJtIHRoZSBmdW5jdGlvbiBhbmQgaXRzIGJlaGF2aW9yIGFuZCB1c2UgY2FzZXMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldDZfY2FuX25vbmxvY2FsX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTM0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIERpdmluZzogVGhlIGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYCBIdW50KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSYjMzk7dmUgZ290IGEgaHVuY2gg4oCTIGxldCYjMzk7cyBzZWUgaWYgaXQgaG9sZHMgdXAuIE15IGZpcnN0IG1vdmUgaGVyZSBpcyB0byBnZXQgYSBicm9hZCB2aWV3LCBhIHJlYWwgbGF5IG9mIHRoZSBsYW5kLCBzbyBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGdsb2JhbCBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZSBsb29raW5nIGZvciBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAuIEkgd2FudCB0byBzZWUgKmV2ZXJ5KiBpbnN0YW5jZSwgZXZlcnkgdXNhZ2UsIGV2ZXJ5IGRlY2xhcmF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O2xsIHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkLiBUaGlzIGluaXRpYWwgc2NhbiBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBiaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2Nhbl9ub25sb2NhbF9iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfc29jay5oPTQyNz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9nZXRfY29udmVydF9jc3VtKHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzItXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0MzM6c3RhdGljIGlubGluZSBib29sIGluZXRfY2FuX25vbmxvY2FsX2JpbmQoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDM0LVx0XHRcdFx0XHQgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0NS17XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0NDY6XHRyZXR1cm4gaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIHx8XG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDctXHRcdGFkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkgfHxcbi0tXG5uZXQvaXB2NC9waW5nLmM9MzAyPXN0YXRpYyBpbnQgcGluZ19jaGVja19iaW5kX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9zb2NrICppc2ssXG4tLVxubmV0L2lwdjQvcGluZy5jLTMzMC1cdFx0ICAgIChjaGtfYWRkcl9yZXQgIT0gUlROX0xPQ0FMIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvcGluZy5jOjMzMTpcdFx0ICAgICAhaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGlzaykpKVxubmV0L2lwdjQvcGluZy5jLTMzMi1cdFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIElQdjYgQmluZGluZyoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBJUHY2IGJpbmRpbmcgaXNzdWUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmV0Nl9iaW5kYCwgc28gSSYjMzk7bSBuYXZpZ2F0aW5nIHN0cmFpZ2h0IHRvIHRoYXQgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aGluZyBpcyBhY3R1YWxseSB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgc3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgc29ja2V0IGF0dGVtcHRzIHRvIGJpbmQgdG8gYW4gSVB2NiBhZGRyZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluY29ycmVjdCBlcnJvciBoYW5kbGluZywgb3IgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBhZGRyZXNzIGZhbWlseSBhYnN0cmFjdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGR1YWwgbmF0dXJlIG9mIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLiBUaW1lIHRvIGRpc3NlY3QgdGhpcyBjb2RlIGFuZCBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZl9pbmV0Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAoIXNrKVxuIDQ2MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NjQ6XHRcbiA0NjU6XHRcdC8qIEZyZWUgbWMgbGlzdHMgKi9cbiA0NjY6XHRcdGlwdjZfc29ja19tY19jbG9zZShzayk7XG4gNDY3Olx0XG4gNDY4Olx0XHQvKiBGcmVlIGFjIGxpc3RzICovXG4gNDY5Olx0XHRpcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0cmV0dXJuIGluZXRfcmVsZWFzZShzb2NrKTtcbiA0NzI6XHR9XG4gNDczOlx0RVhQT1JUX1NZTUJPTChpbmV0Nl9yZWxlYXNlKTtcbiA0NzQ6XHRcbiA0NzU6XHR2b2lkIGluZXQ2X2NsZWFudXBfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gNDc2Olx0e1xuIDQ3NzpcdFx0c3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spO1xuIDQ3ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA0Nzk6XHRcdHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0O1xuIDQ4MDpcdFxuIDQ4MTpcdFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXG4gNDgyOlx0XG4gNDgzOlx0XHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xuIDQ4NDpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDg1Olx0XG4gNDg2Olx0XHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXJ4cG10dSwgTlVMTCk7XG4gNDg3Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0ODg6XHRcbiA0ODk6XHRcdC8qIEZyZWUgZmxvd2xhYmVscyAqL1xuIDQ5MDpcdFx0Zmw2X2ZyZWVfc29ja2xpc3Qoc2spO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0LyogRnJlZSB0eCBvcHRpb25zICovXG4gNDkzOlx0XG4gNDk0Olx0XHRvcHQgPSB1bnJjdV9wb2ludGVyKHhjaGcoXHUwMDI2bnAtXHUwMDNlb3B0LCBOVUxMKSk7XG4gNDk1Olx0XHRpZiAob3B0KSB7XG4gNDk2Olx0XHRcdGF0b21pY19zdWIob3B0LVx1MDAzZXRvdF9sZW4sIFx1MDAyNnNrLVx1MDAzZXNrX29tZW1fYWxsb2MpO1xuIDQ5NzpcdFx0XHR0eG9wdF9wdXQob3B0KTtcbiA0OTg6XHRcdH1cbiA0OTk6XHR9XG4gNTAwOlx0XG4gNTAxOlx0LypcbiA1MDI6XHQgKlx0VGhpcyBkb2VzIGJvdGggcGVlcm5hbWUgYW5kIHNvY2tuYW1lLlxuIDUwMzpcdCAqL1xuIDUwNDpcdGludCBpbmV0Nl9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsXG4gNTA1Olx0XHRcdCAgaW50IHBlZXIpXG4gNTA2Olx0e1xuIDUwNzpcdFx0c3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKil1YWRkcjtcbiA1MDg6XHRcdGludCBzaW5fYWRkcl9sZW4gPSBzaXplb2YoKnNpbik7XG4gNTA5Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDUxMDpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuIDUxMTpcdFx0c3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spO1xuIDUxMjpcdFxuIDUxMzpcdFx0c2luLVx1MDAzZXNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7XG4gNTE0Olx0XHRzaW4tXHUwMDNlc2luNl9mbG93aW5mbyA9IDA7XG4gNTE1Olx0XHRzaW4tXHUwMDNlc2luNl9zY29wZV9pZCA9IDA7XG4gNTE2Olx0XHRsb2NrX3NvY2soc2spO1xuIDUxNzpcdFx0aWYgKHBlZXIpIHtcbiA1MTg6XHRcdFx0aWYgKCFpbmV0LVx1MDAzZWluZXRfZHBvcnQgfHxcbiA1MTk6XHRcdFx0ICAgICgoKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgKFRDUEZfQ0xPU0UgfCBUQ1BGX1NZTl9TRU5UKSkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IEJpbmQgRnVuY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgaW5ldDZfYmluZGAuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byBpdCwgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgc291cmNlIGNvZGUuIEkga25vdyB0aGF0IGBpbmV0NmAgc3R1ZmYgaXMgaGFuZGxlZCBpbiBgbmV0L2lwdjZgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgYGFmX2luZXQ2LmNgLiBOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGBpbmV0Nl9iaW5kYCBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgY2FuIHVzZSBteSBJREUmIzM5O3Mgc2VhcmNoLCBvciBhIHF1aWNrIGBncmVwYCBpZiBJJiMzOTttIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRvIHBpbnBvaW50IGl0cyBleGFjdCBsb2NhdGlvbi4gRnJvbSB0aGVyZSBJJiMzOTtsbCBzdGFydCB0byByZWNvbnN0cnVjdCB0aGUgbG9naWNhbCBwYXRoIHRoYXQgaXMgbmVlZGVkIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaW5ldDZfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FmX2luZXQ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWZfaW5ldDYuYz0yNjU9aW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDI1LVxubmV0L2lwdjYvYWZfaW5ldDYuYzo0MjY6aW50IGluZXQ2X2JpbmRfc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDI3LXtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTQ1MS0vKiBiaW5kIGZvciBJTkVUNiBBUEkgKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDUyOmludCBpbmV0Nl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxubmV0L2lwdjYvYWZfaW5ldDYuYy00NTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY1MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGNvZGUsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBsZXZlbCBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBfX2luZXQ2X2JpbmRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBgX19pbmV0Nl9iaW5kYC4uLiB0aGF0IG5hbWUgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJUHY2IHNvY2tldCBiaW5kaW5nLCB0aGUgY3JpdGljYWwgc3RlcCBvZiBhc3NvY2lhdGluZyBhIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgYWRkcmVzcyBhbmQgcG9ydC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIG51YW5jZXMgb2YgSVB2NiBhZGRyZXNzaW5nLCBzY29waW5nLCBhbmQgcG90ZW50aWFsbHkgc29tZSBlcnJvciBjaGVja2luZyByZWxhdGVkIHRvIGFkZHJlc3MgY29uZmxpY3RzIGFuZCBwcml2aWxlZ2VkIHBvcnRzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBzb2NrYWRkcl9pbjZgIHN0cnVjdHVyZSwgb2J2aW91c2x5LCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc29ja2V0JiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBsaWtlbHkgdGhlIGBpbmV0Nl9zb2NrYCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHN1YnN5c3RlbSBhbmQgYW55IG5ldGZpbHRlciBob29rcy4gSSB3YW50IHRvIHNlZSBpZiBpdOKAmXMgdXNpbmcgYW55IG9mIHRoZSBuZXdlciBJUHY2IHNwZWNpZmljIEFQSSBmZWF0dXJlcywgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgdXNlcyBsb2NrcyB0byBwcm90ZWN0IGNyaXRpY2FsIHNlY3Rpb25zIG9mIHRoZSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgd2lsZGNhcmQgYWRkcmVzc2VzICg6Oikgb3IgdW5zcGVjaWZpZWQgSVB2NiBhZGRyZXNzZXMuIEJhc2ljYWxseSwgSeKAmW0gbWVudGFsbHkgc2Nhbm5pbmcgZm9yIHBvdGVudGlhbCBwaXRmYWxscyBhbmQgaW5lZmZpY2llbmNpZXMgcmVsYXRlZCB0byBJUHY2LXNwZWNpZmljIGFkZHJlc3MgaGFuZGxpbmcsIHBvcnQgYXNzaWdubWVudCwgYW5kIGVycm9yIGNvbmRpdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2FmX2luZXQ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNTpcdFx0XHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmKTtcbiAzMTY6XHRcdFx0XHRpZiAoIWRldikge1xuIDMxNzpcdFx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbiAzMTg6XHRcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiAzMTk6XHRcdFx0XHR9XG4gMzIwOlx0XHRcdH1cbiAzMjE6XHRcbiAzMjI6XHRcdFx0LyogUmVwcm9kdWNlIEFGX0lORVQgY2hlY2tzIHRvIG1ha2UgdGhlIGJpbmRpbmdzIGNvbnNpc3RlbnQgKi9cbiAzMjM6XHRcdFx0djRhZGRyID0gYWRkci1cdTAwM2VzaW42X2FkZHIuczZfYWRkcjMyWzNdO1xuIDMyNDpcdFx0XHRjaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZV9kZXZfdGFibGUobmV0LCBkZXYsIHY0YWRkcik7XG4gMzI1Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMyNjpcdFxuIDMyNzpcdFx0XHRpZiAoIWluZXRfYWRkcl92YWxpZF9vcl9ub25sb2NhbChuZXQsIGluZXQsIHY0YWRkcixcbiAzMjg6XHRcdFx0XHRcdFx0XHQgY2hrX2FkZHJfcmV0KSkge1xuIDMyOTpcdFx0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuIDMzMDpcdFx0XHRcdGdvdG8gb3V0O1xuIDMzMTpcdFx0XHR9XG4gMzMyOlx0XHR9IGVsc2Uge1xuIDMzMzpcdFx0XHRpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9BTlkpIHtcbiAzMzQ6XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcbiAzMzU6XHRcbiAzMzY6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzM3Olx0XHRcdFx0aWYgKF9faXB2Nl9hZGRyX25lZWRzX3Njb3BlX2lkKGFkZHJfdHlwZSkpIHtcbiAzMzg6XHRcdFx0XHRcdGlmIChhZGRyX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSBcdTAwMjZcdTAwMjZcbiAzMzk6XHRcdFx0XHRcdCAgICBhZGRyLVx1MDAzZXNpbjZfc2NvcGVfaWQpIHtcbiAzNDA6XHRcdFx0XHRcdFx0LyogT3ZlcnJpZGUgYW55IGV4aXN0aW5nIGJpbmRpbmcsIGlmIGFub3RoZXIgb25lXG4gMzQxOlx0XHRcdFx0XHRcdCAqIGlzIHN1cHBsaWVkIGJ5IHVzZXIuXG4gMzQyOlx0XHRcdFx0XHRcdCAqL1xuIDM0MzpcdFx0XHRcdFx0XHRzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYgPSBhZGRyLVx1MDAzZXNpbjZfc2NvcGVfaWQ7XG4gMzQ0Olx0XHRcdFx0XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0XHRcdFx0XHQvKiBCaW5kaW5nIHRvIGxpbmstbG9jYWwgYWRkcmVzcyByZXF1aXJlcyBhbiBpbnRlcmZhY2UgKi9cbiAzNDc6XHRcdFx0XHRcdGlmICghc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmKSB7XG4gMzQ4Olx0XHRcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMzQ5Olx0XHRcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiAzNTA6XHRcdFx0XHRcdH1cbiAzNTE6XHRcdFx0XHR9XG4gMzUyOlx0XG4gMzUzOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZikge1xuIDM1NDpcdFx0XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY0MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gbGluZXMgMzU1LTM4NSBvZiBgbmV0L2lwdjYvYWZfaW5ldDYuY2AsIGV4cHJlc3NlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb246CgoqKkRlbHZpbmcgaW50byB0aGUgSVB2NiBBZGRyZXNzIEZhbWlseSBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBJUHY2IGFkZHJlc3MgZmFtaWx5IGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIGFzIHRoZSBkZXRhaWxzIGNhbiBnZXQgcXVpdGUgaW50cmljYXRlLiBGb2N1c2luZyBvbiBsaW5lcyAzNTUtMzg1LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguLi4gKmFoLCB5ZXMsIHRoZSBgaW5ldDZfY3JlYXRlYCBmdW5jdGlvbiYjMzk7cyBoYW5kbGluZyBvZiBzcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyouIEkgYmV0IHdlIGFyZSBsb29raW5nIGF0IGhvdyBhIHNvY2tldCBpcyBiZWluZyBzZXQgdXAgaW4gcmVsYXRpb24gdG8gdGhpbmdzIGxpa2UgdHJhZmZpYyBjbGFzc2VzLCBmbG93IGxhYmVscywgYW5kIHNjb3BlIElELgoKSSYjMzk7bSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCB0aGUgZmluZXItZ3JhaW5lZCBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBQcm9iYWJseSwgd2UgYXJlIGNoZWNraW5nIGZvciBpbnZhbGlkIHZhbHVlcywgYW5kIHByb3Blcmx5IGFzc2lnbmluZyBvciBpbml0aWFsaXppbmcgdGhvc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGlzIGxpa2VseSBtYWtpbmcgc3VyZSB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB1bmRlcmx5aW5nIElQdjYgcHJvdG9jb2wuIE1heWJlIHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBuZXR3b3JrIGludGVyZmFjZXMgaGFwcGVuaW5nIGluIHRoaXMgc2VnbWVudDsgSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueSBmdW5jdGlvbiBjYWxscyB0aGF0IG1pZ2h0IHNpZ25hbCB0aGF0LgoKSXQmIzM5O3MgbGlrZWx5IGNoZWNraW5nIGFuZCB2YWxpZGF0aW5nIHNwZWNpZmljIHNldHRpbmdzIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIFJGQ3MgYW5kIG90aGVyIHN0YW5kYXJkcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIGRlZmF1bHQgdmFsdWVzIGJlaW5nIHNldCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGludGVyZXN0aW5nLiBUaGVyZSBjb3VsZCBiZSBzdWJ0bGV0aWVzIGluIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBuZXR3b3JrIHN0YWNrLiBIbW0sIEkgYW50aWNpcGF0ZSB0aGVyZSBhcmUgYSBzZXJpZXMgb2YgYGlmYCBzdGF0ZW1lbnRzIHJlbGF0ZWQgdG8gdmFsaWRhdGluZyBzb2NrZXQgb3B0aW9uIHBhcmFtZXRlcnMuIE15IGd1ZXNzIGlzIHRoZXJlIGFyZSBjaGVja3MgZm9yIGludmFsaWQgdHJhZmZpYyBjbGFzcyB2YWx1ZXMsIGZsb3cgbGFiZWxzLCBhbmQgZW5zdXJpbmcgdGhlIHNjb3BlIElEIGlzIHdpdGhpbiB0aGUgYXBwcm9wcmlhdGUgcmFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWZfaW5ldDYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU1Olx0XHRcdFx0XHRpZiAoIWRldikge1xuIDM1NjpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDM1NzpcdFx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMzU4Olx0XHRcdFx0XHR9XG4gMzU5Olx0XHRcdFx0fVxuIDM2MDpcdFxuIDM2MTpcdFx0XHRcdC8qIGlwdjQgYWRkciBvZiB0aGUgc29ja2V0IGlzIGludmFsaWQuICBPbmx5IHRoZVxuIDM2MjpcdFx0XHRcdCAqIHVuc3BlY2lmaWVkIGFuZCBtYXBwZWQgYWRkcmVzcyBoYXZlIGEgdjQgZXF1aXZhbGVudC5cbiAzNjM6XHRcdFx0XHQgKi9cbiAzNjQ6XHRcdFx0XHR2NGFkZHIgPSBMT09QQkFDSzRfSVBWNjtcbiAzNjU6XHRcdFx0XHRpZiAoIShhZGRyX3R5cGUgXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpKVx0e1xuIDM2NjpcdFx0XHRcdFx0aWYgKCFpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldCkgXHUwMDI2XHUwMDI2XG4gMzY3Olx0XHRcdFx0XHQgICAgIWlwdjZfY2hrX2FkZHIobmV0LCBcdTAwMjZhZGRyLVx1MDAzZXNpbjZfYWRkcixcbiAzNjg6XHRcdFx0XHRcdFx0XHQgICBkZXYsIDApKSB7XG4gMzY5Olx0XHRcdFx0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuIDM3MDpcdFx0XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMzcxOlx0XHRcdFx0XHR9XG4gMzcyOlx0XHRcdFx0fVxuIDM3MzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM3NDpcdFx0XHR9XG4gMzc1Olx0XHR9XG4gMzc2Olx0XG4gMzc3Olx0XHRpbmV0LVx1MDAzZWluZXRfcmN2X3NhZGRyID0gdjRhZGRyO1xuIDM3ODpcdFx0aW5ldC1cdTAwM2VpbmV0X3NhZGRyID0gdjRhZGRyO1xuIDM3OTpcdFxuIDM4MDpcdFx0c2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyID0gYWRkci1cdTAwM2VzaW42X2FkZHI7XG4gMzgxOlx0XG4gMzgyOlx0XHRpZiAoIShhZGRyX3R5cGUgXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpKVxuIDM4MzpcdFx0XHRucC1cdTAwM2VzYWRkciA9IGFkZHItXHUwMDNlc2luNl9hZGRyO1xuIDM4NDpcdFxuIDM4NTpcdFx0c2F2ZWRfaXB2Nm9ubHkgPSBzay1cdTAwM2Vza19pcHY2b25seTtcbiAzODY6XHRcdGlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSBcdTAwMjZcdTAwMjYgYWRkcl90eXBlICE9IElQVjZfQUREUl9NQVBQRUQpXG4gMzg3Olx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gMTtcbiAzODg6XHRcbiAzODk6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBhcmUgYWxsb3dlZCB0byBiaW5kIGhlcmUuICovXG4gMzkwOlx0XHRpZiAoc251bSB8fCAhKGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKSB8fFxuIDM5MTpcdFx0XHQgICAgICAoZmxhZ3MgXHUwMDI2IEJJTkRfRk9SQ0VfQUREUkVTU19OT19QT1JUKSkpIHtcbiAzOTI6XHRcdFx0ZXJyID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VnZXRfcG9ydChzaywgc251bSk7XG4gMzkzOlx0XHRcdGlmIChlcnIpIHtcbiAzOTQ6XHRcdFx0XHRzay1cdTAwM2Vza19pcHY2b25seSA9IHNhdmVkX2lwdjZvbmx5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgYW5kIE5vbi1Mb2NhbCBCaW5kaW5nKioKCk9rYXksIHNvIEkgc2VlIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldClgLi4uIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgSVB2NiBuZXR3b3JraW5nIGFuZCB0aGUgY3J1Y2lhbCBjb25jZXB0IG9mIG5vbi1sb2NhbCBiaW5kaW5nLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgd2hlcmUgc29ja2V0IGJpbmRpbmcgYmVoYXZpb3IgbWlnaHQgZGV2aWF0ZSBmcm9tIHRoZSBub3JtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uLiBUbyB0cnVseSBncmFzcCB3aGF0JiMzOTtzIGhhcHBlbmluZywgSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kYC4gVGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGlmIGEgcHJvY2VzcywgYm91bmQgdG8gYW4gSVB2NiBhZGRyZXNzLCBpcyBhbGxvd2VkIHRvIHJlY2VpdmUgdHJhZmZpYyBkZXN0aW5lZCBmb3IgYSBkaWZmZXJlbnQgYWRkcmVzcyBvbiB0aGF0IGludGVyZmFjZS4gSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljczogd2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gaXQsIHdoYXQgY3JpdGVyaWEgYXJlIGJlaW5nIGNoZWNrZWQgaW50ZXJuYWxseSwgYW5kIHdoYXQgdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBrZXkgdG8gbWFraW5nIGEganVkZ2VtZW50IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfY2FuX25vbmxvY2FsX2JpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXB2Ni5oPTg0Nj1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3RvX2Zsb3dfY29weV92NmFkZHJzKHN0cnVjdCBmbG93X2tleXMgKmZsb3csXG4tLVxuaW5jbHVkZS9uZXQvaXB2Ni5oLTg1Ny1cbmluY2x1ZGUvbmV0L2lwdjYuaDo4NTg6c3RhdGljIGlubGluZSBib29sIGlwdjZfY2FuX25vbmxvY2FsX2JpbmQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTg1OS1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0KVxuLS1cbm5ldC9pcHY0L3BpbmcuYz0zMDI9c3RhdGljIGludCBwaW5nX2NoZWNrX2JpbmRfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X3NvY2sgKmlzayxcbi0tXG5uZXQvaXB2NC9waW5nLmMtMzc1LVxubmV0L2lwdjQvcGluZy5jOjM3NjpcdFx0aWYgKCEoaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGlzaykgfHwgaGFzX2FkZHIgfHxcbm5ldC9pcHY0L3BpbmcuYy0zNzctXHRcdCAgICAgIGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZKSlcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTI2NT1pbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy0zNjUtXHRcdFx0aWYgKCEoYWRkcl90eXBlIFx1MDAyNiBJUFY2X0FERFJfTVVMVElDQVNUKSlcdHtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6MzY2Olx0XHRcdFx0aWYgKCFpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldCkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTM2Ny1cdFx0XHRcdCAgICAhaXB2Nl9jaGtfYWRkcihuZXQsIFx1MDAyNmFkZHItXHUwMDNlc2luNl9hZGRyLFxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmM9Nzk3PWludCBpcDZfZGF0YWdyYW1fc2VuZF9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvZGF0YWdyYW0uYy04NjctXHRcdFx0XHRpbnQgc3RyaWN0ID0gX19pcHY2X2FkZHJfc3JjX3Njb3BlKGFkZHJfdHlwZSkgXHUwMDNjPSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMO1xubmV0L2lwdjYvZGF0YWdyYW0uYzo4Njg6XHRcdFx0XHRpZiAoIWlwdjZfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpbmV0X3NrKHNrKSkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTg2OS1cdFx0XHRcdCAgICAhaXB2Nl9jaGtfYWRkcl9hbmRfZmxhZ3MobmV0LCBcdTAwMjZzcmNfaW5mby1cdTAwM2VpcGk2X2FkZHIsXG4tLVxubmV0L2lwdjYvcmF3LmM9MjE3PXN0YXRpYyBpbnQgcmF3djZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbi0tXG5uZXQvaXB2Ni9yYXcuYy0yNzYtXHRcdGlmICghKGFkZHJfdHlwZSBcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9yYXcuYzoyNzc6XHRcdCAgICAhaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChzb2NrX25ldChzayksIGluZXQpKSB7XG5uZXQvaXB2Ni9yYXcuYy0yNzgtXHRcdFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XG4tLVxubmV0L3NjdHAvaXB2Ni5jPTY4Nz1zdGF0aWMgaW50IHNjdHBfdjZfYXZhaWxhYmxlKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNjdHBfc29jayAqc3ApXG4tLVxubmV0L3NjdHAvaXB2Ni5jLTcxNS1cbm5ldC9zY3RwL2lwdjYuYzo3MTY6XHRyZXMgPSBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgXHUwMDI2c3AtXHUwMDNlaW5ldCkgfHxcbm5ldC9zY3RwL2lwdjYuYy03MTctXHQgICAgICBpcHY2X2Noa19hZGRyKG5ldCwgaW42LCBkZXYsIDApO1xuLS1cbm5ldC9zY3RwL2lwdjYuYz05NDc9c3RhdGljIGludCBzY3RwX2luZXQ2X2JpbmRfdmVyaWZ5KHN0cnVjdCBzY3RwX3NvY2sgKm9wdCwgdW5pb24gc2N0cF9hZGRyICphZGRyKVxuLS1cbm5ldC9zY3RwL2lwdjYuYy05NjQtXHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBhZGRyLVx1MDAzZXY2LnNpbjZfc2NvcGVfaWQpO1xubmV0L3NjdHAvaXB2Ni5jOjk2NTpcdFx0XHRpZiAoIWRldiB8fCAhKGlwdjZfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBcdTAwMjZvcHQtXHUwMDNlaW5ldCkgfHxcbm5ldC9zY3RwL2lwdjYuYy05NjYtXHRcdFx0XHQgICAgICBpcHY2X2Noa19hZGRyKG5ldCwgXHUwMDI2YWRkci1cdTAwM2V2Ni5zaW42X2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTcwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kYCBVc2FnZSoqCgpPa2F5LCBzbyBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgaXMgc3ByaW5rbGVkIHRocm91Z2hvdXQgdGhlIElQdjYgbmV0d29ya2luZyBjb2RlLiBJJiMzOTttIHNlZWluZyBpdCByZWZlcmVuY2VkIGluIGBfX2luZXQ2X2JpbmRgLCBgaXA2X2RhdGFncmFtX3NlbmRfY3RsYCwgYHJhd3Y2X2JpbmRgLCBgc2N0cF92Nl9hdmFpbGFibGVgLCBhbmQgYHNjdHBfaW5ldDZfYmluZF92ZXJpZnlgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgc2NvcGUg4oCTIGxvb2tzIGxpa2UgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGhvdyBJUHY2IHNvY2tldCBiaW5kaW5nIGFuZCBjb250cm9sIG9wZXJhdGlvbnMgd29yaywgcGFydGljdWxhcmx5IGluIGJvdGggcmF3IGFuZCBkYXRhZ3JhbSBjb250ZXh0cywgYW5kIGV2ZW4gd2l0aCBTQ1RQLiBJIGtub3cgYSBiaXQgYWJvdXQgdGhvc2UgcHJvdG9jb2xzLCBzbyBJIGNhbiBzdGFydCB0byBpbmZlciB3aGF0IGl0cyByb2xlIG1pZ2h0IGJlLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBhY3R1YWxseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIHRoaXMgZnVuY3Rpb24gaXMgZXZhbHVhdGluZy4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgYWJpbGl0eSB0byBiaW5kIGEgc29ja2V0IHRvIGFuIGFkZHJlc3MgdGhhdCBpc24mIzM5O3QgbG9jYWwgdG8gdGhlIHN5c3RlbSwgd2hpY2ggcmFpc2VzIGFsbCBzb3J0cyBvZiBzZWN1cml0eSBhbmQgcm91dGluZyBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBnZXQgYSBjbG9zZSBsb29rLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLWxvY2FsIGJpbmRpbmdzIGluIElQdjYuIEkmIzM5O20gY3VyaW91cyB3aGF0IGtpbmQgb2YgY2hlY2tzIGl0IHBlcmZvcm1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwdjYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODU1Olx0XG4gODU2Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gODU3Olx0XG4gODU4Olx0c3RhdGljIGlubGluZSBib29sIGlwdjZfY2FuX25vbmxvY2FsX2JpbmQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIDg1OTpcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXG4gODYwOlx0e1xuIDg2MTpcdFx0cmV0dXJuIFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuaXBfbm9ubG9jYWxfYmluZCkgfHxcbiA4NjI6XHRcdFx0dGVzdF9iaXQoSU5FVF9GTEFHU19GUkVFQklORCwgXHUwMDI2aW5ldC1cdTAwM2VpbmV0X2ZsYWdzKSB8fFxuIDg2MzpcdFx0XHR0ZXN0X2JpdChJTkVUX0ZMQUdTX1RSQU5TUEFSRU5ULCBcdTAwMjZpbmV0LVx1MDAzZWluZXRfZmxhZ3MpO1xuIDg2NDpcdH1cbiA4NjU6XHRcbiA4NjY6XHQvKiBTeXNjdGwgc2V0dGluZ3MgZm9yIG5ldCBpcHY2LmF1dG9fZmxvd2xhYmVscyAqL1xuIDg2NzpcdCNkZWZpbmUgSVA2X0FVVE9fRkxPV19MQUJFTF9PRkZcdFx0MFxuIDg2ODpcdCNkZWZpbmUgSVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcdDFcbiA4Njk6XHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfT1BUSU5cdDJcbiA4NzA6XHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfRk9SQ0VEXHQzXG4gODcxOlx0XG4gODcyOlx0I2RlZmluZSBJUDZfQVVUT19GTE9XX0xBQkVMX01BWFx0XHRJUDZfQVVUT19GTE9XX0xBQkVMX0ZPUkNFRFxuIDg3MzpcdFxuIDg3NDpcdCNkZWZpbmUgSVA2X0RFRkFVTFRfQVVUT19GTE9XX0xBQkVMU1x0SVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgU29ja2V0IE9wdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGB0ZXN0X2JpdChJTkVUX0ZMQUdTX0ZSRUVCSU5ELCAmYW1wO2luZXQtJmd0O2luZXRfZmxhZ3MpYCBhbmQgYHRlc3RfYml0KElORVRfRkxBR1NfVFJBTlNQQVJFTlQsICZhbXA7aW5ldC0mZ3Q7aW5ldF9mbGFncylgIHVzZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgaG93IGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIGFyZSBiZWluZyBoYW5kbGVkLiBJbnRlcmVzdGluZyB0aGF0IHRoZXkmIzM5O3JlIG5vdyBzZXR0aW5nIHRoZXNlIGZsYWdzIHRocm91Z2ggY29uY3VycmVudCBzb2NrZXQgb3BlcmF0aW9ucy4gVGhlIGZhY3QgdGhhdCBgc29ja29wdF9sb2NrX3NvY2soc2spYCBpc24mIzM5O3QgYmVpbmcgYWNxdWlyZWQgYW55bW9yZSBpcyBhIHNpZ25pZmljYW50IGRldGFpbCwgc3VnZ2VzdGluZyBhIHJlLWFyY2hpdGVjdGluZyBvZiBob3cgdGhlc2Ugc29ja2V0IG9wdGlvbnMgYXJlIG1hbmFnZWQsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2Ugb3IgY29uY3VycmVuY3kgcmVhc29ucy4gSXQmIzM5O3MgZGVmaW5pdGVseSB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgbGlua2VkIHRvIGBDT05GSUdfSVBWNmAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGVuIEkmIzM5O2xsIHNjYW4gYG5ldC9pcHY2L01ha2VmaWxlYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUNikgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG4gICA3Olx0XG4gICA4Olx0aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxuICAgOTpcdFx0XHRhZGRybGFiZWwubyBcXFxuICAxMDpcdFx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxuICAxMTpcdFx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiAgMTI6XHRcdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4gIDEzOlx0XHRcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXG4gIDE0Olx0XG4gIDE1Olx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xuICAxNjpcdGlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICYjNDM7PSBpcDZtci5vXG4gIDE3Olx0XG4gIDE4Olx0aXB2Ni0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXG4gIDE5Olx0XHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXG4gIDIwOlx0aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuICAyMTpcdGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWI2X3J1bGVzLm9cbiAgMjI6XHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMjM6XHRpcHY2LSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDI0Olx0aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xuICAyNTpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xuICAyNjpcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuICAyNzpcdGlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xuICAyODpcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgJiM0Mzs9IGlvYW02X2lwdHVubmVsLm9cbiAgMjk6XHRcbiAgMzA6XHRvYmotJChDT05GSUdfSU5FVDZfQUgpICYjNDM7PSBhaDYub1xuICAzMTpcdG9iai0kKENPTkZJR19JTkVUNl9FU1ApICYjNDM7PSBlc3A2Lm9cbiAgMzI6XHRvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuICAzMzpcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICYjNDM7PSBpcGNvbXA2Lm9cbiAgMzQ6XHRvYmotJChDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwpICYjNDM7PSB4ZnJtNl90dW5uZWwub1xuICAzNTpcdG9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICYjNDM7PSB0dW5uZWw2Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSAmIzQzOz0gbWlwNi5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xuICAzODpcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAzOTpcdFxuICA0MDpcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA4NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkNoZWNraW5nIGZvciBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0lQVjZgIGlzIGEgbmVjZXNzYXJ5IHJlcXVpcmVtZW50LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQmIzM5O3MgcHJvcGVybHkgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgYENPTkZJR19JUFY2YCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NiBzdWJzeXN0ZW0uIFNvLCBsZXQgbWUgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYC4gSSYjMzk7bGwgb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBpbnRlbmRlZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfSVBWNmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgb3B0aW9ucyBhcmUgdW5kZXJzdG9vZCB3aXRoaW4gdGhlIHJlbGV2YW50IEtjb25maWcgY29udGV4dC4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB0byBwcm9jZWVkLCBzbyBpdCYjMzk7cyBiZXN0IHRvIGNvbmZpcm0gaXQgZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2XFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFyb3VuZCB0aGF0IGxpbmUgNi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZmlsZSBpcywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHRoZSBLY29uZmlnIGZpbGUgcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIElQdjYtcmVsYXRlZCBmZWF0dXJlcyBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSYjMzk7bSBwcm9iYWJseSBpbnRlcmVzdGVkIGluIGhvdyBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHdoYXQgZ3JhbnVsYXIgY29udHJvbCB0aGUgdXNlciBoYXMgb3ZlciBzcGVjaWZpYyBmZWF0dXJlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgZGVzY3JpcHRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZWFjaCBvcHRpb24gZG9lcyBhbmQgd2hlbiBpdCBzaG91bGQgYmUgc2VsZWN0ZWQuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG5pY2hlIHNldHVwcyBvciBzcGVjaWZpYyB1c2UgY2FzZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUFY2XG4gICA3Olx0XHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU3VwcG9ydCBmb3IgSVAgdmVyc2lvbiA2IChJUHY2KS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgSVB2Niwgc2VlXG4gIDE0Olx0XHQgIFx1MDAzY2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lQdjZcdTAwM2UuXG4gIDE1Olx0XHQgIEZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBJUHY2IHVuZGVyIExpbnV4LCBzZWVcbiAgMTY6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYucnN0IGFuZCByZWFkIHRoZSBIT1dUTyBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9IT1dUTy9MaW51eCYjNDM7SVB2Ni1IT1dUTy9cdTAwM2VcbiAgMTg6XHRcbiAgMTk6XHRpZiBJUFY2XG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiAgMjI6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFJvdXRlciBQcmVmZXJlbmNlIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byB0aGUgUm91dGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byBJUHY2IERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYElQdjZgIHdvcmtzIHdpdGhpbiB0aGlzIHN5c3RlbSwgYW5kIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0cyBmdW5jdGlvbmFsaXR5IGlzIGRlcGVuZGVudCBvbiBib3RoIGBORVRgIGFuZCBgSU5FVGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYElQdjZgIGlzIGJ1aWx0IG9uIHRoZSBuZXR3b3JrIGxheWVyIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJuZXQgcHJvdG9jb2wuIFRvIHVuZGVyc3RhbmQgaG93IHRoYXQgYWxsIGZpdHMgdG9nZXRoZXIsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgdGhlIHNwZWNpZmljcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQvS2NvbmZpZ2AgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O25ldC9pcHY2L0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTEzNz1zb3VyY2UgXCYjMzQ7bmV0L2lwdjQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MTM4OnNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0xMzktc291cmNlIFwmIzM0O25ldC9uZXRsYWJlbC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIG9yIHBlcmhhcHMgaG93IGFuIGV4aXN0aW5nIG9uZSBjYW4gYmUgZXhwYW5kZWQuICBMaW5lIDEzOCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIG9mdGVuIGEgY2VudHJhbCBhcmVhIGZvciBzcGVjaWZpYyBmZWF0dXJlcywgb3IgbWF5YmUgcmVsYXRlZCBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYSBuZXR3b3JrIG1vZHVsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gb2YgdGhlIGZpbGUuIEkgYW50aWNpcGF0ZSBpdCBtaWdodCBjb250YWluIGEgYGNvbmZpZ2AgZGVmaW5pdGlvbiwgYSBgbWVudWNvbmZpZ2AgYmxvY2ssIG9yIHBlcmhhcHMgZXZlbiBhbiBgaWZgIHN0YXRlbWVudCBiYXNlZCBvbiBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYXQgbGVhc3QgYSBiYXNpYyBgaGVscGAgc2VjdGlvbiBhbmQgcHJvYmFibHkgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBnYXRpbmcgY29uZGl0aW9ucy4gIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgIGJlaGF2aW9yIG9mIHRoZSBUQ1AvSVAgY29kZSBieSB3cml0aW5nIHRvIHRoZSAodmlydHVhbCkgZmlsZXMgaW5cbiAxMzE6XHRcdCAgL3Byb2Mvc3lzL25ldC9pcHY0Lyo7IHRoZSBvcHRpb25zIGFyZSBleHBsYWluZWQgaW4gdGhlIGZpbGVcbiAxMzI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFx1MDAzZS5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgU2hvcnQgYW5zd2VyOiBzYXkgWS5cbiAxMzU6XHRcbiAxMzY6XHRpZiBJTkVUXG4gMTM3Olx0c291cmNlIFwmIzM0O25ldC9pcHY0L0tjb25maWdcJiMzNDtcbiAxMzg6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvS2NvbmZpZ1wmIzM0O1xuIDEzOTpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0bGFiZWwvS2NvbmZpZ1wmIzM0O1xuIDE0MDpcdHNvdXJjZSBcJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZ1wmIzM0O1xuIDE0MTpcdFxuIDE0MjpcdGVuZGlmICMgaWYgSU5FVFxuIDE0MzpcdFxuIDE0NDpcdGNvbmZpZyBORVRXT1JLX1NFQ01BUktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NDIKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU29ja2V0IE9wdGlvbiBDaGFuZ2UgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyByZWxhdGVkIHRvIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY29ycmVjdGx5IGNvbmZpZ3VyaW5nIHRoZSBmdXp6ZXIuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JUFY2YCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSwgd2l0aCBgQ09ORklHX0lORVRgIGFzIGEgZGVwZW5kZW5jeS4KCkJhc2VkIG9uIHRoZSBpbml0aWFsIGNoZWNrLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBbJiMzNDtJUFY2JiMzNDtdYC4gV2hpbGUgYElORVRgIGlzIGEgZGVwZW5kZW5jeSwgYElQVjZgIGl0c2VsZiBpcyB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gY29udHJvbGxpbmcgYGlwdjZfc29ja2dsdWUuY2AuCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0OiBgRm9jdXNTeW1ib2xzYC4gVGhlIGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBpdHMgZW50cnkgcG9pbnQgYGlwdjZfc2V0c29ja29wdGAuIFdlIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlIHRvIGF2b2lkIGRpbHV0aW9uLCBzbyBubyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgcmVzdWx0LiBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBpdCBjYW4gYmUgb21pdHRlZC4gYGRvX2lwdjZfZ2V0c29ja29wdGAgaXMgcmVsZXZhbnQsIGJ1dCB0aGUgZm9jdXMgaXMgb24gbW9kaWZpY2F0aW9uLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaXMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgYW5kIGl0IGlzICpub3QqIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gYGlwdjZfc2V0c29ja29wdGAgaXMgYWxzbyAqbm90KiBzdGF0aWMsIGFuZCBpcyB0aGUgZW50cnkgcG9pbnQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy4KClRoZSBkaWZmIGNvbmZpcm1zIG15IGFzc2Vzc21lbnQ7IG9ubHkgY2hhbmdlcyB3aXRoaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgYW5kIHNwZWNpZmljYWxseSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCAobGluZXMgNDAxLTQxNSBhbmQgNjY2LTY4OCkuIFRodXMsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBgWyYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDssICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDtdYC4KCklzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIHBhdGNoIGFsdGVycyB0aGUgbG9ja2luZyBjb250cmFjdCwgZW5hYmxpbmcgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgdG8gYmUgc2V0IHdpdGhvdXQgaG9sZGluZyB0aGUgc29ja2V0IGxvY2suIFRoaXMgaW1wYWN0cyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIGNvbmN1cnJlbmN5IGlzc3VlcyBhY2Nlc3NpYmxlIHRocm91Z2ggdXNlci1zcGFjZSBgc2V0c29ja29wdGAgY2FsbHMuIFRoaXMgY2hhbmdlIG5lZWRzIHRob3JvdWdoIHRlc3RpbmcgdG8gaWRlbnRpZnkgYW55IHJhY2VzLgoKSW4gc3VtbWFyeSwgdGhlIGZ1enplciB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgbG9ja2luZyBmb3IgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCwgd2hpY2ggY291bGQgZXhwb3NlIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBzZXRzb2Nrb3B0LgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJUFY2JiMzNDtdYAoKUmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyBpbiBkb19pcHY2X3NldHNvY2tvcHQoKSB0byB0aGUgbG9ja2xlc3Mgc3dpdGNoLXN0YXRlbWVudCBibG9jayBiZWZvcmUgbG9ja19zb2NrKHNrKSBpcyBhY3F1aXJlZC4gVGhlIG9wdGlvbnMgYXJlIHNldCB1c2luZyBpbmV0X2Fzc2lnbl9iaXQoKSwgbW9kaWZ5aW5nIGJpdCBmbGFncyBvbiB0aGUgc29ja2V0LiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNlYTk2YmQ0YzQ0Mjk1ODBkNzkyNDcyZjY0YTdiMGU2OTFhMzFhY2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo1NToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0zOTgsNiAmIzQzOzM5OCwyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAogCS8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC4gKi8KIAlzd2l0Y2ggKG9wdG5hbWUpIHsKJiM0MzsJY2FzZSBJUFY2X0ZSRUVCSU5EOgomIzQzOwkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJLyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovCiYjNDM7CQlpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIElQVjZfVFJBTlNQQVJFTlQ6CiYjNDM7CQlpZiAodmFsYm9vbCAmYW1wOyZhbXA7ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkKJiM0MzsJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJLyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovCiYjNDM7CQlpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTsKJiM0MzsJCXJldHVybiAwOwogCWNhc2UgSVBWNl9VTklDQVNUX0hPUFM6CiAJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjY2LDI3ICYjNDM7NjgxLDYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCXJldHYgPSAwOwogCQlicmVhazsKIAotCWNhc2UgSVBWNl9UUkFOU1BBUkVOVDoKLQkJaWYgKHZhbGJvb2wgJmFtcDsmYW1wOyAhc29ja29wdF9uc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9SQVcpICZhbXA7JmFtcDsKLQkJICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0diA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKLQkJCWdvdG8gZV9pbnZhbDsKLQkJLyogd2UgZG9uJiMzOTt0IGhhdmUgYSBzZXBhcmF0ZSB0cmFuc3BhcmVudCBiaXQgZm9yIElQVjYgd2UgdXNlIHRoZSBvbmUgaW4gdGhlIElQdjQgc29ja2V0ICovCi0JCWluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpOwotCQlyZXR2ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElQVjZfRlJFRUJJTkQ6Ci0JCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKLQkJCWdvdG8gZV9pbnZhbDsKLQkJLyogd2UgYWxzbyBkb24mIzM5O3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqLwotCQlpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTsKLQkJcmV0diA9IDA7Ci0JCWJyZWFrOwotCiAJY2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjoKIAkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihpbnQpKQogCQkJZ290byBlX2ludmFsOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5lZWQgZm9yIGEgS01TQU4gRnV6emluZyBTZXNzaW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBhbmQgdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgd2FycmFudCBzcGlubmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IExldCYjMzk7cyBkaXNzZWN0IHRoaXMgbG9naWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgcHJvYmFibHkgdXNpbmcgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGdvb2QgY29udGV4dC4KClRoZSBkaWZmIGlzIHRvdWNoaW5nIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLCB3aGljaCwgYXMgYSByZW1pbmRlciwgaGFuZGxlcyBzb2NrZXQgb3B0aW9ucyBmb3IgSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBpcyByZXdvcmtpbmcgdGhlIHdheSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBoYW5kbGVzIHNvbWUgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgSVBWNl9GUkVFQklORGAgYW5kIGBJUFY2X1RSQU5TUEFSRU5UYCBhcmUgYmVpbmcgbW92ZWQuIFRoZSBwYXRjaCBpcyBzaGlmdGluZyB0aGVzZSBmcm9tIGJlaW5nIGhhbmRsZWQgKnVuZGVyKiB0aGUgc29ja2V0IGxvY2sgdG8gdGhlIHNlY3Rpb24gZGVzY3JpYmVkIGFzICYjMzQ7SGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiYjMzQ7IFRoaXMgaXMgdGhlIGtleS4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0IG1lIGdvIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzk4IGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3IgbmV3IEtNU0FOIHZ1bG5lcmFiaWxpdGllcyBiZWluZyBpbnRyb2R1Y2VkIGJ5IG1vdmluZyB0aGVzZSBvcHRpb25zIGFyb3VuZC4gT25seSB0aGVuIGNhbiBJIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIDM4MTpcdFx0aW50IHJldHYgPSAtRU5PUFJPVE9PUFQ7XG4gMzgyOlx0XHRpbnQgdmFsLCB2YWxib29sO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpKVxuIDM4NTpcdFx0XHR2YWwgPSAwO1xuIDM4NjpcdFx0ZWxzZSB7XG4gMzg3Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNlPSBzaXplb2YoaW50KSkge1xuIDM4ODpcdFx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxuIDM4OTpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzkwOlx0XHRcdH0gZWxzZVxuIDM5MTpcdFx0XHRcdHZhbCA9IDA7XG4gMzkyOlx0XHR9XG4gMzkzOlx0XG4gMzk0Olx0XHR2YWxib29sID0gKHZhbCAhPSAwKTtcbiAzOTU6XHRcbiAzOTY6XHRcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcbiAzOTc6XHRcdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDM5ODpcdFxuIDM5OTpcdFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIDQwMDpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gNDAxOlx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNDAyOlx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDQwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQwNDpcdFx0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbiA0MDU6XHRcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4gNDA2Olx0XHRcdHJldHVybiAwO1xuIDQwNzpcdFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuIDQwODpcdFx0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuIDQwOTpcdFx0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4gNDEwOlx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA0MTE6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDEyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDEzOlx0XHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuIDQxNDpcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbiA0MTU6XHRcdFx0cmV0dXJuIDA7XG4gNDE2Olx0XHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIDQxNzpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA0MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MTk6XHRcdFx0aWYgKHZhbCBcdTAwM2UgMjU1IHx8IHZhbCBcdTAwM2MgLTEpXG4gNDIwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDIxOlx0XHRcdFdSSVRFX09OQ0UobnAtXHUwMDNlaG9wX2xpbWl0LCB2YWwpO1xuIDQyMjpcdFx0XHRyZXR1cm4gMDtcbiA0MjM6XHRcdGNhc2UgSVBWNl9NVUxUSUNBU1RfTE9PUDpcbiA0MjQ6XHRcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gNDI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI2Olx0XHRcdGlmICh2YWwgIT0gdmFsYm9vbClcbiA0Mjc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Mjg6XHRcdFx0aW5ldDZfYXNzaWduX2JpdChNQzZfTE9PUCwgc2ssIHZhbGJvb2wpO1xuIDQyOTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMQoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiAxMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IElQdjYgc2V0c29ja29wdCBIYW5kbGVyIFJlb3JnYW5pemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyBhIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gd2l0aGluIGBkb19pcHY2X3NldHNvY2tvcHRgLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHNvY2tldCBvcHRpb25zIGJlZm9yZSB0aGUgYGxvY2tfc29jayhzaylgIGNhbGwuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBleGFtaW5pbmcgdGhpcyBjb2RlOgoKYGBgYwoJY2FzZSBJUFY2X0ZSRUVCSU5EOgoJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YoaW50KSkKCQkJcmV0dXJuIC1FSU5WQUw7CgkJLyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovCgkJaW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7CgkJcmV0dXJuIDA7CgoJY2FzZSBJUFY2X1RSQU5TUEFSRU5UOgoJCWlmICh2YWxib29sICZhbXA7JmFtcDsgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfUkFXKSAmYW1wOyZhbXA7CgkJICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkKCQkJcmV0dXJuIC1FUEVSTTsKCQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCgkJCXJldHVybiAtRUlOVkFMOwoJCS8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqLwoJCWluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpOwoJCXJldHVybiAwOwpgYGAKClRoZXNlIGNhc2VzIHdlcmUgKnByZXZpb3VzbHkqIGhhbmRsZWQgYWZ0ZXIgdGhlIGxvY2suIE5vdyB0aGV5IGFyZSBoYW5kbGVkIGJlZm9yZSB0aGUgbG9jay4gSXQmIzM5O3MgYSBzaW1wbGUgcmVvcmRlcmluZyBiYXNlZCBvbiB0aGUgYXRvbWljIG5hdHVyZSBvZiBgaW5ldF9hc3NpZ25fYml0YCwgd2hpY2ggb3BlcmF0ZXMgb24gYml0cywgbWVhbmluZyBgbG9ja19zb2NrYCBpc24mIzM5O3QgcmVxdWlyZWQgZm9yIGl0cyBvcGVyYXRpb25zLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBiaXQgY2hhbmdlLgoKTm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQsIG5vIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgYXJlIG1vZGlmaWVkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgSSBzZWUgbm8gbmV3IGluc3RhbmNlcyBvZiByZWFkaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSYjMzk7cmUgcmVhZGluZyAqZnJvbSogdXNlcnNwYWNlIHRocm91Z2ggYGNvcHlfZnJvbV9zb2NrcHRyYCwgYW5kIHdyaXRpbmcgYSBiaXQgdG8gYSBrZXJuZWwgc3RydWN0dXJlLiBOb3RoaW5nIGdldHMgY29waWVkICpiYWNrKiB0byB1c2Vyc3BhY2UuIFRoaXMgc2V0c29ja29wdCBjYWxsIGFjdHMgYXMgYSBzZXR0ZXIuCgpIZXJlJiMzOTtzIHRoZSBLTVNBTiByZWFzb25pbmc6CgoqICAgKipQYXRjaCBEZXNjcmlwdGlvbjoqKiBUaGUgcGF0Y2ggbW92ZXMgdGhlIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHNvY2tvcHQgaGFuZGxlcnMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgdG8gdGhlIGxvY2tsZXNzIHNlY3Rpb24gYmVmb3JlIGBsb2NrX3NvY2soc2spYC4KKiAgICoqS01TQU4gUmF0aW9uYWxlOioqIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBpbnRyb2R1Y2UgbmV3IHJlYWRzIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBjb3B5IGRhdGEgYmFjayB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBhIHNldHNvY2tvcHQgb3BlcmF0aW9uLCBzZXR0aW5nIGEgYml0IGZsYWcgdmlhIGBpbmV0X2Fzc2lnbl9iaXRgLgoqICAgKipSZWxldmFudCBTYW5pdGl6ZXJzOioqIFdoaWxlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdHJpZ2dlciBLTVNBTiwgY29uY3VycmVuY3kgYXNwZWN0cyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvdGVudGlhbCBjb25jZXJuLCBhbmQgdGhlcmVmb3JlIEtDU0FOL3JhY2UgZGV0ZWN0b3JzIHdvdWxkIGJlIHJlbGV2YW50IGZvciBleGFtaW5pbmcgdGhlIGVmZmVjdHMgb2YgdGhlIGxvY2tsZXNzIGJpdCBzZXR0aW5nLiBLTVNBTiBob3dldmVyIGRvZXMgbm90IGFwcGx5IGhlcmUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuIFRoZSBjb3JlIGNoYW5nZSBpcyBtZXJlbHkgYSBmdW5jdGlvbmFsIHJlb3JnYW5pemF0aW9uIHdpdGggbm8gcmlzayBvZiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyBpbiBkb19pcHY2X3NldHNvY2tvcHQoKSB0byB0aGUgbG9ja2xlc3Mgc3dpdGNoLXN0YXRlbWVudCBibG9jayBiZWZvcmUgbG9ja19zb2NrKHNrKSBpcyBhY3F1aXJlZC4gVGhlIG9wdGlvbnMgYXJlIHNldCB1c2luZyBpbmV0X2Fzc2lnbl9iaXQoKSwgbW9kaWZ5aW5nIGJpdCBmbGFncyBvbiB0aGUgc29ja2V0LiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MTIuNzExNTg4ODc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMDUzMDc4ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb19pcHY2X3NldHNvY2tvcHQoKSB0byBoYW5kbGUgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyB3aXRob3V0IGFjcXVpcmluZyBzb2Nrb3B0X2xvY2tfc29jaygpLiBUaGlzIGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHNldHNvY2tvcHQoKSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgKGZvciBJUFY2X0ZSRUVCSU5EKSBvciBhcHByb3ByaWF0ZWx5IHBlcm1pdHRlZCBuYW1lc3BhY2VzIChmb3IgSVBWNl9UUkFOU1BBUkVOVCksIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gY29uY3VycmVuY3kgaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NToxMi43MTE1OTQxNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYxODgzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZWE5NmJkNGM0NDI5NTgwZDc5MjQ3MmY2NGE3YjBlNjkxYTMxYWNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbmluZGV4IDFmNjhmYjY0YTQzZWYuLjRiMzUzNjU3MWM5ODAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXFxuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXFxuQEAgLTM5OCw2ICszOTgsMjEgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcbiBcXHQvKiBIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXFxuIFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbitcXHRjYXNlIElQVjZfRlJFRUJJTkQ6XFxuK1xcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdC8qIFNoYXJlZCB3aXRoIElQX0ZSRUVCSU5ELiAqL1xcbitcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcXG4rXFx0XFx0aWYgKHZhbGJvb2wgXFx1MDAyNlxcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi9cXG4rXFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxcbiBcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC02NjYsMjcgKzY4MSw2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRyZXR2ID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxuLVxcdFxcdGlmICh2YWxib29sIFxcdTAwMjZcXHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xcbi1cXHRcXHRcXHRyZXR2ID0gLUVQRVJNO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuLVxcdFxcdFxcdGdvdG8gZV9pbnZhbDtcXG4tXFx0XFx0Lyogd2UgZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIHRyYW5zcGFyZW50IGJpdCBmb3IgSVBWNiB3ZSB1c2UgdGhlIG9uZSBpbiB0aGUgSVB2NCBzb2NrZXQgKi9cXG4tXFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7XFxuLVxcdFxcdHJldHYgPSAwO1xcbi1cXHRcXHRicmVhaztcXG4tXFxuLVxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG4tXFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbi1cXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuLVxcdFxcdC8qIHdlIGFsc28gZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqL1xcbi1cXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG4tXFx0XFx0cmV0diA9IDA7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXG4gXFx0Y2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjpcXG4gXFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiBcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjE0LjA1ODM0NjY5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcxMjA4NDE3MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIGhhbmRsZSBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIHdpdGhvdXQgYWNxdWlyaW5nIHNvY2tvcHRfbG9ja19zb2NrKCkuIFRoaXMgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgc2V0c29ja29wdCgpIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSAoZm9yIElQVjZfRlJFRUJJTkQpIG9yIGFwcHJvcHJpYXRlbHkgcGVybWl0dGVkIG5hbWVzcGFjZXMgKGZvciBJUFY2X1RSQU5TUEFSRU5UKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBubyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVncmVzc2lvbnMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2VhOTZiZDRjNDQyOTU4MGQ3OTI0NzJmNjRhN2IwZTY5MWEzMWFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zOTgsNiArMzk4LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFxuIFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4rXHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4rXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbitcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuK1x0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4rXHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuK1x0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC02NjYsMjcgKzY4MSw2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR2ID0gMDtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4tXHRcdGlmICh2YWxib29sIFx1MDAyNlx1MDAyNiAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuLVx0XHRcdHJldHYgPSAtRVBFUk07XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4tXHRcdFx0Z290byBlX2ludmFsO1xuLVx0XHQvKiB3ZSBkb24ndCBoYXZlIGEgc2VwYXJhdGUgdHJhbnNwYXJlbnQgYml0IGZvciBJUFY2IHdlIHVzZSB0aGUgb25lIGluIHRoZSBJUHY0IHNvY2tldCAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuLVx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGFsc28gZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuIFx0Y2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0Z290byBlX2ludmFsO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MTQuMDU4MzQ4NTUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE0NzgzNDQyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgQU1ENjQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIHJlcXVlc3QgaXMgdG8gZXZhbHVhdGUgaXQuIEZpbmUsIGxldCdzIGRpdmUgaW4uIFNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIG1vdmluZyB0aGUgaGFuZGxpbmcgb2YgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgd2l0aGluIGBkb19pcHY2X3NldHNvY2tvcHRgLiBSaWdodCwgc28gdGhleSdyZSBtb3ZpbmcgdGhlbSBmcm9tIHRoZSBsb2NrZWQgc2VjdGlvbiB0byB0aGUgdW5sb2NrZWQgc2VjdGlvbi4gVGhlIGNvbW1lbnQgc2F5cyBcIkhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC5cIlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBXaGF0J3MgdGhlIHJhdGlvbmFsZSBoZXJlPyBJcyBpdCBwZXJmb3JtYW5jZS1iYXNlZD8gUmVkdWNlZCBjb250ZW50aW9uPyBJbmNyZWFzZWQgcGFyYWxsZWxpc20/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBzYWZlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLlxuXG5SaWdodCwgc28gbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFNwZWNpZmljYWxseSwgSSdsbCBzdGFydCBieSBjaGVja2luZyBhcm91bmQgbGluZSAzOTgsIHdoZXJlIGBkb19pcHY2X3NldHNvY2tvcHRgIGlzIHByb2JhYmx5IGRlZmluZWQsIGFuZCB0aGVuIGNoZWNrIG5lYXIgbGluZSA2NjYgZm9yIGhvdyB0aG9zZSBvcHRpb25zIGFyZSB1c2VkIG9yIG1vdmVkIGFyb3VuZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRob3NlIG9wdGlvbnMgd2VyZSBiZWluZyBoYW5kbGVkIGJlZm9yZSwgYW5kIGhvdyB0aGV5IGFyZSBub3cuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgY2hhbmdlcyB0aGUgbG9ja2luZyBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgY2hhbmdlIHRoYXQncyBiZWluZyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MjUuNTM2Njk2Mzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuIDM4MTpcXHRcXHRpbnQgcmV0diA9IC1FTk9QUk9UT09QVDtcXG4gMzgyOlxcdFxcdGludCB2YWwsIHZhbGJvb2w7XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSlcXG4gMzg1OlxcdFxcdFxcdHZhbCA9IDA7XFxuIDM4NjpcXHRcXHRlbHNlIHtcXG4gMzg3OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzZT0gc2l6ZW9mKGludCkpIHtcXG4gMzg4OlxcdFxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2dmFsLCBvcHR2YWwsIHNpemVvZih2YWwpKSlcXG4gMzg5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzOTA6XFx0XFx0XFx0fSBlbHNlXFxuIDM5MTpcXHRcXHRcXHRcXHR2YWwgPSAwO1xcbiAzOTI6XFx0XFx0fVxcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHR2YWxib29sID0gKHZhbCAhPSAwKTtcXG4gMzk1OlxcdFxcbiAzOTY6XFx0XFx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbiAzOTc6XFx0XFx0XFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHQvKiBIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXFxuIDQwMDpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gNDAxOlxcdFxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG4gNDAyOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MDQ6XFx0XFx0XFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXFxuIDQwNTpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG4gNDA2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MDc6XFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbiA0MDg6XFx0XFx0XFx0aWYgKHZhbGJvb2wgXFx1MDAyNlxcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcXHUwMDI2XFx1MDAyNlxcbiA0MDk6XFx0XFx0XFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4gNDEwOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDQxMTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQxMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDEzOlxcdFxcdFxcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xcbiA0MTQ6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsYm9vbCk7XFxuIDQxNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDE2OlxcdFxcdGNhc2UgSVBWNl9VTklDQVNUX0hPUFM6XFxuIDQxNzpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQxODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDE5OlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzZSAyNTUgfHwgdmFsIFxcdTAwM2MgLTEpXFxuIDQyMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDIxOlxcdFxcdFxcdFdSSVRFX09OQ0UobnAtXFx1MDAzZWhvcF9saW1pdCwgdmFsKTtcXG4gNDIyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MjM6XFx0XFx0Y2FzZSBJUFY2X01VTFRJQ0FTVF9MT09QOlxcbiA0MjQ6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0MjU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyNjpcXHRcXHRcXHRpZiAodmFsICE9IHZhbGJvb2wpXFxuIDQyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI4OlxcdFxcdFxcdGluZXQ2X2Fzc2lnbl9iaXQoTUM2X0xPT1AsIHNrLCB2YWxib29sKTtcXG4gNDI5OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NToyNS41MzY3ODc5NjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzgzMDA2MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IFNvY2tldCBPcHRpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBJUHY2IHNvY2tldCBvcHRpb25zIGFyZSBiZWluZyBtYW5hZ2VkLiBSaWdodCwgYGRvX2lwdjZfc2V0c29ja29wdGAg4oCTIHRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiAgSXTigJlzIHRoZSBnby10byBmb3IgaGFuZGxpbmcgYHNldHNvY2tvcHRgIGNhbGxzIHNwZWNpZmljYWxseSBmb3IgSVB2Ni4gSSBrbm93IGl0IGRlYWxzIHdpdGggdGhpbmdzIGxpa2UgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIE5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpdCAqdXNlZCogdG8gYmUgaGFuZGxlZCB3aXRoaW4gdGhlIHNvY2tldCBsb2NrLCBvciBhZnRlciBhIGNhbGwgdG8gYGxvY2tfc29jayhzaylgLiBUaGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJvdHRsZW5lY2tzIGNvdWxkIGFyaXNlLiAgSSBzaG91bGQgcHJvYmFibHkgcmUtcmVhZCB0aGUgY29kZSBzdXJyb3VuZGluZyBgbG9ja19zb2NrKHNrKWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgZXhhY3RseSBpcyB0aGF0IGNhbGxlZCB3aXRoaW4gYGRvX2lwdjZfc2V0c29ja29wdGA/IFRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MjkuOTE5Nzk2NjY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHRcXHRjYXNlIElQVjZfTVVMVElDQVNUX0hPUFM6XFxuIDQzMTpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pXFxuIDQzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0djtcXG4gNDMzOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MzU6XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIDI1NSB8fCB2YWwgXFx1MDAzYyAtMSlcXG4gNDM2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mzc6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlbWNhc3RfaG9wcyxcXG4gNDM4OlxcdFxcdFxcdFxcdCAgIHZhbCA9PSAtMSA/IElQVjZfREVGQVVMVF9NQ0FTVEhPUFMgOiB2YWwpO1xcbiA0Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ0MDpcXHRcXHRjYXNlIElQVjZfTVRVOlxcbiA0NDE6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0MzpcXHRcXHRcXHRpZiAodmFsIFxcdTAwMjZcXHUwMDI2IHZhbCBcXHUwMDNjIElQVjZfTUlOX01UVSlcXG4gNDQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NDU6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlZnJhZ19zaXplLCB2YWwpO1xcbiA0NDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ0NzpcXHRcXHRjYXNlIElQVjZfTUlOSE9QQ09VTlQ6XFxuIDQ0ODpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQ0OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDUwOlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwIHx8IHZhbCBcXHUwMDNlIDI1NSlcXG4gNDUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRcXHRpZiAodmFsKVxcbiA0NTQ6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNmlwNl9taW5faG9wY291bnQpO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHRcXHQvKiB0Y3BfdjZfZXJyKCkgYW5kIHRjcF92Nl9yY3YoKSBtaWdodCByZWFkIG1pbl9ob3Bjb3VudFxcbiA0NTc6XFx0XFx0XFx0ICogd2hpbGUgd2UgYXJlIGNoYW5naW5nIGl0LlxcbiA0NTg6XFx0XFx0XFx0ICovXFxuIDQ1OTpcXHRcXHRcXHRXUklURV9PTkNFKG5wLVxcdTAwM2VtaW5faG9wY291bnQsIHZhbCk7XFxuIDQ2MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDYxOlxcdFxcdGNhc2UgSVBWNl9SRUNWRVJSX1JGQzQ4ODQ6XFxuIDQ2MjpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQ2MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDY0OlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyAwIHx8IHZhbCBcXHUwMDNlIDEpXFxuIDQ2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDY2OlxcdFxcdFxcdGluZXQ2X2Fzc2lnbl9iaXQoUkVDVkVSUjZfUkZDNDg4NCwgc2ssIHZhbGJvb2wpO1xcbiA0Njc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2ODpcXHRcXHRjYXNlIElQVjZfTVVMVElDQVNUX0FMTDpcXG4gNDY5OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDcwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NzE6XFx0XFx0XFx0aW5ldDZfYXNzaWduX2JpdChNQzZfQUxMLCBzaywgdmFsYm9vbCk7XFxuIDQ3MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDczOlxcdFxcdGNhc2UgSVBWNl9BVVRPRkxPV0xBQkVMOlxcbiA0NzQ6XFx0XFx0XFx0aW5ldDZfYXNzaWduX2JpdChBVVRPRkxPV0xBQkVMLCBzaywgdmFsYm9vbCk7XFxuIDQ3NTpcXHRcXHRcXHRpbmV0Nl9zZXRfYml0KEFVVE9GTE9XTEFCRUxfU0VULCBzayk7XFxuIDQ3NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDc3OlxcdFxcdGNhc2UgSVBWNl9ET05URlJBRzpcXG4gNDc4OlxcdFxcdFxcdGluZXQ2X2Fzc2lnbl9iaXQoRE9OVEZSQUcsIHNrLCB2YWxib29sKTtcXG4gNDc5OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NToyOS45MTk4OTc1OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ5ODY3MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbG9ja19zb2NrYCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIGBsb2NrX3NvY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24sIG9yIG1hY3JvLCBpcyAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoIGFuZCBwaW5wb2ludCB0aGUgYXJlYXMgb2YgdGhlIGNvZGUgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhpcyB2YXJpYWJsZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHJlZmFjdG9yaW5nIGlzIG5lZWRlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjMyLjU2OTc2NzI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDgwOlxcdFxcdGNhc2UgSVBWNl9SRUNWRVJSOlxcbiA0ODE6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0ODI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ4MzpcXHRcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFJFQ1ZFUlI2LCBzaywgdmFsYm9vbCk7XFxuIDQ4NDpcXHRcXHRcXHRpZiAoIXZhbClcXG4gNDg1OlxcdFxcdFxcdFxcdHNrYl9lcnJxdWV1ZV9wdXJnZShcXHUwMDI2c2stXFx1MDAzZXNrX2Vycm9yX3F1ZXVlKTtcXG4gNDg2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0ODc6XFx0XFx0Y2FzZSBJUFY2X1JPVVRFUl9BTEVSVF9JU09MQVRFOlxcbiA0ODg6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ5MDpcXHRcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFJUQUxFUlRfSVNPTEFURSwgc2ssIHZhbGJvb2wpO1xcbiA0OTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ5MjpcXHRcXHRjYXNlIElQVjZfTVRVX0RJU0NPVkVSOlxcbiA0OTM6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0OTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ5NTpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgSVBWNl9QTVRVRElTQ19ET05UIHx8IHZhbCBcXHUwMDNlIElQVjZfUE1UVURJU0NfT01JVClcXG4gNDk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0OTc6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlcG10dWRpc2MsIHZhbCk7XFxuIDQ5ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDk5OlxcdFxcdGNhc2UgSVBWNl9GTE9XSU5GT19TRU5EOlxcbiA1MDA6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA1MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUwMjpcXHRcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFNOREZMT1csIHNrLCB2YWxib29sKTtcXG4gNTAzOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDQ6XFx0XFx0Y2FzZSBJUFY2X0FERFJfUFJFRkVSRU5DRVM6XFxuIDUwNTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDUwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTA3OlxcdFxcdFxcdHJldHVybiBpcDZfc29ja19zZXRfYWRkcl9wcmVmZXJlbmNlcyhzaywgdmFsKTtcXG4gNTA4OlxcdFxcdGNhc2UgSVBWNl9NVUxUSUNBU1RfSUY6XFxuIDUwOTpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pXFxuIDUxMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiA1MTE6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA1MTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxMzpcXHRcXHRcXHRpZiAodmFsKSB7XFxuIDUxNDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA1MTU6XFx0XFx0XFx0XFx0aW50IGJvdW5kX2Rldl9pZiwgbWlkeDtcXG4gNTE2OlxcdFxcbiA1MTc6XFx0XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHZhbCk7XFxuIDUyMDpcXHRcXHRcXHRcXHRpZiAoIWRldikge1xcbiA1MjE6XFx0XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDUyMjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTIzOlxcdFxcdFxcdFxcdH1cXG4gNTI0OlxcdFxcdFxcdFxcdG1pZHggPSBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KGRldik7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRcXHRcXHRib3VuZF9kZXZfaWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuIDUyOTpcXHRcXHRcXHRcXHRpZiAoYm91bmRfZGV2X2lmIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU1OjMyLjU2OTg3MjMwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDYwMjY2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIGEgc3VtbWFyeSBhcyBpZiBJJ20gcHJvY2Vzc2luZyB0aGUgXCJUaG91Z2h0c1wiIHlvdSd2ZSBwcm92aWRlZDpcblxuKipQcm9jZXNzaW5nIHRoZSBJbmZvcm1hdGlvbi4uLiBMb29raW5nIERlZXBlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gZ2l2ZW4gdGhlIGluc3RydWN0aW9uIHRvIGNvbnRpbnVlIGRvd24gdGhlIHBhZ2UgdG8gZmluZCBzb21ldGhpbmcgZWxzZS4gSXQgaW1wbGllcyB0aGVyZSBpcyBtb3JlIHRvIGNvbWUuIE15IGludGVybmFsIHByb2Nlc3MgaXMsIFwiT2theSwgbGV0J3MgcHJvY2VlZCB0byBhbmFseXplIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uXCJcblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NTozNC44MTU5MDI1MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzA6XFx0XFx0XFx0XFx0ICAgIGJvdW5kX2Rldl9pZiAhPSB2YWwgXFx1MDAyNlxcdTAwMjZcXG4gNTMxOlxcdFxcdFxcdFxcdCAgICAoIW1pZHggfHwgbWlkeCAhPSBib3VuZF9kZXZfaWYpKVxcbiA1MzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzMzpcXHRcXHRcXHR9XFxuIDUzNDpcXHRcXHRcXHRXUklURV9PTkNFKG5wLVxcdTAwM2VtY2FzdF9vaWYsIHZhbCk7XFxuIDUzNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTM2OlxcdFxcdGNhc2UgSVBWNl9VTklDQVNUX0lGOlxcbiA1Mzc6XFx0XFx0e1xcbiA1Mzg6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gNTM5OlxcdFxcdFxcdGludCBpZmluZGV4O1xcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRcXHRpZiAob3B0bGVuICE9IHNpemVvZihpbnQpKVxcbiA1NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdFxcdGlmaW5kZXggPSAoX19mb3JjZSBpbnQpbnRvaGwoKF9fZm9yY2UgX19iZTMyKXZhbCk7XFxuIDU0NTpcXHRcXHRcXHRpZiAoIWlmaW5kZXgpIHtcXG4gNTQ2OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UobnAtXFx1MDAzZXVjYXN0X29pZiwgMCk7XFxuIDU0NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTQ4OlxcdFxcdFxcdH1cXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpO1xcbiA1NTE6XFx0XFx0XFx0aWYgKCFkZXYpXFxuIDU1MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIDU1MzpcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdFxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZikpXFxuIDU1NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNldWNhc3Rfb2lmLCBpZmluZGV4KTtcXG4gNTU5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1NjA6XFx0XFx0fVxcbiA1NjE6XFx0XFx0fVxcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA1NjY6XFx0XFx0Y2FzZSBJUFY2X1Y2T05MWTpcXG4gNTY3OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSB8fFxcbiA1Njg6XFx0XFx0XFx0ICAgIGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bSlcXG4gNTY5OlxcdFxcdFxcdFxcdGdvdG8gZV9pbnZhbDtcXG4gNTcwOlxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IHZhbGJvb2w7XFxuIDU3MTpcXHRcXHRcXHRyZXR2ID0gMDtcXG4gNTcyOlxcdFxcdFxcdGJyZWFrO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHRjYXNlIElQVjZfUkVDVlBLVElORk86XFxuIDU3NTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDU3NjpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDU3NzpcXHRcXHRcXHRucC1cXHUwMDNlcnhvcHQuYml0cy5yeGluZm8gPSB2YWxib29sO1xcbiA1Nzg6XFx0XFx0XFx0cmV0diA9IDA7XFxuIDU3OTpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTU6MzQuODE2MDA3MDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3OTAwMTIxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGlzIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCBpbW1lZGlhdGVseSBJJ20gemVyb2luZyBpbiBvbiBsaW5lIDU2MyDigJMgdGhhdCdzIHdoZXJlIGBzb2Nrb3B0X2xvY2tfc29jayhzaylgIGlzIGNhbGxlZC4gQmVmb3JlIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQsIGBJUFY2X1RSQU5TUEFSRU5UYCBhbmQgYElQVjZfRlJFRUJJTkRgIHdlcmUgaGFuZGxlZCAqYWZ0ZXIqIHRoYXQgbG9ja2luZyBjYWxsLiBOb3csIHRoZSBsb2dpYyBmb3Igc2V0dGluZyB0aG9zZSBvcHRpb25zIGlzICpiZWZvcmUqIHRoZSBsb2NrISBTcGVjaWZpY2FsbHksIEkgc2VlIGBpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKWAgYW5kIGBpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKWAgaGFwcGVuaW5nIG91dHNpZGUgdGhlIHByb3RlY3Rpb24gb2YgYHNvY2tvcHRfbG9ja19zb2NrKHNrKWAuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLi4uXG5cbldhaXQsIGlzIHRoYXQgZXZlbiByZWFjaGFibGU/IENhbiBzb21lb25lIGFjdHVhbGx5IHRyaWdnZXIgdGhhdCBjb2RlIHBhdGggd2l0aG91dCB0aGUgbG9jaz8gQWJzb2x1dGVseSEgQW55b25lIGNhbiBjYWxsIGBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GUkVFQklORCwgLi4uKWAgb3IgYHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X1RSQU5TUEFSRU5ULCAuLi4pYCBvbiBhbiBJUHY2IHNvY2tldCwgcmVnYXJkbGVzcyBvZiBpdHMgdHlwZSAoU1RSRUFNLCBER1JBTSwgUkFXKS4gVGhhdCdzIGEgZGVmaW5pdGUgdmVjdG9yIHRvIGNvbnNpZGVyLlxuXG5TbywgdGhpcyBjaGFuZ2UgaXMgZGVmaW5pdGVseSBhbHRlcmluZyBsb2NraW5nIGJlaGF2aW9yIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suIFJlbW92aW5nIHRoYXQgc3luY2hyb25pemF0aW9uIHBvdGVudGlhbGx5IG9wZW5zIHRoZSBkb29yIHRvIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSSdtIHRoaW5raW5nIGRhdGEgcmFjZXMsIHJhY2UgY29uZGl0aW9ucyB3aXRoIGBjb25uZWN0YCwgYGJpbmRgLCBgbGlzdGVuYCwgb3Igb3RoZXIgc29ja2V0IHN0YXRlIGNoYW5nZXMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBkaXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4uLiBsZXQncyBzZWUgd2hhdCB0aGUgZ2l0IGxvZyB0ZWxscyB1cyBhYm91dCB0aGlzIGNvbW1pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjAyLjcxNjEzMjQyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MzA2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9hc3NpZ25fYml0LipGUkVFQklORFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9ODkyPWludCBkb19pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTkwLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbCk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNC1cXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1OlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMS1cXHRcXHRjYXNlIElQVjZfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzI6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMy1cXHRcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy03MTktXFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE2MDAtXFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNjAxOlxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cXHRpbmV0X2Fzc2lnbl9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNzaywgaW5ldF90ZXN0X2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc2spKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDIuNzg3NzY3ODA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3NDI5NTc3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIElQX0ZSRUVCSU5EIGFuZCBJUF9UUkFOU1BBUkVOVCBpbiBpcF9zb2NrZ2x1ZS5jKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2suIEl0IHNlZW1zIElQX0ZSRUVCSU5EIGFuZCBJUF9UUkFOU1BBUkVOVCB3ZXJlIHNoaWZ0ZWQgZWFybGllciBpbiB0aGUgY29kZSwgbGlrZWx5IGluIGEgcHJpb3IgcmV2aXNpb24uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyB6ZXJvIGluIG9uIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBuZWFyIGxpbmUgOTkwLiBJJ2xsIHRha2UgYSBsb29rIGF0IHdoYXQgd2FzIGNoYW5nZWQgYXJvdW5kIHRoYXQgYXJlYS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYWRqdXN0bWVudCBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDQuNTMwNzI3ODkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHRcXHRcXHRpZiAoIXZhbClcXG4gOTgxOlxcdFxcdFxcdFxcdHNrYl9lcnJxdWV1ZV9wdXJnZShcXHUwMDI2c2stXFx1MDAzZXNrX2Vycm9yX3F1ZXVlKTtcXG4gOTgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODM6XFx0XFx0Y2FzZSBJUF9SRUNWRVJSX1JGQzQ4ODQ6XFxuIDk4NDpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMCB8fCB2YWwgXFx1MDAzZSAxKVxcbiA5ODU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk4NjpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoUkVDVkVSUl9SRkM0ODg0LCBzaywgdmFsKTtcXG4gOTg3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODg6XFx0XFx0Y2FzZSBJUF9GUkVFQklORDpcXG4gOTg5OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAxKVxcbiA5OTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk5MTpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWwpO1xcbiA5OTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk5MzpcXHRcXHRjYXNlIElQX0hEUklOQ0w6XFxuIDk5NDpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcpXFxuIDk5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcbiA5OTY6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEhEUklOQ0wsIHNrLCB2YWwpO1xcbiA5OTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk5ODpcXHRcXHRjYXNlIElQX01VTFRJQ0FTVF9MT09QOlxcbiA5OTk6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIDEpXFxuMTAwMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDAxOlxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChNQ19MT09QLCBzaywgdmFsKTtcXG4xMDAyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMDM6XFx0XFx0Y2FzZSBJUF9NVUxUSUNBU1RfQUxMOlxcbjEwMDQ6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIDEpXFxuMTAwNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDA2OlxcdFxcdFxcdGlmICh2YWwgIT0gMCBcXHUwMDI2XFx1MDAyNiB2YWwgIT0gMSlcXG4xMDA3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMDg6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KE1DX0FMTCwgc2ssIHZhbCk7XFxuMTAwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMDEwOlxcdFxcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XFxuMTAxMTpcXHRcXHRcXHRpZiAoISF2YWwgXFx1MDAyNlxcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShzb2NrX25ldChzayktXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSBcXHUwMDI2XFx1MDAyNlxcbjEwMTI6XFx0XFx0XFx0ICAgICFzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4xMDEzOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTAxNDpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2MgMSlcXG4xMDE1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMTY6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzaywgdmFsKTtcXG4xMDE3OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwMTg6XFx0XFx0Y2FzZSBJUF9OT0RFRlJBRzpcXG4xMDE5OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDQuNTMwODcyNTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0OTQ5MTM4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogRnV6emluZyBQb3RlbnRpYWwgLSBJUHY2IFNvY2tldCBPcHRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIElQdjYgaXMgY2F0Y2hpbmcgdXAgd2l0aCBJUHY0IG9uIHRoaXMgc29ja2V0IG9wdGlvbiBiZWhhdmlvciDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYWJpbGl0eSB0byBzZXQgYElQX0ZSRUVCSU5EYCBhbmQgYElQX1RSQU5TUEFSRU5UYCB3aXRob3V0IGFjcXVpcmluZyBhIHNvY2tldCBsb2NrLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6P1xuXG5MZXQncyBicmVhayB0aGlzIGRvd24uIFBlciBvdXIgY3JpdGVyaWEsIHdlJ3JlIGxvb2tpbmcgZm9yIG1vZGlmaWNhdGlvbnMgdG8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdCBhcmU6IGNvcmUgc3Vic3lzdGVtcywgcmVmYWN0b3JpbmcgdGhhdCBpbXBhY3RzIGRhdGEgc3RydWN0dXJlcywgb3IgcmVhY2hhYmxlIGRyaXZlcnMvcHJvdG9jb2xzLlxuXG5JbiB0aGlzIGNhc2UsIGl04oCZcyBhIGRpcmVjdCB0b3VjaCB0byBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gV2UncmUgZGVhbGluZyB3aXRoIHNvY2tldCBvcHRpb24gaGFuZGxpbmcgdmlhIGBzZXRzb2Nrb3B0YCwgaW4gdGhpcyBjYXNlIGNvbmNlcm5pbmcgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAuIFRoZSBtb2RpZmljYXRpb24gaXMga2V5OiB3ZSdyZSBjaGFuZ2luZyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvci4gU2V0dGluZyB0aGUgb3B0aW9ucyBpcyBub3cgaGFwcGVuaW5nIGxvY2tsZXNzbHksIG5vIG5lZWQgZm9yIGBzb2Nrb3B0X2xvY2tfc29jayhzaylgLiBUaGF04oCZcyBhICpkZWZpbml0ZSogcmVkIGZsYWcg4oCTIGFueXRpbWUgeW91IHN0YXJ0IG1lc3Npbmcgd2l0aCBsb2NraW5nLCB5b3UgaW50cm9kdWNlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHZ1bG5lcmFiaWxpdGllcy5cblxuQW5kIHRoZSByZWFjaGFiaWxpdHkgaXMgc29saWQuIFRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNldHNvY2tvcHQoKWAuIEdpdmVuIHRoZSBwcmV2YWxlbmNlIG9mIG5ldHdvcmsgc29ja2V0cyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggcHVyc3VpbmcuIEl0IHRpY2tzIGFsbCB0aGUgYm94ZXMg4oCTIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIG1vZGlmaWNhdGlvbiB0byBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpbXBhY3RzIGxvY2tpbmcuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBvdXIgYEZvY3VzU3ltYm9sc2AuIFdoYXQgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBtb2RpZmllZCBvciBjbG9zZWx5IHJlbGF0ZWQ/IEluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLCBpdCdzIGNsZWFyOiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBpcyBkaXJlY3RseSBpbXBhY3RlZC4gVGhhdCdzIGEgcHJpbWUgdGFyZ2V0LiBOZXh0IHN0ZXA6IGxldCdzIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYGRvX2lwdjZfc2V0c29ja29wdGAgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgb3B0aW9uIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjowOS4wMjU3ODg1MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDI5MDg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz01NzUwPXN0YXRpYyBpbnQgc29sX2lwdjZfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc3Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzo1NzczOlxcdHJldHVybiBkb19pcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NzQtXFx0XFx0XFx0XFx0ICBLRVJORUxfU09DS1BUUihvcHR2YWwpLCAqb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQxNzE9aW50IHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQxNzYtXFx0aWYgKGxldmVsICE9IFNPTF9UQ1ApXFxubmV0L2lwdjQvdGNwLmM6NDE3NzpcXHRcXHQvKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgYW5kIHRjcF92Nl9jb25uZWN0KCkgKi9cXG5uZXQvaXB2NC90Y3AuYy00MTc4LVxcdFxcdHJldHVybiBSRUFEX09OQ0UoaWNzay1cXHUwMDNlaWNza19hZl9vcHMpLVxcdTAwM2VzZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ4NjY9aW50IHRjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4NzEtXFx0aWYgKGxldmVsICE9IFNPTF9UQ1ApXFxubmV0L2lwdjQvdGNwLmM6NDg3MjpcXHRcXHQvKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgYW5kIHRjcF92Nl9jb25uZWN0KCkgKi9cXG5uZXQvaXB2NC90Y3AuYy00ODczLVxcdFxcdHJldHVybiBSRUFEX09OQ0UoaWNzay1cXHUwMDNlaWNza19hZl9vcHMpLVxcdTAwM2VnZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zMDI9c3RhdGljIGludCBpcHY2X3NldF9vcHRfaGRyKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMzc1LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzozNzY6aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM3Ny1cXHRcXHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz04Njk9aW50IGlwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc5LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4ODA6XFx0ZXJyID0gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04ODEtI2lmZGVmIENPTkZJR19ORVRGSUxURVJcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9NDAzPXN0YXRpYyBpbnQgdGNwX3Y2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNDUyLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpcDZfbWluX2hvcGNvdW50KSkge1xcbm5ldC9pcHY2L3RjcF9pcHY2LmM6NDUzOlxcdFxcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtNDU0LVxcdFxcdGlmIChpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYyBSRUFEX09OQ0UodGNwX2luZXQ2X3NrKHNrKS1cXHUwMDNlbWluX2hvcGNvdW50KSkge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xNzMwPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE4NjEtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlwNl9taW5faG9wY291bnQpKSB7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxODYyOlxcdFxcdC8qIG1pbl9ob3Bjb3VudCBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50bHkgZnJvbSBkb19pcHY2X3NldHNvY2tvcHQoKSAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTg2My1cXHRcXHRpZiAodW5saWtlbHkoaGRyLVxcdTAwM2Vob3BfbGltaXQgXFx1MDAzYyBSRUFEX09OQ0UodGNwX2luZXQ2X3NrKHNrKS1cXHUwMDNlbWluX2hvcGNvdW50KSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MDkuMTUwMDg2NDk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0Njk3ODM5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBJUHY2IFNvY2tldCBPcHRpb25zIGluIGBpcHY2X3NvY2tnbHVlLmNgKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gSVB2NiBzb2NrZXQgYmVoYXZpb3IuIFdlJ3ZlIGxpa2VseSBhbHJlYWR5IGFkZHJlc3NlZCBzb21lIGFyZWFzLCBidXQgbm93IGl0J3MgY3JpdGljYWwgdG8gZGlnIGludG8gYGlwdjZfc29ja2dsdWUuY2AgdG8gc2VlIGhvdyBgaXB2Nl9zZXRzb2Nrb3B0YCBpcyBpbXBsZW1lbnRlZC4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZ2x1ZSBjb2RlIHRoYXQgY29ubmVjdHMgdGhlIGdlbmVyaWMgc29ja2V0IG9wdGlvbnMgZnJhbWV3b3JrIHRvIHRoZSBudWFuY2VzIG9mIElQdjYuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiB3aXRoaW4gdGhpcyBtb2R1bGUsIGdpdmVuIHRoZSBtdWx0aXRocmVhZGVkIG5hdHVyZSBvZiBuZXR3b3JrIG9wZXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgYXJlYXMgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UsIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGNvcHlpbmcsIG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIElQdjYgc3RhY2sgYW5kIHRoZSBzb2NrZXQgbGF5ZXIuIEFueSBwb3RlbnRpYWwgaW1wYWN0IG9uIGVycm9yIGhhbmRsaW5nIGlzIGFsc28gYSBtYWpvciBjb25jZXJuLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB2YXJpb3VzIHNvY2tldCBvcHRpb24gY2hhbmdlcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG1heSBoYXZlIGJlZW4gYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTEuNjE5ODcyNzk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjU6XFx0XFx0cmV0diA9IC1FSU5WQUw7XFxuIDg2NjpcXHRcXHRnb3RvIHVubG9jaztcXG4gODY3OlxcdH1cXG4gODY4OlxcdFxcbiA4Njk6XFx0aW50IGlwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIDg3MDpcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gODcxOlxcdHtcXG4gODcyOlxcdFxcdGludCBlcnI7XFxuIDg3MzpcXHRcXG4gODc0OlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfSVAgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3R5cGUgIT0gU09DS19SQVcpXFxuIDg3NTpcXHRcXHRcXHRyZXR1cm4gaXBfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0aWYgKGxldmVsICE9IFNPTF9JUFY2KVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gODc5OlxcdFxcbiA4ODA6XFx0XFx0ZXJyID0gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA4ODE6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJcXG4gODgyOlxcdFxcdC8qIHdlIG5lZWQgdG8gZXhjbHVkZSBhbGwgcG9zc2libGUgRU5PUFJPVE9PUFRzIGV4Y2VwdCBkZWZhdWx0IGNhc2UgKi9cXG4gODgzOlxcdFxcdGlmIChlcnIgPT0gLUVOT1BST1RPT1BUIFxcdTAwMjZcXHUwMDI2IG9wdG5hbWUgIT0gSVBWNl9JUFNFQ19QT0xJQ1kgXFx1MDAyNlxcdTAwMjZcXG4gODg0OlxcdFxcdFxcdFxcdG9wdG5hbWUgIT0gSVBWNl9YRlJNX1BPTElDWSlcXG4gODg1OlxcdFxcdFxcdGVyciA9IG5mX3NldHNvY2tvcHQoc2ssIFBGX0lORVQ2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDg4NjpcXHQjZW5kaWZcXG4gODg3OlxcdFxcdHJldHVybiBlcnI7XFxuIDg4ODpcXHR9XFxuIDg4OTpcXHRFWFBPUlRfU1lNQk9MKGlwdjZfc2V0c29ja29wdCk7XFxuIDg5MDpcXHRcXG4gODkxOlxcdHN0YXRpYyBpbnQgaXB2Nl9nZXRzb2Nrb3B0X3N0aWNreShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LFxcbiA4OTI6XFx0XFx0XFx0XFx0XFx0ICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IGxlbilcXG4gODkzOlxcdHtcXG4gODk0OlxcdFxcdHN0cnVjdCBpcHY2X29wdF9oZHIgKmhkcjtcXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0aWYgKCFvcHQpXFxuIDg5NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDkwMDpcXHRcXHRjYXNlIElQVjZfSE9QT1BUUzpcXG4gOTAxOlxcdFxcdFxcdGhkciA9IG9wdC1cXHUwMDNlaG9wb3B0O1xcbiA5MDI6XFx0XFx0XFx0YnJlYWs7XFxuIDkwMzpcXHRcXHRjYXNlIElQVjZfUlRIRFJEU1RPUFRTOlxcbiA5MDQ6XFx0XFx0XFx0aGRyID0gb3B0LVxcdTAwM2Vkc3Qwb3B0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoxMS42MTk5Njc5MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyMzM4MDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJUHY2IFNvY2tldCBGaWx0ZXJpbmcgSW5xdWlyeSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaylgIGFuZCBgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spYCBmdW5jdGlvbnMgYXJlIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlaXIgdXNhZ2UsIHRvIG1hcCB0aGVpciBpbmZsdWVuY2Ugd2l0aGluIHRoZSBjb2RlLiBTbywgdGhlIG1vc3QgZWZmaWNpZW50IHJvdXRlIGlzIGEgY29kZSBzZWFyY2g6IEknbGwgdXNlIGBncmVwYCB0byBodW50IGRvd24gYWxsIGluc3RhbmNlcyBvZiBgaW5ldF90ZXN0X2JpdGAgdGhhdCBpbnZvbHZlIGVpdGhlciBgRlJFRUJJTkRgIG9yIGBUUkFOU1BBUkVOVGAgYXMgdGhlIGJpdCBhcmd1bWVudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBvciBjb2RlIGJsb2Nrcy4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgZmxhZ3MgaW4gSVB2Ni5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjE0Ljk0MzM1MTY1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzMTc3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF90ZXN0X2JpdFxcXFwoKEZSRUVCSU5EfFRSQU5TUEFSRU5UKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jPTk3PWludCBpbmV0X2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYxLVxcdGluZXRfc29ja29wdC5pc19pY3NrXFx0PSBpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxNjI6XFx0aW5ldF9zb2Nrb3B0LmZyZWViaW5kXFx0PSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTYzLVxcdGluZXRfc29ja29wdC5oZHJpbmNsXFx0PSBpbmV0X3Rlc3RfYml0KEhEUklOQ0wsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xNjQtXFx0aW5ldF9zb2Nrb3B0Lm1jX2xvb3BcXHQ9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjE2NTpcXHRpbmV0X3NvY2tvcHQudHJhbnNwYXJlbnQgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTY2LVxcdGluZXRfc29ja29wdC5tY19hbGxcXHQ9IGluZXRfdGVzdF9iaXQoTUNfQUxMLCBzayk7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYz0xNjg9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqaW5ldF90d3NrX2FsbG9jKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTE5OC1cXHRcXHR0dy1cXHUwMDNldHdfaXB2Nm9ubHlcXHQgICAgPSAwO1xcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jOjE5OTpcXHRcXHR0dy1cXHUwMDNldHdfdHJhbnNwYXJlbnQgID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwMC1cXHRcXHR0dy1cXHUwMDNldHdfY29ubmVjdF9iaW5kID0gISEoc2stXFx1MDAzZXNrX3VzZXJsb2NrcyBcXHUwMDI2IFNPQ0tfQ09OTkVDVF9CSU5EKTtcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUwNz1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NjEtXFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjI6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTU2My1cXHRcXHRnb3RvIGNvcHl2YWw7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1NzMtXFx0Y2FzZSBJUF9UUkFOU1BBUkVOVDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NzQ6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTU3NS1cXHRcXHRnb3RvIGNvcHl2YWw7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4Ny1cXHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXFx1MDAyNnRtcF9vcHQsIHNrYiwgc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc2ODg6XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlbm9fc3JjY2hlY2sgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4OS1cXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTM9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5Ny1cXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExOTg6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMTk5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDEtXFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAyOlxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMy1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Mzk3PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI4LVxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0Mjk6XFx0XFx0XFx0XFx0XFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc3NrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy00MzAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMi1cXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDMzOlxcdFxcdFxcdFxcdFxcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDM0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz02OTk9c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3NvbF9pcF9zZXQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcxOS1cXHRjYXNlIElQX0ZSRUVCSU5EOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NzIwOlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzIxLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy03MjMtXFx0XFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssXFxubmV0L21wdGNwL3NvY2tvcHQuYzo3MjQ6XFx0XFx0XFx0XFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyNS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTQ1Nz1zdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjYtXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDY3OlxcdFxcdFxcdFxcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY4LVxcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY5LVxcdFxcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ3MDpcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ3MS1cXHRjYXNlIElQX0JJTkRfQUREUkVTU19OT19QT1JUOlxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDgyPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5Mi1cXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTM6XFx0XFx0XFx0XFx0XFx0ICAgIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk0LVxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0OTUtXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDk2OlxcdFxcdFxcdFxcdFxcdCAgICBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5Ny1cXHR9XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTE1NTA9c3RhdGljIHZvaWQgc3luY19zb2NrZXRfb3B0aW9ucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNTk5LVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTYwMDpcXHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNzaywgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE2MDE6XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzc2ssIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNjAyLVxcdGluZXRfYXNzaWduX2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc3NrLCBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzaykpO1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0zNTI9c3RhdGljIGludCBzY3RwX3Y0X2F2YWlsYWJsZSh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzY3RwX3NvY2sgKnNwKVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy0zNjItXFx0ICAgcmV0ICE9IFJUTl9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MzYzOlxcdCAgICFpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTM2NC1cXHQgICAgIVJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoxNS4wMjc2NzQ5OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ1OTUzMzI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUgb2YgRlJFRUJJTkQgYW5kIFRSQU5TUEFSRU5UIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGBGUkVFQklORGAgYW5kIGBUUkFOU1BBUkVOVGAgc29ja2V0IG9wdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoZXJlIHRoZXkncmUgYWN0dWFsbHkgZGVwbG95ZWQgaW4gdGhlIGtlcm5lbCwgeW91IGtub3csIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW1wbGljYXRpb25zIGZ1bGx5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJwbGF5IHdpdGggb3RoZXIgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucywgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLCBJIGhhdmVuJ3QgZnVsbHkgY29uc2lkZXJlZCB5ZXQuXG5cblNvLCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHRyYWNpbmcgdGhlaXIgdXNhZ2UgYmV5b25kIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIGNhbGxzLCBtYXliZSBpbiBmdW5jdGlvbnMgbGlrZSBgaW5ldF9iaW5kYCBvciByZWxhdGVkIGJpbmQgZnVuY3Rpb25zLCB0byBzZWUgaWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgaW4gZGlmZmVyZW50IGNvbnRleHRzLiBBIHdpZGVyIHZpZXcgb2YgdGhlIGNvZGUgY291bGQgcXVpY2tseSBvZmZlciB1cCB0aG9zZSBlZGdlLWNhc2VzLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1vcmUgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIHRoZWlyIGJlaGF2aW9yIGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRoYXQgbGFyZ2VyIGNvbnRleHQgdG8gcmVhbGx5IGdyYXNwIHRoZSBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGVtIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGF0IGJpZ2dlciBwaWN0dXJlIGlzIHJlYWxseSB3aGF0IEkgbmVlZCB0byBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTcuNDg3MjEwODI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODU3MTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nhbl9ub25sb2NhbF9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcGluZy5jPTMwMj1zdGF0aWMgaW50IHBpbmdfY2hlY2tfYmluZF9hZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfc29jayAqaXNrLFxcbi0tXFxubmV0L2lwdjQvcGluZy5jLTMzMC1cXHRcXHQgICAgKGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC9waW5nLmM6MzMxOlxcdFxcdCAgICAgIWluZXRfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpc2spKSlcXG5uZXQvaXB2NC9waW5nLmMtMzMyLVxcdFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTcuNTU1Nzg4NDQ3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MDM4NTQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEJpbmRpbmcgQmVoYXZpb3IqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG5vbi1sb2NhbCBiaW5kaW5nIHdvcmtzLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byBjbGFyaWZ5aW5nIHRoZSBiZWhhdmlvci4gSWYgdGhhdCBkb2Vzbid0IHlpZWxkIHRoZSBzcGVjaWZpYyBpbnNpZ2h0cyBJIG5lZWQsIEknbGwgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgYXQgdGhlIG1vcmUgZ2VuZXJhbCBgaW5ldDZfYmluZGAgZnVuY3Rpb24sIG9yIHRoZSBgYWZfaW5ldDYuY2Agc291cmNlIGZpbGUgaXRzZWxmLiBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIG9mdGVuIHNoZWRzIGxpZ2h0IG9uIElQdjQgYXNwZWN0cyB0b28sIGdpdmVuIHRoZWlyIGludGVydHdpbmVkIG5hdHVyZS4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgY29uZGl0aW9ucywgY2hlY2tzLCBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIHN1cnJvdW5kaW5nIGhvdyB3ZSBhbGxvdyBvciBwcmV2ZW50IGEgc29ja2V0IGZyb20gYmluZGluZyB0byBhbiBhZGRyZXNzIHRoYXQgaXNuJ3QgZXhwbGljaXRseSBhc3NpZ25lZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjE5LjQ1OTY0NjY3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MzAwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlJFRUJJTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAwLVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDE6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDItXFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDMtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwNDpcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA1OlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9OTkzPWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDAtXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEyMDE6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAyOlxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTIwMy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MTkuNTA1MTgzMDIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxOTIxMjYxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgYW5kIFRyYW5zcGFyZW5jeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYFRSQU5TUEFSRU5UYCwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LiBNeSBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHdpdGhpbiB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkuIEknbSBpbWFnaW5pbmcgdGhlcmUncyBzb21lIGtpbmQgb2Ygc29ja2V0IG9wdGlvbiBvciBhIGZsYWcgZGVmaW5lZCBzb21ld2hlcmUgdGhhdCdzIHRpZWQgdG8gdGhpcyBjb25jZXB0IG9mIHRyYW5zcGFyZW5jeS4gSSdtIHBpY3R1cmluZyB0aGUgaW5jbHVkZSBmaWxlcywgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnPigKYgd2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBEb2VzIGl0IHJlbGF0ZSB0byBhZGRyZXNzIGhhbmRsaW5nIG9yIHJvdXRpbmcgaW4gYW55IHNwZWNpZmljIHdheSB3aXRoaW4gdGhlIElQdjYgc3RhY2s/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0cmFuc3BhcmVuY3kgaXMgKmltcGxlbWVudGVkKiBpbiBJUHY2IHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIEVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGUgSVB2NiBwcm90b2NvbCBoYW5kbGVzIGNvbm5lY3Rpb25zLCByb3V0aW5nLCBhbmQgZmlsdGVyaW5nIHdoZW4gdGhpcyBcIlRSQU5TUEFSRU5UXCIgc2V0dGluZyBpcyBlbmdhZ2VkLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBhc3BlY3RzIG9mIGEgY29ubmVjdGlvbiBhcmUgZXhwb3NlZCwgb3IgaGlkZGVuLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjoyNi42OTczMTIwOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjkzMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRSQU5TUEFSRU5UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwNi1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDA3OlxcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDA4LVxcdFxcdGlmICh2YWxib29sIFxcdTAwMjZcXHUwMDI2ICFzb2Nrb3B0X25zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MTItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQxMzpcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi9cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDE0OlxcdFxcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssIHZhbGJvb2wpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MTUtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9OTkzPWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExOTYtXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExOTc6XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTk4OlxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTE5OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MjYuNzQ0NjEwNzgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3NzcxODk3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBhIEZ1bmN0aW9uIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20ga25lZS1kZWVwIGluIHRoaXMgbmV0d29ya2luZyBjb2RlLCBhbmQgSSd2ZSBoaXQgYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYCBpcyBkb2luZy4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLCBidXQgSSBjYW4ndCBpbW1lZGlhdGVseSByZWNhbGwgaXRzIGRlZmluaXRpb24gb3IgdGhlIHNwZWNpZmljcyBvZiBpdHMgaW1wbGVtZW50YXRpb24uIFRoaXMgc3VnZ2VzdHMgSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBkZWZpbmVkLiBJcyBpdCBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgZmlsZT8gSXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXIgSSdtIG1pc3Npbmc/IE9yIG1heWJlIGl0J3MgY29taW5nIGZyb20gYSBtb3JlIGdlbmVyYWwgbmV0d29ya2luZyBsaWJyYXJ5IHRoYXQgSSBoYXZlIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaD8gVGhlIG5hbWUgaGludHMgYXQgcGVybWlzc2lvbnMgYW5kIGJpbmRpbmcgc29ja2V0cywgYnV0IEkgcmVhbGx5IG5lZWQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgdG8gc2VlIGlmIG15IHVuZGVyc3RhbmRpbmcgaXMgY29ycmVjdCBhbmQgd2hhdCB0aGUgc3BlY2lmaWMgZGV0YWlscyBhcmUuIFRpbWUgdG8gc3RhcnQgdGhlIGh1bnQhIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBhbiBJREUgc2VhcmNoLCBidXQgSSBtaWdodCBuZWVkIHRvIGxldmVyYWdlIHRoZSBjcm9zcy1yZWZlcmVuY2UgY2FwYWJpbGl0aWVzIG9mIG15IGVkaXRvciBpZiBpdCdzIG1vcmUgZGVlcGx5IG5lc3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozMi41MjE4MDMyNjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTI0NjE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nhbl9ub25sb2NhbF9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfc29jay5oPTQyNz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9nZXRfY29udmVydF9jc3VtKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQzMi1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0MzM6c3RhdGljIGlubGluZSBib29sIGluZXRfY2FuX25vbmxvY2FsX2JpbmQoc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQzNC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaD00NDE9c3RhdGljIGlubGluZSBib29sIGluZXRfYWRkcl92YWxpZF9vcl9ub25sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDUte1xcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oOjQ0NjpcXHRyZXR1cm4gaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIHx8XFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQ3LVxcdFxcdGFkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MzIuNjYxMDU1MTA2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNDM2NzM5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IEJpbmRpbmcgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbmV0d29yayBzb2NrZXQgYmluZGluZywgc3BlY2lmaWNhbGx5IG5vbi1sb2NhbCBiaW5kcy4gSSBzZWUgdGhpcyBmdW5jdGlvbiBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgYmVpbmcgZmxhZ2dlZCBhcyByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZTogaXQncyBjbGVhcmx5IGNvbm5lY3RlZCB0byBgRlJFRUJJTkRgIGFuZCBgVFJBTlNQQVJFTlRgIHNvY2tldCBvcHRpb25zLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgaXQgd29ya3MuIExldCBtZSBqdXN0IGdsYW5jZSBhdCBgaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmhgLCBsaW5lcyA0MzAtNDQwLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBsb2dpYy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCwgYmVjYXVzZSB0aG9zZSBmbGFncyBoYXZlIGEgbG90IG9mIGJlYXJpbmcgb24gaG93IHRoZSBrZXJuZWwgdHJlYXRzIG91dGdvaW5nIHBhY2tldHMgYW5kIHNvdXJjZSBhZGRyZXNzZXMsIGRlcGVuZGluZyBvbiB0aGUgc29ja2V0IGFuZCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjM1LjAwNDczMTY2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0X3NvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0fVxcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXG4gNDMzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kKHN0cnVjdCBuZXQgKm5ldCxcXG4gNDM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGluZXRfc29jayAqaW5ldClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdHJldHVybiBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSB8fFxcbiA0Mzc6XFx0XFx0XFx0dGVzdF9iaXQoSU5FVF9GTEFHU19GUkVFQklORCwgXFx1MDAyNmluZXQtXFx1MDAzZWluZXRfZmxhZ3MpIHx8XFxuIDQzODpcXHRcXHRcXHR0ZXN0X2JpdChJTkVUX0ZMQUdTX1RSQU5TUEFSRU5ULCBcXHUwMDI2aW5ldC1cXHUwMDNlaW5ldF9mbGFncyk7XFxuIDQzOTpcXHR9XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbiA0NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbmV0X3NvY2sgKmluZXQsXFxuIDQ0MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTMyIGFkZHIsXFxuIDQ0NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGFkZHJfdHlwZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6MzUuMDA0ODA0OTI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODgwMjAwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW50ZXJuYWwgSW52ZXN0aWdhdGlvbiBvZiBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgaW4gSVB2NioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kYC4gVGhlIGZpcnN0IHRoaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBpcyBjaGVjayBmb3IgYElORVRfRkxBR1NfRlJFRUJJTkRgIGFuZCBgSU5FVF9GTEFHU19UUkFOU1BBUkVOVGAuIE1ha2VzIHNlbnNlLCB0aG9zZSBmbGFncyBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBhbGxvd2luZyBiaW5kaW5nIHRvIG5vbi1sb2NhbCBhZGRyZXNzZXMuIEJ1dCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIHVzZWQgd2l0aGluIHRoZSBJUHY2IHN0YWNrPyBJIG5lZWQgdG8gdHJhY2UgaXRzIHBhdGggdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYmV0dGVyLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBJUHY2IGhhbmRsZXMgdGhlc2Ugc2NlbmFyaW9zLiBMZXQncyBzZWUuLi4gYGluZXQ2X2JpbmRgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB3aGVyZSBpdCdzIGNhbGxlZCBpbiB0aGUgSVB2NiBjb250ZXh0LiBMZXQgbWUgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozNy4yOTI4MjgwOThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODI1MzcxMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfY2FuX25vbmxvY2FsX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NjozOC41NzUzNzM0ODFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1Mjg1MzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIHByb2JhYmx5IGNvbmNlcm5pbmcgSVB2Ni4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIElQdjYgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcywgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggY29tbW9uIGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3Igc3lzY3RsIHZhcmlhYmxlcyB0aGF0IGluZmx1ZW5jZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIElQIGFkZHJlc3NlcyBhbmQgYmluZGluZ3MuIFRvIGRvIHRoYXQsIEknbGwgdXNlIGBncmVwYC4gSSB3YW50IHRvIHNlYXJjaCBmb3IgdGhlIHRlcm1zIGBpbmV0X2ZsYWdzYCwgYmVjYXVzZSBpdCdzIGEgdXNlZnVsIG5hbWUgZm9yIGZsYWdzLCBhbmQgYHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kYCwgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdG8gaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgc3lzdGVtIGJpbmRpbmcgdG8gYWRkcmVzc2VzIHRoYXQgaXQgZG9lc24ndCBvd24uIEFuZCBzaW5jZSBJJ20gY29uY2VybmVkIGFib3V0IElQdjYgc3BlY2lmaWNhbGx5LCBJJ2xsIHRhcmdldCB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgdG8gZm9jdXMgbXkgc2VhcmNoIGFuZCBtaW5pbWl6ZSBpcnJlbGV2YW50IHJlc3VsdHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0MC44MjgyMzc5NjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjM3MjQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjdGxfaXBfbm9ubG9jYWxfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQwLjg5NjQ4NjcxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjIzNDIzODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGluZXQ2X2JpbmRgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpbmV0Nl9iaW5kYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBjb2RlIHdpdGhpbiBgbmV0L2lwdjYvYWZfaW5ldDYuY2AsIGxvb2tpbmcgYXQgdGhlIGBpbmV0Nl9iaW5kYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgYmluZGluZyBhbiBJUHY2IHNvY2tldCB0byBhIGxvY2FsIGFkZHJlc3MgcmVzaWRlcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGFkZHJlc3MgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQsIGhvdyB0aGUgc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJvdXRpbmcgc3Vic3lzdGVtIGZvciBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gaWYgdGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgb25lLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgYmluZGluZyBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGl0IGhhbmRsZXMgc2NvcGVkIGFkZHJlc3NlcyB2ZXJzdXMgZ2xvYmFsIG9uZXM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBgSVBWNl9WNk9OTFlgIG9wdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGR1YWwtc3RhY2sgc29ja2V0cy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBzb2xpZCBncmlwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ4MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQzLjExOTkxMzAyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMzI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlJFRUJJTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuYz05Nz1pbnQgaW5ldF9kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE2MS1cXHRpbmV0X3NvY2tvcHQuaXNfaWNza1xcdD0gaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzayk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTYyOlxcdGluZXRfc29ja29wdC5mcmVlYmluZFxcdD0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE2My1cXHRpbmV0X3NvY2tvcHQuaGRyaW5jbFxcdD0gaW5ldF90ZXN0X2JpdChIRFJJTkNMLCBzayk7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTYwOT12b2lkIGlwX3NvY2tfc2V0X2ZyZWViaW5kKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTYxMC17XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo2MTE6XFx0aW5ldF9zZXRfYml0KEZSRUVCSU5ELCBzayk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02MTItfVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05MTEtXFx0Y2FzZSBJUF9ST1VURVJfQUxFUlQ6XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5MTI6XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTkxMy1cXHRjYXNlIElQX1BBU1NTRUM6XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTk4Ny1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjk4ODpcXHRjYXNlIElQX0ZSRUVCSU5EOlxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTg5LVxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyAxKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTkwLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTkxOlxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbCk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05OTItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTYwLVxcdFxcdGdvdG8gY29weXZhbDtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjE6XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1NjI6XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTU2My1cXHRcXHRnb3RvIGNvcHl2YWw7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwMC1cXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDAxOlxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAyLVxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAzLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo0MDQ6XFx0XFx0LyogU2hhcmVkIHdpdGggSVBfRlJFRUJJTkQuICovXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwNTpcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDA2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk5Mz1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMjAwLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMjAxOlxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTIwMjpcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEyMDMtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTM5Nz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQwNi1cXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MDc6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDA4LVxcdFxcdGxvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzMC1cXHRcXHRcXHRicmVhaztcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQzMTpcXHRcXHRjYXNlIElQVjZfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MzI6XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQzMzpcXHRcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQzNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9NDQ0PXN0YXRpYyBib29sIG1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ0OC1cXHRcXHQvKiBzaG91bGQgd29yayBmaW5lICovXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0NDk6XFx0XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ1MC1cXHRcXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy01MTUtXFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NTE2OlxcdFxcdGNhc2UgSVBWNl9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTUxNy1cXHRcXHRjYXNlIElQVjZfUEtUSU5GTzpcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9Njk5PXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfaXBfc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy03MTgtXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxubmV0L21wdGNwL3NvY2tvcHQuYzo3MTk6XFx0Y2FzZSBJUF9GUkVFQklORDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjcyMDpcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNzaywgaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTcyMS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9NzczPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNzc2LVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Nzc3OlxcdGNhc2UgSVBfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYy03NzgtXFx0Y2FzZSBJUF9UUkFOU1BBUkVOVDpcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTQ1Nz1zdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0NjQtXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sIFJFQURfT05DRShpbmV0X3NrKHNrKS1cXHUwMDNldG9zKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDY1OlxcdGNhc2UgSVBfRlJFRUJJTkQ6XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDY2LVxcdFxcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6MTQ2NzpcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ2OC1cXHRjYXNlIElQX1RSQU5TUEFSRU5UOlxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDgyPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5My1cXHRcXHRcXHRcXHRcXHQgICAgaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTQ6XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQ5NS1cXHRcXHRyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbixcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjE0OTY6XFx0XFx0XFx0XFx0XFx0ICAgIGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDk3LVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9MTU1MD1zdGF0aWMgdm9pZCBzeW5jX3NvY2tldF9vcHRpb25zKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE2MDAtXFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzc2ssIGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKSk7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNjAxOlxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc3NrLCBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzaykpO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTYwMi1cXHRpbmV0X2Fzc2lnbl9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNzaywgaW5ldF90ZXN0X2JpdChCSU5EX0FERFJFU1NfTk9fUE9SVCwgc2spKTtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9MzUyPXN0YXRpYyBpbnQgc2N0cF92NF9hdmFpbGFibGUodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMzYyLVxcdCAgIHJldCAhPSBSVE5fTE9DQUwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjM2MzpcXHQgICAhaW5ldF90ZXN0X2JpdChGUkVFQklORCwgc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0zNjQtXFx0ICAgICFSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NDMuMTg3MTUwOTQ2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3NTAxNTg2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIElQdjYgTm9uLUxvY2FsIEJpbmRpbmcgQ2FwYWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBpbmV0Nl9jYW5fbm9ubG9jYWxfYmluZGAgZnVuY3Rpb24gYWN0dWFsbHkgKmV4aXN0cyouIEknbSBmYWlybHkgY2VydGFpbiBJJ3ZlIGNvbWUgYWNyb3NzIGl0IGJlZm9yZSwgYnV0IGJldHRlciB0byBiZSBzdXJlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbi4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGgsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9uZXQvaXB2Ni5oYC4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGdpdmVuIHRoZSBuYW1lLiBJZiB0aGF0IGRvZXNuJ3QgeWllbGQgcmVzdWx0cywgb3IgaWYgSSB3YW50IHRvIGJlICpyZWFsbHkqIHRob3JvdWdoIGFuZCBjaGVjayBmb3IgYW55IHBvdGVudGlhbCB1c2VzIG9mIHRoZSB1bmRlcmx5aW5nIGNvbmNlcHQsIEkgY2FuIGFsd2F5cyBidXN0IG91dCBhIGBncmVwYCBmb3IgYGNhbl9ub25sb2NhbF9iaW5kYCBhY3Jvc3MgdGhlIHNvdXJjZSB0cmVlLiBUaGlzIHdpbGwgbGV0IG1lIGNvbmZpcm0gdGhlIGZ1bmN0aW9uIGFuZCBpdHMgYmVoYXZpb3IgYW5kIHVzZSBjYXNlcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU2OjQ1LjkzNzMxMTY4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODYxOTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9jYW5fbm9ubG9jYWxfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTY6NDYuMDYyMTgzMDMyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNzQxNDA4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBEaXZpbmc6IFRoZSBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAgSHVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSd2ZSBnb3QgYSBodW5jaCDigJMgbGV0J3Mgc2VlIGlmIGl0IGhvbGRzIHVwLiBNeSBmaXJzdCBtb3ZlIGhlcmUgaXMgdG8gZ2V0IGEgYnJvYWQgdmlldywgYSByZWFsIGxheSBvZiB0aGUgbGFuZCwgc28gSSdtIGdvaW5nIHRvIHJ1biBhIGdsb2JhbCBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZSBsb29raW5nIGZvciBgaW5ldF9jYW5fbm9ubG9jYWxfYmluZGAuIEkgd2FudCB0byBzZWUgKmV2ZXJ5KiBpbnN0YW5jZSwgZXZlcnkgdXNhZ2UsIGV2ZXJ5IGRlY2xhcmF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgcHJvdmlkZSB0aGUgY29udGV4dCBJIG5lZWQuIFRoaXMgaW5pdGlhbCBzY2FuIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbi4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgYml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0OC4yMzYzMjY5NDFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzA3NzgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9jYW5fbm9ubG9jYWxfYmluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pbmV0X3NvY2suaD00Mjc9c3RhdGljIGlubGluZSBib29sIGluZXRfZ2V0X2NvbnZlcnRfY3N1bShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzItXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6NDMzOnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nhbl9ub25sb2NhbF9iaW5kKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00MzQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0KVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQ1LXtcXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaDo0NDY6XFx0cmV0dXJuIGluZXRfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpbmV0KSB8fFxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0Ny1cXHRcXHRhZGRyID09IGh0b25sKElOQUREUl9BTlkpIHx8XFxuLS1cXG5uZXQvaXB2NC9waW5nLmM9MzAyPXN0YXRpYyBpbnQgcGluZ19jaGVja19iaW5kX2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9zb2NrICppc2ssXFxuLS1cXG5uZXQvaXB2NC9waW5nLmMtMzMwLVxcdFxcdCAgICAoY2hrX2FkZHJfcmV0ICE9IFJUTl9MT0NBTCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L3BpbmcuYzozMzE6XFx0XFx0ICAgICAhaW5ldF9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGlzaykpKVxcbm5ldC9pcHY0L3BpbmcuYy0zMzItXFx0XFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1Njo0OS45MDcxNDA1MzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcwODQ0MDMzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBJUHY2IEJpbmRpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcyBJUHY2IGJpbmRpbmcgaXNzdWUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmV0Nl9iaW5kYCwgc28gSSdtIG5hdmlnYXRpbmcgc3RyYWlnaHQgdG8gdGhhdCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L2FmX2luZXQ2LmNgLiBMZXQncyBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHNwZWNpZmljYWxseSwgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgc29ja2V0IGF0dGVtcHRzIHRvIGJpbmQgdG8gYW4gSVB2NiBhZGRyZXNzLiBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwncyBhZGRyZXNzIGZhbWlseSBhYnN0cmFjdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGR1YWwgbmF0dXJlIG9mIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzLiBUaW1lIHRvIGRpc3NlY3QgdGhpcyBjb2RlIGFuZCBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowNi45OTE1NDYzMDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdGlmICghc2spXFxuIDQ2MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDY0OlxcdFxcbiA0NjU6XFx0XFx0LyogRnJlZSBtYyBsaXN0cyAqL1xcbiA0NjY6XFx0XFx0aXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0LyogRnJlZSBhYyBsaXN0cyAqL1xcbiA0Njk6XFx0XFx0aXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0cmV0dXJuIGluZXRfcmVsZWFzZShzb2NrKTtcXG4gNDcyOlxcdH1cXG4gNDczOlxcdEVYUE9SVF9TWU1CT0woaW5ldDZfcmVsZWFzZSk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdHZvaWQgaW5ldDZfY2xlYW51cF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4gNDc2OlxcdHtcXG4gNDc3OlxcdFxcdHN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTtcXG4gNDc4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ3OTpcXHRcXHRzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDtcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdHNrYiA9IHhjaGcoXFx1MDAyNm5wLVxcdTAwM2Vwa3RvcHRpb25zLCBOVUxMKTtcXG4gNDg0OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRza2IgPSB4Y2hnKFxcdTAwMjZucC1cXHUwMDNlcnhwbXR1LCBOVUxMKTtcXG4gNDg3OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHQvKiBGcmVlIGZsb3dsYWJlbHMgKi9cXG4gNDkwOlxcdFxcdGZsNl9mcmVlX3NvY2tsaXN0KHNrKTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0LyogRnJlZSB0eCBvcHRpb25zICovXFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdG9wdCA9IHVucmN1X3BvaW50ZXIoeGNoZyhcXHUwMDI2bnAtXFx1MDAzZW9wdCwgTlVMTCkpO1xcbiA0OTU6XFx0XFx0aWYgKG9wdCkge1xcbiA0OTY6XFx0XFx0XFx0YXRvbWljX3N1YihvcHQtXFx1MDAzZXRvdF9sZW4sIFxcdTAwMjZzay1cXHUwMDNlc2tfb21lbV9hbGxvYyk7XFxuIDQ5NzpcXHRcXHRcXHR0eG9wdF9wdXQob3B0KTtcXG4gNDk4OlxcdFxcdH1cXG4gNDk5OlxcdH1cXG4gNTAwOlxcdFxcbiA1MDE6XFx0LypcXG4gNTAyOlxcdCAqXFx0VGhpcyBkb2VzIGJvdGggcGVlcm5hbWUgYW5kIHNvY2tuYW1lLlxcbiA1MDM6XFx0ICovXFxuIDUwNDpcXHRpbnQgaW5ldDZfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbiA1MDU6XFx0XFx0XFx0ICBpbnQgcGVlcilcXG4gNTA2OlxcdHtcXG4gNTA3OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdWFkZHI7XFxuIDUwODpcXHRcXHRpbnQgc2luX2FkZHJfbGVuID0gc2l6ZW9mKCpzaW4pO1xcbiA1MDk6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDUxMDpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuIDUxMTpcXHRcXHRzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdHNpbi1cXHUwMDNlc2luNl9mYW1pbHkgPSBBRl9JTkVUNjtcXG4gNTE0OlxcdFxcdHNpbi1cXHUwMDNlc2luNl9mbG93aW5mbyA9IDA7XFxuIDUxNTpcXHRcXHRzaW4tXFx1MDAzZXNpbjZfc2NvcGVfaWQgPSAwO1xcbiA1MTY6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gNTE3OlxcdFxcdGlmIChwZWVyKSB7XFxuIDUxODpcXHRcXHRcXHRpZiAoIWluZXQtXFx1MDAzZWluZXRfZHBvcnQgfHxcXG4gNTE5OlxcdFxcdFxcdCAgICAoKCgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiAoVENQRl9DTE9TRSB8IFRDUEZfU1lOX1NFTlQpKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzowNi45OTE2Mzk0NzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk2OTg4NzkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgQmluZCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgaW5ldDZfYmluZGAuIExldCdzIGdldCByaWdodCBpbnRvIGl0LCBJJ2xsIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBJIGtub3cgdGhhdCBgaW5ldDZgIHN0dWZmIGlzIGhhbmRsZWQgaW4gYG5ldC9pcHY2YCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZmluZCBgYWZfaW5ldDYuY2AuIE5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSBgaW5ldDZfYmluZGAgZnVuY3Rpb24gZGVmaW5pdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGNhbiB1c2UgbXkgSURFJ3Mgc2VhcmNoLCBvciBhIHF1aWNrIGBncmVwYCBpZiBJJ20gb24gdGhlIGNvbW1hbmQgbGluZSwgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGxvY2F0aW9uLiBGcm9tIHRoZXJlIEknbGwgc3RhcnQgdG8gcmVjb25zdHJ1Y3QgdGhlIGxvZ2ljYWwgcGF0aCB0aGF0IGlzIG5lZWRlZCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxOTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjA4Ljk2MTUzMTEwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNjgyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGluZXQ2X2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jPTI2NT1pbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTQyNS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjQyNjppbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDI3LXtcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDUxLS8qIGJpbmQgZm9yIElORVQ2IEFQSSAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NDUyOmludCBpbmV0Nl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDUzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MDkuMDA5OTAzOTQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNTcxNjU0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGNvZGUsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYF9faW5ldDZfYmluZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBgX19pbmV0Nl9iaW5kYC4uLiB0aGF0IG5hbWUgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIElQdjYgc29ja2V0IGJpbmRpbmcsIHRoZSBjcml0aWNhbCBzdGVwIG9mIGFzc29jaWF0aW5nIGEgc29ja2V0IHdpdGggYSBzcGVjaWZpYyBhZGRyZXNzIGFuZCBwb3J0LiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBudWFuY2VzIG9mIElQdjYgYWRkcmVzc2luZywgc2NvcGluZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZXJyb3IgY2hlY2tpbmcgcmVsYXRlZCB0byBhZGRyZXNzIGNvbmZsaWN0cyBhbmQgcHJpdmlsZWdlZCBwb3J0cy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBzb2NrYWRkcl9pbjZgIHN0cnVjdHVyZSwgb2J2aW91c2x5LCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc29ja2V0J3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGxpa2VseSB0aGUgYGluZXQ2X3NvY2tgIHN0cnVjdHVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjaywgZXNwZWNpYWxseSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyBzdWJzeXN0ZW0gYW5kIGFueSBuZXRmaWx0ZXIgaG9va3MuIEkgd2FudCB0byBzZWUgaWYgaXTigJlzIHVzaW5nIGFueSBvZiB0aGUgbmV3ZXIgSVB2NiBzcGVjaWZpYyBBUEkgZmVhdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgdXNlcyBsb2NrcyB0byBwcm90ZWN0IGNyaXRpY2FsIHNlY3Rpb25zIG9mIHRoZSBzdHJ1Y3R1cmUuIEknbGwgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGNvZGUgaGFuZGxlcyB3aWxkY2FyZCBhZGRyZXNzZXMgKDo6KSBvciB1bnNwZWNpZmllZCBJUHY2IGFkZHJlc3Nlcy4gQmFzaWNhbGx5LCBJ4oCZbSBtZW50YWxseSBzY2FubmluZyBmb3IgcG90ZW50aWFsIHBpdGZhbGxzIGFuZCBpbmVmZmljaWVuY2llcyByZWxhdGVkIHRvIElQdjYtc3BlY2lmaWMgYWRkcmVzcyBoYW5kbGluZywgcG9ydCBhc3NpZ25tZW50LCBhbmQgZXJyb3IgY29uZGl0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MTIuMTY3MDcxODc3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNTpcXHRcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xcbiAzMTY6XFx0XFx0XFx0XFx0aWYgKCFkZXYpIHtcXG4gMzE3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIDMxODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDMxOTpcXHRcXHRcXHRcXHR9XFxuIDMyMDpcXHRcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdFxcdC8qIFJlcHJvZHVjZSBBRl9JTkVUIGNoZWNrcyB0byBtYWtlIHRoZSBiaW5kaW5ncyBjb25zaXN0ZW50ICovXFxuIDMyMzpcXHRcXHRcXHR2NGFkZHIgPSBhZGRyLVxcdTAwM2VzaW42X2FkZHIuczZfYWRkcjMyWzNdO1xcbiAzMjQ6XFx0XFx0XFx0Y2hrX2FkZHJfcmV0ID0gaW5ldF9hZGRyX3R5cGVfZGV2X3RhYmxlKG5ldCwgZGV2LCB2NGFkZHIpO1xcbiAzMjU6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdFxcdGlmICghaW5ldF9hZGRyX3ZhbGlkX29yX25vbmxvY2FsKG5ldCwgaW5ldCwgdjRhZGRyLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNoa19hZGRyX3JldCkpIHtcXG4gMzI5OlxcdFxcdFxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbiAzMzA6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDMzMTpcXHRcXHRcXHR9XFxuIDMzMjpcXHRcXHR9IGVsc2Uge1xcbiAzMzM6XFx0XFx0XFx0aWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKSB7XFxuIDMzNDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMzc6XFx0XFx0XFx0XFx0aWYgKF9faXB2Nl9hZGRyX25lZWRzX3Njb3BlX2lkKGFkZHJfdHlwZSkpIHtcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgXFx1MDAyNlxcdTAwMjZcXG4gMzM5OlxcdFxcdFxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzaW42X3Njb3BlX2lkKSB7XFxuIDM0MDpcXHRcXHRcXHRcXHRcXHRcXHQvKiBPdmVycmlkZSBhbnkgZXhpc3RpbmcgYmluZGluZywgaWYgYW5vdGhlciBvbmVcXG4gMzQxOlxcdFxcdFxcdFxcdFxcdFxcdCAqIGlzIHN1cHBsaWVkIGJ5IHVzZXIuXFxuIDM0MjpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMzQzOlxcdFxcdFxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYgPSBhZGRyLVxcdTAwM2VzaW42X3Njb3BlX2lkO1xcbiAzNDQ6XFx0XFx0XFx0XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRcXHRcXHRcXHQvKiBCaW5kaW5nIHRvIGxpbmstbG9jYWwgYWRkcmVzcyByZXF1aXJlcyBhbiBpbnRlcmZhY2UgKi9cXG4gMzQ3OlxcdFxcdFxcdFxcdFxcdGlmICghc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZikge1xcbiAzNDg6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzQ5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMzUwOlxcdFxcdFxcdFxcdFxcdH1cXG4gMzUxOlxcdFxcdFxcdFxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpIHtcXG4gMzU0OlxcdFxcdFxcdFxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjEyLjE2NzE5NTU5N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE0MjQwNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIGxpbmVzIDM1NS0zODUgb2YgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBleHByZXNzZWQgYXMgYSBwZXJzb25hbCByZWZsZWN0aW9uOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgSVB2NiBBZGRyZXNzIEZhbWlseSBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBhcyB0aGUgZGV0YWlscyBjYW4gZ2V0IHF1aXRlIGludHJpY2F0ZS4gRm9jdXNpbmcgb24gbGluZXMgMzU1LTM4NSwgaXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGguLi4gKmFoLCB5ZXMsIHRoZSBgaW5ldDZfY3JlYXRlYCBmdW5jdGlvbidzIGhhbmRsaW5nIG9mIHNwZWNpZmljIHNvY2tldCBvcHRpb25zKi4gSSBiZXQgd2UgYXJlIGxvb2tpbmcgYXQgaG93IGEgc29ja2V0IGlzIGJlaW5nIHNldCB1cCBpbiByZWxhdGlvbiB0byB0aGluZ3MgbGlrZSB0cmFmZmljIGNsYXNzZXMsIGZsb3cgbGFiZWxzLCBhbmQgc2NvcGUgSUQuXG5cbkknbSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCB0aGUgZmluZXItZ3JhaW5lZCBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBQcm9iYWJseSwgd2UgYXJlIGNoZWNraW5nIGZvciBpbnZhbGlkIHZhbHVlcywgYW5kIHByb3Blcmx5IGFzc2lnbmluZyBvciBpbml0aWFsaXppbmcgdGhvc2Ugc29ja2V0IG9wdGlvbnMuIEl0IGlzIGxpa2VseSBtYWtpbmcgc3VyZSB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB1bmRlcmx5aW5nIElQdjYgcHJvdG9jb2wuIE1heWJlIHRoZXJlJ3Mgc29tZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIG5ldHdvcmsgaW50ZXJmYWNlcyBoYXBwZW5pbmcgaW4gdGhpcyBzZWdtZW50OyBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnkgZnVuY3Rpb24gY2FsbHMgdGhhdCBtaWdodCBzaWduYWwgdGhhdC5cblxuSXQncyBsaWtlbHkgY2hlY2tpbmcgYW5kIHZhbGlkYXRpbmcgc3BlY2lmaWMgc2V0dGluZ3MgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgUkZDcyBhbmQgb3RoZXIgc3RhbmRhcmRzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3IgZGVmYXVsdCB2YWx1ZXMgYmVpbmcgc2V0LCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGluZ3MgY2FuIGdldCBpbnRlcmVzdGluZy4gVGhlcmUgY291bGQgYmUgc3VidGxldGllcyBpbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgb3IgbmV0d29yayBzdGFjay4gSG1tLCBJIGFudGljaXBhdGUgdGhlcmUgYXJlIGEgc2VyaWVzIG9mIGBpZmAgc3RhdGVtZW50cyByZWxhdGVkIHRvIHZhbGlkYXRpbmcgc29ja2V0IG9wdGlvbiBwYXJhbWV0ZXJzLiBNeSBndWVzcyBpcyB0aGVyZSBhcmUgY2hlY2tzIGZvciBpbnZhbGlkIHRyYWZmaWMgY2xhc3MgdmFsdWVzLCBmbG93IGxhYmVscywgYW5kIGVuc3VyaW5nIHRoZSBzY29wZSBJRCBpcyB3aXRoaW4gdGhlIGFwcHJvcHJpYXRlIHJhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY0MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MTQuOTgxNDM3OTAyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9hZl9pbmV0Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1NTpcXHRcXHRcXHRcXHRcXHRpZiAoIWRldikge1xcbiAzNTY6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdH1cXG4gMzU5OlxcdFxcdFxcdFxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0XFx0XFx0LyogaXB2NCBhZGRyIG9mIHRoZSBzb2NrZXQgaXMgaW52YWxpZC4gIE9ubHkgdGhlXFxuIDM2MjpcXHRcXHRcXHRcXHQgKiB1bnNwZWNpZmllZCBhbmQgbWFwcGVkIGFkZHJlc3MgaGF2ZSBhIHY0IGVxdWl2YWxlbnQuXFxuIDM2MzpcXHRcXHRcXHRcXHQgKi9cXG4gMzY0OlxcdFxcdFxcdFxcdHY0YWRkciA9IExPT1BCQUNLNF9JUFY2O1xcbiAzNjU6XFx0XFx0XFx0XFx0aWYgKCEoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpXFx0e1xcbiAzNjY6XFx0XFx0XFx0XFx0XFx0aWYgKCFpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaW5ldCkgXFx1MDAyNlxcdTAwMjZcXG4gMzY3OlxcdFxcdFxcdFxcdFxcdCAgICAhaXB2Nl9jaGtfYWRkcihuZXQsIFxcdTAwMjZhZGRyLVxcdTAwM2VzaW42X2FkZHIsXFxuIDM2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXYsIDApKSB7XFxuIDM2OTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUFERFJOT1RBVkFJTDtcXG4gMzcwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMzcxOlxcdFxcdFxcdFxcdFxcdH1cXG4gMzcyOlxcdFxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzNzQ6XFx0XFx0XFx0fVxcbiAzNzU6XFx0XFx0fVxcbiAzNzY6XFx0XFxuIDM3NzpcXHRcXHRpbmV0LVxcdTAwM2VpbmV0X3Jjdl9zYWRkciA9IHY0YWRkcjtcXG4gMzc4OlxcdFxcdGluZXQtXFx1MDAzZWluZXRfc2FkZHIgPSB2NGFkZHI7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdHNrLVxcdTAwM2Vza192Nl9yY3Zfc2FkZHIgPSBhZGRyLVxcdTAwM2VzaW42X2FkZHI7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGlmICghKGFkZHJfdHlwZSBcXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpKVxcbiAzODM6XFx0XFx0XFx0bnAtXFx1MDAzZXNhZGRyID0gYWRkci1cXHUwMDNlc2luNl9hZGRyO1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRzYXZlZF9pcHY2b25seSA9IHNrLVxcdTAwM2Vza19pcHY2b25seTtcXG4gMzg2OlxcdFxcdGlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSBcXHUwMDI2XFx1MDAyNiBhZGRyX3R5cGUgIT0gSVBWNl9BRERSX01BUFBFRClcXG4gMzg3OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IDE7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBhcmUgYWxsb3dlZCB0byBiaW5kIGhlcmUuICovXFxuIDM5MDpcXHRcXHRpZiAoc251bSB8fCAhKGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKSB8fFxcbiAzOTE6XFx0XFx0XFx0ICAgICAgKGZsYWdzIFxcdTAwMjYgQklORF9GT1JDRV9BRERSRVNTX05PX1BPUlQpKSkge1xcbiAzOTI6XFx0XFx0XFx0ZXJyID0gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWdldF9wb3J0KHNrLCBzbnVtKTtcXG4gMzkzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMzk0OlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IHNhdmVkX2lwdjZvbmx5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzoxNC45ODE1NDUzNjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE5NDAwMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NiBhbmQgTm9uLUxvY2FsIEJpbmRpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpYC4uLiB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgSVB2NiBuZXR3b3JraW5nIGFuZCB0aGUgY3J1Y2lhbCBjb25jZXB0IG9mIG5vbi1sb2NhbCBiaW5kaW5nLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgd2hlcmUgc29ja2V0IGJpbmRpbmcgYmVoYXZpb3IgbWlnaHQgZGV2aWF0ZSBmcm9tIHRoZSBub3JtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uLiBUbyB0cnVseSBncmFzcCB3aGF0J3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYGlwdjZfY2FuX25vbmxvY2FsX2JpbmRgLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IGVuY2Fwc3VsYXRlIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgaWYgYSBwcm9jZXNzLCBib3VuZCB0byBhbiBJUHY2IGFkZHJlc3MsIGlzIGFsbG93ZWQgdG8gcmVjZWl2ZSB0cmFmZmljIGRlc3RpbmVkIGZvciBhIGRpZmZlcmVudCBhZGRyZXNzIG9uIHRoYXQgaW50ZXJmYWNlLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWNzOiB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byBpdCwgd2hhdCBjcml0ZXJpYSBhcmUgYmVpbmcgY2hlY2tlZCBpbnRlcm5hbGx5LCBhbmQgd2hhdCB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byBtYWtpbmcgYSBqdWRnZW1lbnQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3MTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjE3LjE3NTU1MTczOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDEwMDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X2Nhbl9ub25sb2NhbF9iaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwdjYuaD04NDY9c3RhdGljIGlubGluZSB2b2lkIGlwaF90b19mbG93X2NvcHlfdjZhZGRycyhzdHJ1Y3QgZmxvd19rZXlzICpmbG93LFxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTg1Ny1cXG5pbmNsdWRlL25ldC9pcHY2Lmg6ODU4OnN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9pcHY2LmgtODU5LVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldClcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYz0zMDI9c3RhdGljIGludCBwaW5nX2NoZWNrX2JpbmRfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X3NvY2sgKmlzayxcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy0zNzUtXFxubmV0L2lwdjQvcGluZy5jOjM3NjpcXHRcXHRpZiAoIShpcHY2X2Nhbl9ub25sb2NhbF9iaW5kKG5ldCwgaXNrKSB8fCBoYXNfYWRkciB8fFxcbm5ldC9pcHY0L3BpbmcuYy0zNzctXFx0XFx0ICAgICAgYWRkcl90eXBlID09IElQVjZfQUREUl9BTlkpKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz0yNjU9aW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy0zNjUtXFx0XFx0XFx0aWYgKCEoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpXFx0e1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6MzY2OlxcdFxcdFxcdFxcdGlmICghaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIGluZXQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvYWZfaW5ldDYuYy0zNjctXFx0XFx0XFx0XFx0ICAgICFpcHY2X2Noa19hZGRyKG5ldCwgXFx1MDAyNmFkZHItXFx1MDAzZXNpbjZfYWRkcixcXG4tLVxcbm5ldC9pcHY2L2RhdGFncmFtLmM9Nzk3PWludCBpcDZfZGF0YWdyYW1fc2VuZF9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTg2Ny1cXHRcXHRcXHRcXHRpbnQgc3RyaWN0ID0gX19pcHY2X2FkZHJfc3JjX3Njb3BlKGFkZHJfdHlwZSkgXFx1MDAzYz0gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTDtcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjg2ODpcXHRcXHRcXHRcXHRpZiAoIWlwdjZfY2FuX25vbmxvY2FsX2JpbmQobmV0LCBpbmV0X3NrKHNrKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTg2OS1cXHRcXHRcXHRcXHQgICAgIWlwdjZfY2hrX2FkZHJfYW5kX2ZsYWdzKG5ldCwgXFx1MDAyNnNyY19pbmZvLVxcdTAwM2VpcGk2X2FkZHIsXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0yMTc9c3RhdGljIGludCByYXd2Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMjc2LVxcdFxcdGlmICghKGFkZHJfdHlwZSBcXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvcmF3LmM6Mjc3OlxcdFxcdCAgICAhaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChzb2NrX25ldChzayksIGluZXQpKSB7XFxubmV0L2lwdjYvcmF3LmMtMjc4LVxcdFxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTY4Nz1zdGF0aWMgaW50IHNjdHBfdjZfYXZhaWxhYmxlKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNjdHBfc29jayAqc3ApXFxuLS1cXG5uZXQvc2N0cC9pcHY2LmMtNzE1LVxcbm5ldC9zY3RwL2lwdjYuYzo3MTY6XFx0cmVzID0gaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIFxcdTAwMjZzcC1cXHUwMDNlaW5ldCkgfHxcXG5uZXQvc2N0cC9pcHY2LmMtNzE3LVxcdCAgICAgIGlwdjZfY2hrX2FkZHIobmV0LCBpbjYsIGRldiwgMCk7XFxuLS1cXG5uZXQvc2N0cC9pcHY2LmM9OTQ3PXN0YXRpYyBpbnQgc2N0cF9pbmV0Nl9iaW5kX3ZlcmlmeShzdHJ1Y3Qgc2N0cF9zb2NrICpvcHQsIHVuaW9uIHNjdHBfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy05NjQtXFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBhZGRyLVxcdTAwM2V2Ni5zaW42X3Njb3BlX2lkKTtcXG5uZXQvc2N0cC9pcHY2LmM6OTY1OlxcdFxcdFxcdGlmICghZGV2IHx8ICEoaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChuZXQsIFxcdTAwMjZvcHQtXFx1MDAzZWluZXQpIHx8XFxubmV0L3NjdHAvaXB2Ni5jLTk2Ni1cXHRcXHRcXHRcXHQgICAgICBpcHY2X2Noa19hZGRyKG5ldCwgXFx1MDAyNmFkZHItXFx1MDAzZXY2LnNpbjZfYWRkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MTguNzg5NjU3NDY3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4OTE4OTAxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAgaXMgc3ByaW5rbGVkIHRocm91Z2hvdXQgdGhlIElQdjYgbmV0d29ya2luZyBjb2RlLiBJJ20gc2VlaW5nIGl0IHJlZmVyZW5jZWQgaW4gYF9faW5ldDZfYmluZGAsIGBpcDZfZGF0YWdyYW1fc2VuZF9jdGxgLCBgcmF3djZfYmluZGAsIGBzY3RwX3Y2X2F2YWlsYWJsZWAsIGFuZCBgc2N0cF9pbmV0Nl9iaW5kX3ZlcmlmeWAuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGl0cyBzY29wZSDigJMgbG9va3MgbGlrZSBpdCdzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBob3cgSVB2NiBzb2NrZXQgYmluZGluZyBhbmQgY29udHJvbCBvcGVyYXRpb25zIHdvcmssIHBhcnRpY3VsYXJseSBpbiBib3RoIHJhdyBhbmQgZGF0YWdyYW0gY29udGV4dHMsIGFuZCBldmVuIHdpdGggU0NUUC4gSSBrbm93IGEgYml0IGFib3V0IHRob3NlIHByb3RvY29scywgc28gSSBjYW4gc3RhcnQgdG8gaW5mZXIgd2hhdCBpdHMgcm9sZSBtaWdodCBiZS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBhY3R1YWxseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIHRoaXMgZnVuY3Rpb24gaXMgZXZhbHVhdGluZy4gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHRoZSBhYmlsaXR5IHRvIGJpbmQgYSBzb2NrZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGlzbid0IGxvY2FsIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIHJhaXNlcyBhbGwgc29ydHMgb2Ygc2VjdXJpdHkgYW5kIHJvdXRpbmcgY29uc2lkZXJhdGlvbnMuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBnZXQgYSBjbG9zZSBsb29rLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbm9uLWxvY2FsIGJpbmRpbmdzIGluIElQdjYuIEknbSBjdXJpb3VzIHdoYXQga2luZCBvZiBjaGVja3MgaXQgcGVyZm9ybXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTcwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjEuNjgxNTQ5NjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXB2Ni5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1NTpcXHRcXG4gODU2OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA4NTc6XFx0XFxuIDg1ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9jYW5fbm9ubG9jYWxfYmluZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIDg1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQpXFxuIDg2MDpcXHR7XFxuIDg2MTpcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5zeXNjdGwuaXBfbm9ubG9jYWxfYmluZCkgfHxcXG4gODYyOlxcdFxcdFxcdHRlc3RfYml0KElORVRfRkxBR1NfRlJFRUJJTkQsIFxcdTAwMjZpbmV0LVxcdTAwM2VpbmV0X2ZsYWdzKSB8fFxcbiA4NjM6XFx0XFx0XFx0dGVzdF9iaXQoSU5FVF9GTEFHU19UUkFOU1BBUkVOVCwgXFx1MDAyNmluZXQtXFx1MDAzZWluZXRfZmxhZ3MpO1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0XFxuIDg2NjpcXHQvKiBTeXNjdGwgc2V0dGluZ3MgZm9yIG5ldCBpcHY2LmF1dG9fZmxvd2xhYmVscyAqL1xcbiA4Njc6XFx0I2RlZmluZSBJUDZfQVVUT19GTE9XX0xBQkVMX09GRlxcdFxcdDBcXG4gODY4OlxcdCNkZWZpbmUgSVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcXHQxXFxuIDg2OTpcXHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfT1BUSU5cXHQyXFxuIDg3MDpcXHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfRk9SQ0VEXFx0M1xcbiA4NzE6XFx0XFxuIDg3MjpcXHQjZGVmaW5lIElQNl9BVVRPX0ZMT1dfTEFCRUxfTUFYXFx0XFx0SVA2X0FVVE9fRkxPV19MQUJFTF9GT1JDRURcXG4gODczOlxcdFxcbiA4NzQ6XFx0I2RlZmluZSBJUDZfREVGQVVMVF9BVVRPX0ZMT1dfTEFCRUxTXFx0SVA2X0FVVE9fRkxPV19MQUJFTF9PUFRPVVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjEuNjgxNjQ3NDlaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg4NTA0Nzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBTb2NrZXQgT3B0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGB0ZXN0X2JpdChJTkVUX0ZMQUdTX0ZSRUVCSU5ELCBcdTAwMjZpbmV0LVx1MDAzZWluZXRfZmxhZ3MpYCBhbmQgYHRlc3RfYml0KElORVRfRkxBR1NfVFJBTlNQQVJFTlQsIFx1MDAyNmluZXQtXHUwMDNlaW5ldF9mbGFncylgIHVzZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgaG93IGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIGFyZSBiZWluZyBoYW5kbGVkLiBJbnRlcmVzdGluZyB0aGF0IHRoZXkncmUgbm93IHNldHRpbmcgdGhlc2UgZmxhZ3MgdGhyb3VnaCBjb25jdXJyZW50IHNvY2tldCBvcGVyYXRpb25zLiBUaGUgZmFjdCB0aGF0IGBzb2Nrb3B0X2xvY2tfc29jayhzaylgIGlzbid0IGJlaW5nIGFjcXVpcmVkIGFueW1vcmUgaXMgYSBzaWduaWZpY2FudCBkZXRhaWwsIHN1Z2dlc3RpbmcgYSByZS1hcmNoaXRlY3Rpbmcgb2YgaG93IHRoZXNlIHNvY2tldCBvcHRpb25zIGFyZSBtYW5hZ2VkLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIG9yIGNvbmN1cnJlbmN5IHJlYXNvbnMuIEl0J3MgZGVmaW5pdGVseSB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsaW5rZWQgdG8gYENPTkZJR19JUFY2YC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgdG8gc2VlIGlmIGl0IHJlbGllcyBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgdGhlbiBJJ2xsIHNjYW4gYG5ldC9pcHY2L01ha2VmaWxlYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjQuNTY2Njk4MTI0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVDYpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxuICAxNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSArPSBpcDZtci5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlwdjYtJChDT05GSUdfWEZSTSkgKz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXFxcXG4gIDE5OlxcdFxcdHhmcm02X291dHB1dC5vIHhmcm02X3Byb3RvY29sLm9cXG4gIDIwOlxcdGlwdjYtJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIub1xcbiAgMjE6XFx0aXB2Ni0kKENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUykgKz0gZmliNl9ydWxlcy5vXFxuICAyMjpcXHRpcHY2LSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjM6XFx0aXB2Ni0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAyNDpcXHRpcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG4gIDI1OlxcdGlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxuICAyNjpcXHRpcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSArPSBzZWc2X2htYWMub1xcbiAgMjc6XFx0aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG4gIDI4OlxcdGlwdjYtJChDT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTCkgKz0gaW9hbTZfaXB0dW5uZWwub1xcbiAgMjk6XFx0XFxuICAzMDpcXHRvYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxuICAzMTpcXHRvYmotJChDT05GSUdfSU5FVDZfRVNQKSArPSBlc3A2Lm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRCkgKz0gZXNwNl9vZmZsb2FkLm9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICs9IGlwY29tcDYub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMKSArPSB4ZnJtNl90dW5uZWwub1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgKz0gdHVubmVsNi5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfSVBWNl9NSVA2KSArPSBtaXA2Lm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhL1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHQrPSBuZXRmaWx0ZXIvXFxuICAzOTpcXHRcXG4gIDQwOlxcdG9iai0kKENPTkZJR19JUFY2X1ZUSSkgKz0gaXA2X3Z0aS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjI0LjU2Njc2Mzg5NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODUwNTYxOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipDaGVja2luZyBmb3IgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0lQVjZgIGlzIGEgbmVjZXNzYXJ5IHJlcXVpcmVtZW50LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQncyBwcm9wZXJseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGBDT05GSUdfSVBWNmAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjYgc3Vic3lzdGVtLiBTbywgbGV0IG1lIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2AuIEknbGwgb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBpbnRlbmRlZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfSVBWNmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgb3B0aW9ucyBhcmUgdW5kZXJzdG9vZCB3aXRoaW4gdGhlIHJlbGV2YW50IEtjb25maWcgY29udGV4dC4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB0byBwcm9jZWVkLCBzbyBpdCdzIGJlc3QgdG8gY29uZmlybSBpdCBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwODYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjI2LjQxNzMyODkwNloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Nzg0NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU3OjI2LjQ2NDAwOTU2OVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDMyNjAyMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IHJpZ2h0IGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFyb3VuZCB0aGF0IGxpbmUgNi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBJJ20gYXNzdW1pbmcgdGhpcyBmaWxlIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgdGhlIEtjb25maWcgZmlsZSByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgSVB2Ni1yZWxhdGVkIGZlYXR1cmVzIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJ20gcHJvYmFibHkgaW50ZXJlc3RlZCBpbiBob3cgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IGdyYW51bGFyIGNvbnRyb2wgdGhlIHVzZXIgaGFzIG92ZXIgc3BlY2lmaWMgZmVhdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgZGVzY3JpcHRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZWFjaCBvcHRpb24gZG9lcyBhbmQgd2hlbiBpdCBzaG91bGQgYmUgc2VsZWN0ZWQuIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgbmljaGUgc2V0dXBzIG9yIHNwZWNpZmljIHVzZSBjYXNlcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiBzdG9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzoyOC44OTY2MTUzMDZaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBJUFY2XFxuICAgNzpcXHRcXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTdXBwb3J0IGZvciBJUCB2ZXJzaW9uIDYgKElQdjYpLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IElQdjYsIHNlZVxcbiAgMTQ6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVB2NlxcdTAwM2UuXFxuICAxNTpcXHRcXHQgIEZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBJUHY2IHVuZGVyIExpbnV4LCBzZWVcXG4gIDE2OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYucnN0IGFuZCByZWFkIHRoZSBIT1dUTyBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvSE9XVE8vTGludXgrSVB2Ni1IT1dUTy9cXHUwMDNlXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIElQVjZcXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG4gIDIyOlxcdFxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgUm91dGVyIFByZWZlcmVuY2UgaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIHRoZSBSb3V0ZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MjguODk2NjkzNzQ2WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3ODYyNTg3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gSVB2NiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgSVB2NmAgd29ya3Mgd2l0aGluIHRoaXMgc3lzdGVtLCBhbmQgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIGJvdGggYE5FVGAgYW5kIGBJTkVUYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgSVB2NmAgaXMgYnVpbHQgb24gdGhlIG5ldHdvcmsgbGF5ZXIgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbnRlcm5ldCBwcm90b2NvbC4gVG8gdW5kZXJzdGFuZCBob3cgdGhhdCBhbGwgZml0cyB0b2dldGhlciwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSB0aGUgc3BlY2lmaWNzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYG5ldC9LY29uZmlnYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MzAuNjgyOTU2Mzg3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc4MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9pcHY2L0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MTM3PXNvdXJjZSBcXFwibmV0L2lwdjQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoxMzg6c291cmNlIFxcXCJuZXQvaXB2Ni9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTEzOS1zb3VyY2UgXFxcIm5ldC9uZXRsYWJlbC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1NzozMC43NTY3NDYzNDVaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE2Njk1MjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUgYWdhaW4uIExldCdzIGdldCByaWdodCB0byBpdC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIG9yIHBlcmhhcHMgaG93IGFuIGV4aXN0aW5nIG9uZSBjYW4gYmUgZXhwYW5kZWQuICBMaW5lIDEzOCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0J3Mgb2Z0ZW4gYSBjZW50cmFsIGFyZWEgZm9yIHNwZWNpZmljIGZlYXR1cmVzLCBvciBtYXliZSByZWxhdGVkIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IHdpdGhpbiBhIG5ldHdvcmsgbW9kdWxlLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBzZWN0aW9uIG9mIHRoZSBmaWxlLiBJIGFudGljaXBhdGUgaXQgbWlnaHQgY29udGFpbiBhIGBjb25maWdgIGRlZmluaXRpb24sIGEgYG1lbnVjb25maWdgIGJsb2NrLCBvciBwZXJoYXBzIGV2ZW4gYW4gYGlmYCBzdGF0ZW1lbnQgYmFzZWQgb24gYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgYXQgbGVhc3QgYSBiYXNpYyBgaGVscGAgc2VjdGlvbiBhbmQgcHJvYmFibHkgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0byB1bmRlcnN0YW5kIHRoZSBnYXRpbmcgY29uZGl0aW9ucy4gIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MzQuOTIzNzAxNDkzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ICBiZWhhdmlvciBvZiB0aGUgVENQL0lQIGNvZGUgYnkgd3JpdGluZyB0byB0aGUgKHZpcnR1YWwpIGZpbGVzIGluXFxuIDEzMTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvaXB2NC8qOyB0aGUgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlXFxuIDEzMjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFx1MDAzZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBTaG9ydCBhbnN3ZXI6IHNheSBZLlxcbiAxMzU6XFx0XFxuIDEzNjpcXHRpZiBJTkVUXFxuIDEzNzpcXHRzb3VyY2UgXFxcIm5ldC9pcHY0L0tjb25maWdcXFwiXFxuIDEzODpcXHRzb3VyY2UgXFxcIm5ldC9pcHY2L0tjb25maWdcXFwiXFxuIDEzOTpcXHRzb3VyY2UgXFxcIm5ldC9uZXRsYWJlbC9LY29uZmlnXFxcIlxcbiAxNDA6XFx0c291cmNlIFxcXCJuZXQvbXB0Y3AvS2NvbmZpZ1xcXCJcXG4gMTQxOlxcdFxcbiAxNDI6XFx0ZW5kaWYgIyBpZiBJTkVUXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdGNvbmZpZyBORVRXT1JLX1NFQ01BUktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTc6MzQuOTIzODMzOTgzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjY5MjU2OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBTb2NrZXQgT3B0aW9uIENoYW5nZSBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIHJlbGF0ZWQgdG8gYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvcnJlY3RseSBjb25maWd1cmluZyB0aGUgZnV6emVyLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfSVBWNmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIHdpdGggYENPTkZJR19JTkVUYCBhcyBhIGRlcGVuZGVuY3kuXG5cbkJhc2VkIG9uIHRoZSBpbml0aWFsIGNoZWNrLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBbXCJJUFY2XCJdYC4gV2hpbGUgYElORVRgIGlzIGEgZGVwZW5kZW5jeSwgYElQVjZgIGl0c2VsZiBpcyB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gY29udHJvbGxpbmcgYGlwdjZfc29ja2dsdWUuY2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHBhcnQ6IGBGb2N1c1N5bWJvbHNgLiBUaGUgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGRvX2lwdjZfc2V0c29ja29wdGAgYW5kIGl0cyBlbnRyeSBwb2ludCBgaXB2Nl9zZXRzb2Nrb3B0YC4gV2UgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUgdG8gYXZvaWQgZGlsdXRpb24sIHNvIG5vIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgY291bGQgaW1wYWN0IHRoZSByZXN1bHQuIGBpcHY2X2Nhbl9ub25sb2NhbF9iaW5kYCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIGl0IGNhbiBiZSBvbWl0dGVkLiBgZG9faXB2Nl9nZXRzb2Nrb3B0YCBpcyByZWxldmFudCwgYnV0IHRoZSBmb2N1cyBpcyBvbiBtb2RpZmljYXRpb24uIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGlzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBpdCBpcyAqbm90KiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIGBpcHY2X3NldHNvY2tvcHRgIGlzIGFsc28gKm5vdCogc3RhdGljLCBhbmQgaXMgdGhlIGVudHJ5IHBvaW50LiBJJ20gZm9jdXNpbmcgb24gdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIGFuZCB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy5cblxuVGhlIGRpZmYgY29uZmlybXMgbXkgYXNzZXNzbWVudDsgb25seSBjaGFuZ2VzIHdpdGhpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGBkb19pcHY2X3NldHNvY2tvcHRgIChsaW5lcyA0MDEtNDE1IGFuZCA2NjYtNjg4KS4gVGh1cywgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGBbXCJkb19pcHY2X3NldHNvY2tvcHRcIiwgXCJpcHY2X3NldHNvY2tvcHRcIl1gLlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGxvY2tpbmcgY29udHJhY3QsIGVuYWJsaW5nIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHRvIGJlIHNldCB3aXRob3V0IGhvbGRpbmcgdGhlIHNvY2tldCBsb2NrLiBUaGlzIGltcGFjdHMgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBjb25jdXJyZW5jeSBpc3N1ZXMgYWNjZXNzaWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgYHNldHNvY2tvcHRgIGNhbGxzLiBUaGlzIGNoYW5nZSBuZWVkcyB0aG9yb3VnaCB0ZXN0aW5nIHRvIGlkZW50aWZ5IGFueSByYWNlcy5cblxuSW4gc3VtbWFyeSwgdGhlIGZ1enplciB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgbG9ja2luZyBmb3IgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCwgd2hpY2ggY291bGQgZXhwb3NlIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBzZXRzb2Nrb3B0LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiZG9faXB2Nl9zZXRzb2Nrb3B0XCIsIFwiaXB2Nl9zZXRzb2Nrb3B0XCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIklQVjZcIl1gXG5cblJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjQyLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1ODowNS4xOTMwOTQyODVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY2NTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX2lwdjZfc2V0c29ja29wdFwiLFxuICAgIFwiaXB2Nl9zZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gaGFuZGxlIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgd2l0aG91dCBhY3F1aXJpbmcgc29ja29wdF9sb2NrX3NvY2soKS4gVGhpcyBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBzZXRzb2Nrb3B0KCkgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIChmb3IgSVBWNl9GUkVFQklORCkgb3IgYXBwcm9wcmlhdGVseSBwZXJtaXR0ZWQgbmFtZXNwYWNlcyAoZm9yIElQVjZfVFJBTlNQQVJFTlQpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZW5zdXJlIG5vIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByZWdyZXNzaW9ucyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9faXB2Nl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcHY2X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb19pcHY2X3NldHNvY2tvcHQoKSB0byBoYW5kbGUgSVBWNl9GUkVFQklORCBhbmQgSVBWNl9UUkFOU1BBUkVOVCBzb2NrZXQgb3B0aW9ucyB3aXRob3V0IGFjcXVpcmluZyBzb2Nrb3B0X2xvY2tfc29jaygpLiBUaGlzIGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRpcmVjdGx5IGFjY2Vzc2libGUgdmlhIHNldHNvY2tvcHQoKSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgKGZvciBJUFY2X0ZSRUVCSU5EKSBvciBhcHByb3ByaWF0ZWx5IHBlcm1pdHRlZCBuYW1lc3BhY2VzIChmb3IgSVBWNl9UUkFOU1BBUkVOVCksIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgbm8gY29uY3VycmVuY3kgaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1ODowNS4yNjY3NjY5OTNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDk3ODkxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTg6MDUuMjY3MjIyMjMzWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk0OTc0MzI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIGluIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIHRoZSBsb2NrbGVzcyBzd2l0Y2gtc3RhdGVtZW50IGJsb2NrIGJlZm9yZSBsb2NrX3NvY2soc2spIGlzIGFjcXVpcmVkLiBUaGUgb3B0aW9ucyBhcmUgc2V0IHVzaW5nIGluZXRfYXNzaWduX2JpdCgpLCBtb2RpZnlpbmcgYml0IGZsYWdzIG9uIHRoZSBzb2NrZXQuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2VhOTZiZDRjNDQyOTU4MGQ3OTI0NzJmNjRhN2IwZTY5MWEzMWFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjU1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCAxZjY4ZmI2NGE0M2VmLi40YjM1MzY1NzFjOTgwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zOTgsNiArMzk4LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFxuIFx0LyogSGFuZGxlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4rXHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4rXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cbitcdFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzaywgdmFsYm9vbCk7XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuK1x0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4rXHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdC8qIFNoYXJlZCB3aXRoIElQX1RSQU5TUEFSRU5ULiAqL1xuK1x0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC02NjYsMjcgKzY4MSw2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRyZXR2ID0gMDtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4tXHRcdGlmICh2YWxib29sIFx1MDAyNlx1MDAyNiAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuLVx0XHRcdHJldHYgPSAtRVBFUk07XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4tXHRcdFx0Z290byBlX2ludmFsO1xuLVx0XHQvKiB3ZSBkb24ndCBoYXZlIGEgc2VwYXJhdGUgdHJhbnNwYXJlbnQgYml0IGZvciBJUFY2IHdlIHVzZSB0aGUgb25lIGluIHRoZSBJUHY0IHNvY2tldCAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuLVx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxuLVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi1cdFx0XHRnb3RvIGVfaW52YWw7XG4tXHRcdC8qIHdlIGFsc28gZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIGZyZWViaW5kIGJpdCBmb3IgSVBWNiAqL1xuLVx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLCB2YWxib29sKTtcbi1cdFx0cmV0diA9IDA7XG4tXHRcdGJyZWFrO1xuLVxuIFx0Y2FzZSBJUFY2X1JFQ1ZPUklHRFNUQUREUjpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0Z290byBlX2ludmFsO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTg6MDUuMjY3MjIzMzYzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyMjcxNTk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZWVkIGZvciBhIEtNU0FOIEZ1enppbmcgU2Vzc2lvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiBhIHBhdGNoIGFuZCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IHNwaW5uaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gTGV0J3MgZGlzc2VjdCB0aGlzIGxvZ2ljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGRpZmYgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBwcm9iYWJseSB1c2luZyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBjb250ZXh0LlxuXG5UaGUgZGlmZiBpcyB0b3VjaGluZyBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCwgd2hpY2gsIGFzIGEgcmVtaW5kZXIsIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMgZm9yIElQdjYuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggaXMgcmV3b3JraW5nIHRoZSB3YXkgYGRvX2lwdjZfc2V0c29ja29wdGAgaGFuZGxlcyBzb21lIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgYXJlIGJlaW5nIG1vdmVkLiBUaGUgcGF0Y2ggaXMgc2hpZnRpbmcgdGhlc2UgZnJvbSBiZWluZyBoYW5kbGVkICp1bmRlciogdGhlIHNvY2tldCBsb2NrIHRvIHRoZSBzZWN0aW9uIGRlc2NyaWJlZCBhcyBcIkhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC5cIiBUaGlzIGlzIHRoZSBrZXkuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0IG1lIGdvIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzk4IGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSdzIGEgcG90ZW50aWFsIGZvciBuZXcgS01TQU4gdnVsbmVyYWJpbGl0aWVzIGJlaW5nIGludHJvZHVjZWQgYnkgbW92aW5nIHRoZXNlIG9wdGlvbnMgYXJvdW5kLiBPbmx5IHRoZW4gY2FuIEkgbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB0aGUgZnV6emluZyBzZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NTg6MTEuNDk0Mzg2MDU3WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gMzgxOlxcdFxcdGludCByZXR2ID0gLUVOT1BST1RPT1BUO1xcbiAzODI6XFx0XFx0aW50IHZhbCwgdmFsYm9vbDtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpKVxcbiAzODU6XFx0XFx0XFx0dmFsID0gMDtcXG4gMzg2OlxcdFxcdGVsc2Uge1xcbiAzODc6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNlPSBzaXplb2YoaW50KSkge1xcbiAzODg6XFx0XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKVxcbiAzODk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM5MDpcXHRcXHRcXHR9IGVsc2VcXG4gMzkxOlxcdFxcdFxcdFxcdHZhbCA9IDA7XFxuIDM5MjpcXHRcXHR9XFxuIDM5MzpcXHRcXG4gMzk0OlxcdFxcdHZhbGJvb2wgPSAodmFsICE9IDApO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHRpZiAoaXA2X21yb3V0ZV9vcHQob3B0bmFtZSkpXFxuIDM5NzpcXHRcXHRcXHRyZXR1cm4gaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDM5ODpcXHRcXG4gMzk5OlxcdFxcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCB3aXRob3V0IGxvY2tpbmcgdGhlIHNvY2tldC4gKi9cXG4gNDAwOlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA0MDE6XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA0MDI6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA0MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQwNDpcXHRcXHRcXHQvKiBTaGFyZWQgd2l0aCBJUF9GUkVFQklORC4gKi9cXG4gNDA1OlxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xcbiA0MDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQwNzpcXHRcXHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XFxuIDQwODpcXHRcXHRcXHRpZiAodmFsYm9vbCBcXHUwMDI2XFx1MDAyNiAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFxcdTAwMjZcXHUwMDI2XFxuIDQwOTpcXHRcXHRcXHQgICAgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbiA0MTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNDExOlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDEyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTM6XFx0XFx0XFx0LyogU2hhcmVkIHdpdGggSVBfVFJBTlNQQVJFTlQuICovXFxuIDQxNDpcXHRcXHRcXHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcXG4gNDE1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MTY6XFx0XFx0Y2FzZSBJUFY2X1VOSUNBU1RfSE9QUzpcXG4gNDE3OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNDE4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTk6XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIDI1NSB8fCB2YWwgXFx1MDAzYyAtMSlcXG4gNDIwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MjE6XFx0XFx0XFx0V1JJVEVfT05DRShucC1cXHUwMDNlaG9wX2xpbWl0LCB2YWwpO1xcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQyMzpcXHRcXHRjYXNlIElQVjZfTVVMVElDQVNUX0xPT1A6XFxuIDQyNDpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDQyNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDI2OlxcdFxcdFxcdGlmICh2YWwgIT0gdmFsYm9vbClcXG4gNDI3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mjg6XFx0XFx0XFx0aW5ldDZfYXNzaWduX2JpdChNQzZfTE9PUCwgc2ssIHZhbGJvb2wpO1xcbiA0Mjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjU4OjExLjQ5NDUxOTIwN1oiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzI3MDExODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBJUHY2IHNldHNvY2tvcHQgSGFuZGxlciBSZW9yZ2FuaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGEgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGRvX2lwdjZfc2V0c29ja29wdGAuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgYElQVjZfRlJFRUJJTkRgIGFuZCBgSVBWNl9UUkFOU1BBUkVOVGAgc29ja2V0IG9wdGlvbnMgYmVmb3JlIHRoZSBgbG9ja19zb2NrKHNrKWAgY2FsbC5cblxuRXNzZW50aWFsbHksIEknbSBleGFtaW5pbmcgdGhpcyBjb2RlOlxuXG5gYGBjXG5cdGNhc2UgSVBWNl9GUkVFQklORDpcblx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcblx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdC8qIFNoYXJlZCB3aXRoIElQX0ZSRUVCSU5ELiAqL1xuXHRcdGluZXRfYXNzaWduX2JpdChGUkVFQklORCwgc2ssIHZhbGJvb2wpO1xuXHRcdHJldHVybiAwO1xuXG5cdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcblx0XHRpZiAodmFsYm9vbCBcdTAwMjZcdTAwMjYgIXNvY2tvcHRfbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpIFx1MDAyNlx1MDAyNlxuXHRcdCAgICAhc29ja29wdF9uc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcblx0XHRcdHJldHVybiAtRVBFUk07XG5cdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG5cdFx0XHRyZXR1cm4gLUVJTlZBTDtcblx0XHQvKiBTaGFyZWQgd2l0aCBJUF9UUkFOU1BBUkVOVC4gKi9cblx0XHRpbmV0X2Fzc2lnbl9iaXQoVFJBTlNQQVJFTlQsIHNrLCB2YWxib29sKTtcblx0XHRyZXR1cm4gMDtcbmBgYFxuXG5UaGVzZSBjYXNlcyB3ZXJlICpwcmV2aW91c2x5KiBoYW5kbGVkIGFmdGVyIHRoZSBsb2NrLiBOb3cgdGhleSBhcmUgaGFuZGxlZCBiZWZvcmUgdGhlIGxvY2suIEl0J3MgYSBzaW1wbGUgcmVvcmRlcmluZyBiYXNlZCBvbiB0aGUgYXRvbWljIG5hdHVyZSBvZiBgaW5ldF9hc3NpZ25fYml0YCwgd2hpY2ggb3BlcmF0ZXMgb24gYml0cywgbWVhbmluZyBgbG9ja19zb2NrYCBpc24ndCByZXF1aXJlZCBmb3IgaXRzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGJpdCBjaGFuZ2UuXG5cbk5vIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBjaGFuZ2VkLCBubyBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIGFyZSBtb2RpZmllZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIEkgc2VlIG5vIG5ldyBpbnN0YW5jZXMgb2YgcmVhZGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgcmVhZGluZyAqZnJvbSogdXNlcnNwYWNlIHRocm91Z2ggYGNvcHlfZnJvbV9zb2NrcHRyYCwgYW5kIHdyaXRpbmcgYSBiaXQgdG8gYSBrZXJuZWwgc3RydWN0dXJlLiBOb3RoaW5nIGdldHMgY29waWVkICpiYWNrKiB0byB1c2Vyc3BhY2UuIFRoaXMgc2V0c29ja29wdCBjYWxsIGFjdHMgYXMgYSBzZXR0ZXIuXG5cbkhlcmUncyB0aGUgS01TQU4gcmVhc29uaW5nOlxuXG4qICAgKipQYXRjaCBEZXNjcmlwdGlvbjoqKiBUaGUgcGF0Y2ggbW92ZXMgdGhlIGBJUFY2X0ZSRUVCSU5EYCBhbmQgYElQVjZfVFJBTlNQQVJFTlRgIHNvY2tvcHQgaGFuZGxlcnMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgdG8gdGhlIGxvY2tsZXNzIHNlY3Rpb24gYmVmb3JlIGBsb2NrX3NvY2soc2spYC5cbiogICAqKktNU0FOIFJhdGlvbmFsZToqKiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgaW50cm9kdWNlIG5ldyByZWFkcyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgY29weSBkYXRhIGJhY2sgdG8gdXNlciBzcGFjZS4gSXQncyBhIHNldHNvY2tvcHQgb3BlcmF0aW9uLCBzZXR0aW5nIGEgYml0IGZsYWcgdmlhIGBpbmV0X2Fzc2lnbl9iaXRgLlxuKiAgICoqUmVsZXZhbnQgU2FuaXRpemVyczoqKiBXaGlsZSB0aGlzIHBhdGNoIGRvZXNuJ3QgdHJpZ2dlciBLTVNBTiwgY29uY3VycmVuY3kgYXNwZWN0cyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvdGVudGlhbCBjb25jZXJuLCBhbmQgdGhlcmVmb3JlIEtDU0FOL3JhY2UgZGV0ZWN0b3JzIHdvdWxkIGJlIHJlbGV2YW50IGZvciBleGFtaW5pbmcgdGhlIGVmZmVjdHMgb2YgdGhlIGxvY2tsZXNzIGJpdCBzZXR0aW5nLiBLTVNBTiBob3dldmVyIGRvZXMgbm90IGFwcGx5IGhlcmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gVGhlIGNvcmUgY2hhbmdlIGlzIG1lcmVseSBhIGZ1bmN0aW9uYWwgcmVvcmdhbml6YXRpb24gd2l0aCBubyByaXNrIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIxLCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo1ODoyNC43NjQ2Mzk4NDVaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBJUFY2X0ZSRUVCSU5EIGFuZCBJUFY2X1RSQU5TUEFSRU5UIHNvY2tldCBvcHRpb25zIGluIGRvX2lwdjZfc2V0c29ja29wdCgpIHRvIHRoZSBsb2NrbGVzcyBzd2l0Y2gtc3RhdGVtZW50IGJsb2NrIGJlZm9yZSBsb2NrX3NvY2soc2spIGlzIGFjcXVpcmVkLiBUaGUgb3B0aW9ucyBhcmUgc2V0IHVzaW5nIGluZXRfYXNzaWduX2JpdCgpLCBtb2RpZnlpbmcgYml0IGZsYWdzIG9uIHRoZSBzb2NrZXQuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1vcnksIGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlci9wdXRfdXNlcikuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHZhbCwgdmFsYm9vbCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBmcm9tIHJlbW92aW5nIHRoZSBzb2NrZXQgbG9jayB3b3VsZCBmYWxsIHVuZGVyIGRhdGEgcmFjZSBkZXRlY3Rpb24gKEtDU0FOKSBvciBzdGFuZGFyZCBjb25jdXJyZW5jeSB0ZXN0aW5nLCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIElQVjZfRlJFRUJJTkQgYW5kIElQVjZfVFJBTlNQQVJFTlQgc29ja2V0IG9wdGlvbnMgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0KCkgdG8gdGhlIGxvY2tsZXNzIHN3aXRjaC1zdGF0ZW1lbnQgYmxvY2sgYmVmb3JlIGxvY2tfc29jayhzaykgaXMgYWNxdWlyZWQuIFRoZSBvcHRpb25zIGFyZSBzZXQgdXNpbmcgaW5ldF9hc3NpZ25fYml0KCksIG1vZGlmeWluZyBiaXQgZmxhZ3Mgb24gdGhlIHNvY2tldC4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSwgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgYW55IGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyL3B1dF91c2VyKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAodmFsLCB2YWxib29sKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGZyb20gcmVtb3ZpbmcgdGhlIHNvY2tldCBsb2NrIHdvdWxkIGZhbGwgdW5kZXIgZGF0YSByYWNlIGRldGVjdGlvbiAoS0NTQU4pIG9yIHN0YW5kYXJkIGNvbmN1cnJlbmN5IHRlc3RpbmcsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[1] Phase: Succeeded StartedAt: 2026-09-12 13:58:36 +0000 UTC FinishedAt: 2026-09-12 13:58:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 13:58:36 +0000 UTC FinishedAt: 2026-09-12 13:58:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2] Phase: Succeeded StartedAt: 2026-09-12 13:58:36 +0000 UTC FinishedAt: 2026-09-12 17:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 13:58:36 +0000 UTC FinishedAt: 2026-09-12 17:47:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 13:58:36 +0000 UTC FinishedAt: 2026-09-12 13:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 13:58:36 +0000 UTC FinishedAt: 2026-09-12 13:58:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-workflow6sdw5/series-workflow6sdw5-convert-artifact-440784637/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 13:58:47 +0000 UTC FinishedAt: 2026-09-12 14:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 13:58:47 +0000 UTC FinishedAt: 2026-09-12 14:19:05 +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:*5ac58db0-ff94-471e-a501-a5941b0e9b49,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-workflow6sdw5/series-workflow6sdw5-convert-artifact-440784637/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": "abac4433-232b-4030-982f-1fa3e5b240f7", "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-workflow6sdw5/series-workflow6sdw5-build-action-1162526771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 13:58:47 +0000 UTC FinishedAt: 2026-09-12 14:18:26 +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:*5ac58db0-ff94-471e-a501-a5941b0e9b49,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-workflow6sdw5/series-workflow6sdw5-convert-artifact-440784637/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": "abac4433-232b-4030-982f-1fa3e5b240f7", "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-workflow6sdw5/series-workflow6sdw5-build-action-1162526771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:19:05 +0000 UTC FinishedAt: 2026-09-12 14:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:19:05 +0000 UTC FinishedAt: 2026-09-12 14:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:19:05 +0000 UTC FinishedAt: 2026-09-12 14:19:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:19:05 +0000 UTC FinishedAt: 2026-09-12 14:19:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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-workflow6sdw5/series-workflow6sdw5-convert-artifact-206599000/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:19:15 +0000 UTC FinishedAt: 2026-09-12 14:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:19:15 +0000 UTC FinishedAt: 2026-09-12 14:21:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*abac4433-232b-4030-982f-1fa3e5b240f7,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-workflow6sdw5/series-workflow6sdw5-build-action-1162526771/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-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:21:10 +0000 UTC FinishedAt: 2026-09-12 14:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:21:10 +0000 UTC FinishedAt: 2026-09-12 14:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:21:10 +0000 UTC FinishedAt: 2026-09-12 14:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:21:10 +0000 UTC FinishedAt: 2026-09-12 14:41:22 +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:*5ac58db0-ff94-471e-a501-a5941b0e9b49,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-workflow6sdw5/series-workflow6sdw5-convert-artifact-206599000/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": "22ddfca1-a1e9-4b91-9086-0342b9dbbc4d", "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-workflow6sdw5/series-workflow6sdw5-build-action-1962679492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:21:10 +0000 UTC FinishedAt: 2026-09-12 14:41:12 +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:*5ac58db0-ff94-471e-a501-a5941b0e9b49,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-workflow6sdw5/series-workflow6sdw5-convert-artifact-206599000/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": "22ddfca1-a1e9-4b91-9086-0342b9dbbc4d", "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-workflow6sdw5/series-workflow6sdw5-build-action-1962679492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:41:22 +0000 UTC FinishedAt: 2026-09-12 14:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:41:22 +0000 UTC FinishedAt: 2026-09-12 14:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:41:22 +0000 UTC FinishedAt: 2026-09-12 14:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:41:22 +0000 UTC FinishedAt: 2026-09-12 14:43:32 +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:*22ddfca1-a1e9-4b91-9086-0342b9dbbc4d,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-workflow6sdw5/series-workflow6sdw5-build-action-1962679492/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-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:41 +0000 UTC FinishedAt: 2026-09-12 17:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:41 +0000 UTC FinishedAt: 2026-09-12 17:47:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"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:*abac4433-232b-4030-982f-1fa3e5b240f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*22ddfca1-a1e9-4b91-9086-0342b9dbbc4d,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-workflow6sdw5/series-workflow6sdw5-build-action-1162526771/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-workflow6sdw5/series-workflow6sdw5-build-action-1962679492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:41 +0000 UTC FinishedAt: 2026-09-12 14:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:41 +0000 UTC FinishedAt: 2026-09-12 14:43:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"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-workflow6sdw5/series-workflow6sdw5-convert-artifact-4113025841/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:41 +0000 UTC FinishedAt: 2026-09-12 14:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:41 +0000 UTC FinishedAt: 2026-09-12 14:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:41 +0000 UTC FinishedAt: 2026-09-12 14:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:52 +0000 UTC FinishedAt: 2026-09-12 17:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6sdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0949f8b9-d37e-473d-9e25-4c87ed0c3a43","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 14:43:52 +0000 UTC FinishedAt: 2026-09-12 17:47:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*abac4433-232b-4030-982f-1fa3e5b240f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*22ddfca1-a1e9-4b91-9086-0342b9dbbc4d,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-workflow6sdw5/series-workflow6sdw5-build-action-1162526771/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-workflow6sdw5/series-workflow6sdw5-build-action-1962679492/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-workflow6sdw5/series-workflow6sdw5-convert-artifact-4113025841/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,}