Name: series-workflow9hw9s Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[0] Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "0b3d2872-082f-4946-b62a-e275c26e6583" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tpacket_rcv", "packet_set_ring" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RwYWNrZXRfcmN2JiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRfcmluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApYCBmb3IgYFRQQUNLRVRfVjFgIGFuZCBgVFBBQ0tFVF9WMmAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSAoaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQganVtcHMgdG8gYGRyb3Bfbl9hY2NvdW50YCksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIChgc2xvdF9pZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgZXhwbGljaXRseSBhc3NpZ25lZCBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIGByeF9vd25lcl9tYXBgIGlzIGFsbG9jYXRlZCB6ZXJvLWluaXRpYWxpemVkIHZpYSBgYml0bWFwX2FsbG9jYCkuXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0cGFja2V0X3JjdigpIGluIG5ldC9wYWNrZXQvYWZfcGFja2V0LmMsIGVuc3VyaW5nIHRoYXQgdGhlIHNsb3QgaW4gcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg5MGM1NDFhMjQyNjdlYjI0MWMyOTY3YjQ1NWVkM2EwMjJlMDQxMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuaW5kZXggNzZiZGU3OTA2ZDQ5NC4uNTBjYWUzMmFlMjY5MiAxMDA2NDRcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbkBAIC0yMzg0LDcgJiM0MzsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgJiM0MzsgbWFjb2ZmIC1cbiBcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcbiBcdFx0XHRcdCAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHtcbi1cdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMylcbiYjNDM7XHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xuJiM0MztcdFx0ZWxzZVxuIFx0XHRcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG4gXHRcdGdvdG8gZHJvcF9uX2FjY291bnQ7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHBhY2tldF9yY3YmIzM0OywKICAgICYjMzQ7cGFja2V0X3NldF9yaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCBpcyBjbGVhcmVkIHdoZW4gdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKSBmYWlscyBmb3IgVFBBQ0tFVF9WMS9WMiByaW5ncy4gVGhpcyBjb2RlIGlzIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9QQUNLRVQgc29ja2V0cyBjb25maWd1cmVkIHdpdGggUEFDS0VUX1JYX1JJTkcgYW5kIFBBQ0tFVF9WTkVUX0hEUi4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgc2xvdCBvd25lcnNoaXAgdHJhY2tpbmcsIHJpbmcgbWFuYWdlbWVudCwgYW5kIHBhY2tldCBkcm9wIGFjY291bnRpbmcgYmVoYXZlIGNvcnJlY3RseSB1bmRlciBtYWxmb3JtZWQgcGFja2V0IGFuZCBlcnJvciBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODkwYzU0MWEyNDI2N2ViMjQxYzI5NjdiNDU1ZWQzYTAyMmUwNDEwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggNzZiZGU3OTA2ZDQ5NC4uNTBjYWUzMmFlMjY5MiAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0yMzg0LDcgJiM0MzsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCSAgICB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYihza2IsIGgucmF3ICYjNDM7IG1hY29mZiAtCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpLAogCQkJCSAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHsKLQkJaWYgKHBvLSZndDt0cF92ZXJzaW9uID09IFRQQUNLRVRfVjMpCiYjNDM7CQlpZiAocG8tJmd0O3RwX3ZlcnNpb24gJmx0Oz0gVFBBQ0tFVF9WMikKJiM0MzsJCQlfX2NsZWFyX2JpdChzbG90X2lkLCBwby0mZ3Q7cnhfcmluZy5yeF9vd25lcl9tYXApOwomIzQzOwkJZWxzZQogCQkJcHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cygmYW1wO3BvLSZndDtyeF9yaW5nKTsKIAkJZ290byBkcm9wX25fYWNjb3VudDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgYmVmb3JlIEkgZXZlbiBzdGFydCB0byB0aGluayBhYm91dCB0aGUgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLiBTbywgbXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYGdpdCBkaWZmYCBvciwgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudCwgbWF5YmUgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYXJvdW5kIGxpbmUgMjM4NCBvZiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AuIENvbnRleHQgaXMgKmV2ZXJ5dGhpbmcqIHdoZW4geW91JiMzOTtyZSByZXZpZXdpbmcgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW1tZWRpYXRlbHkgYXJvdW5kIHRoZSBjaGFuZ2UgdG8gZnVsbHkgZ3JvayB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGxvZ2ljIGZsb3csIGFuZCB0aGUgYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLiBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGxpbmUgYW5kIHNheSAmIzM0O3RoYXQgbG9va3MgZ29vZCYjMzQ7IOKAkyBJIGhhdmUgdG8gKnVuZGVyc3RhbmQqIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNzA6XHRcdHNwaW5fbG9jayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuMjM3MTpcdFx0aC5yYXcgPSBwYWNrZXRfY3VycmVudF9yeF9mcmFtZShwbywgc2tiLFxuMjM3MjpcdFx0XHRcdFx0XHRUUF9TVEFUVVNfS0VSTkVMLCAobWFjb2ZmJiM0MztzbmFwbGVuKSk7XG4yMzczOlx0XHRpZiAoIWgucmF3KVxuMjM3NDpcdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuMjM3NTpcdFxuMjM3NjpcdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKSB7XG4yMzc3Olx0XHRcdHNsb3RfaWQgPSBwby1cdTAwM2VyeF9yaW5nLmhlYWQ7XG4yMzc4Olx0XHRcdGlmICh0ZXN0X2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCkpXG4yMzc5Olx0XHRcdFx0Z290byBkcm9wX25fYWNjb3VudDtcbjIzODA6XHRcdFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbjIzODE6XHRcdH1cbjIzODI6XHRcbjIzODM6XHRcdGlmICh2bmV0X2hkcl9zeiBcdTAwMjZcdTAwMjZcbjIzODQ6XHRcdCAgICB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYihza2IsIGgucmF3ICYjNDM7IG1hY29mZiAtXG4yMzg1Olx0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciksXG4yMzg2Olx0XHRcdFx0XHQgICAgdmlvX2xlKCksIHRydWUsIDApKSB7XG4yMzg3Olx0XHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbjIzODg6XHRcdFx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG4yMzg5Olx0XHRcdGVsc2VcbjIzOTA6XHRcdFx0XHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpO1xuMjM5MTpcdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuMjM5MjpcdFx0fVxuMjM5MzpcdFxuMjM5NDpcdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKSB7XG4yMzk1Olx0XHRcdHBhY2tldF9pbmNyZW1lbnRfcnhfaGVhZChwbywgXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG4yMzk2Olx0XHQvKlxuMjM5NzpcdFx0ICogTE9TSU5HIHdpbGwgYmUgcmVwb3J0ZWQgdGlsbCB5b3UgcmVhZCB0aGUgc3RhdHMsXG4yMzk4Olx0XHQgKiBiZWNhdXNlIGl0JiMzOTtzIENPUiAtIENsZWFyIE9uIFJlYWQuXG4yMzk5Olx0XHQgKiBBbnl3YXlzLCBtb3ZpbmcgaXQgZm9yIFYxL1YyIG9ubHkgYXMgVjMgZG9lc24mIzM5O3QgbmVlZCB0aGlzXG4yNDAwOlx0XHQgKiBhdCBwYWNrZXQgbGV2ZWwuXG4yNDAxOlx0XHQgKi9cbjI0MDI6XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnBvLVx1MDAzZXRwX2Ryb3BzKSlcbjI0MDM6XHRcdFx0XHRzdGF0dXMgfD0gVFBfU1RBVFVTX0xPU0lORztcbjI0MDQ6XHRcdH1cbjI0MDU6XHRcbjI0MDY6XHRcdHBvLVx1MDAzZXN0YXRzLnN0YXRzMS50cF9wYWNrZXRzJiM0MzsmIzQzOztcbjI0MDc6XHRcdGlmIChjb3B5X3NrYikge1xuMjQwODpcdFx0XHRzdGF0dXMgfD0gVFBfU1RBVFVTX0NPUFk7XG4yNDA5Olx0XHRcdHNrYl9jbGVhcl9kZWxpdmVyeV90aW1lKGNvcHlfc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGlzIHBhdGNoIOKAkyB3aGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvaW5nLCBhbmQgd2h5IHdhcyB0aGlzIG1vZGlmaWNhdGlvbiBuZWNlc3NhcnkgaW4gdGhlIGZpcnN0IHBsYWNlPyBUbyBkbyB0aGlzLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcGF0Y2ggY29udGV4dCBpdHNlbGY7IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhbmdlLiBLbm93aW5nIHRoZSBoaXN0b3J5IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nLiBUaGlzIHdpbGwgaGVscCB3aXRoIGEgbWVudGFsIG1vZGVsIG9mIHRoZSByZWFzb25pbmcuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZS4gSSBrbm93IHRoZSBjaGFuZ2UgY29uY2VybnMgdGhlIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nIGluIGBhZl9wYWNrZXQuY2AsIHNvIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ2l0IGxvZ2Agb24gdGhhdCBzcGVjaWZpYyBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGxvZyBmb3IgY2hhbmdlcyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgYW5kIGtleXdvcmRzIHN1Y2ggYXMgYHJ4X293bmVyX21hcGAuIEkga25vdyB0aGlzIGhlbHBzIGtlZXAgdHJhY2sgb2YgdGhlIG93bmVyc2hpcCBvZiB0aGUgcmVjZWl2aW5nIHNpZGUuIFRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb21taXQgb3IgY29tbWl0cyB0aGF0IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHNob3cgbWUgdGhlIGxvZ2ljLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhfb3duZXJfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM3Ny1cdFx0c2xvdF9pZCA9IHBvLVx1MDAzZXJ4X3JpbmcuaGVhZDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM3ODpcdFx0aWYgKHRlc3RfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM3OS1cdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzgwOlx0XHRfX3NldF9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzgxLVx0fVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4Ny1cdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzg4Olx0XHRcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4OS1cdFx0ZWxzZVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwNi1cdFx0X19wYWNrZXRfc2V0X3N0YXR1cyhwbywgaC5yYXcsIHN0YXR1cyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1MDc6XHRcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwOC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ1MTU9c3RhdGljIGludCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCB1bmlvbiB0cGFja2V0X3JlcV91ICpyZXFfdSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MTktXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDUyMDpcdHVuc2lnbmVkIGxvbmcgKnJ4X293bmVyX21hcCA9IE5VTEw7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MjEtXHRpbnQgd2FzX3J1bm5pbmcsIG9yZGVyID0gMDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MDYtXHRcdFx0aWYgKCF0eF9yaW5nKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2MDc6XHRcdFx0XHRyeF9vd25lcl9tYXAgPSBiaXRtYXBfYWxsb2MocmVxLVx1MDAzZXRwX2ZyYW1lX25yLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjA4LVx0XHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2MDk6XHRcdFx0XHRpZiAoIXJ4X293bmVyX21hcClcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYxMC1cdFx0XHRcdFx0Z290byBvdXRfZnJlZV9wZ192ZWM7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ0LVx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NDU6XHRcdFx0c3dhcChyYi1cdTAwM2VyeF9vd25lcl9tYXAsIHJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2NDYtXHRcdHJiLVx1MDAzZWZyYW1lX21heCA9IChyZXEtXHUwMDNldHBfZnJhbWVfbnIgLSAxKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODItXHRpZiAocGdfdmVjKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2ODM6XHRcdGJpdG1hcF9mcmVlKHJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODQtXHRcdGlmICh0eF9yaW5nIFx1MDAyNlx1MDAyNiBjbG9zaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQUZfUEFDS0VUIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIGB0cGFja2V0X3JjdmAgZnVuY3Rpb24sIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGUgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQUZfUEFDS0VULiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBibG9jayBvZiBjb2RlIHdoZXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGByeF9vd25lcl9tYXBgIGFuZCB0aGUgYFRQQUNLRVRgIHZlcnNpb25zLgoKSW5pdGlhbGx5LCBpZiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGZhaWxlZCBhbmQgdGhlIHBhY2tldCB0eXBlIHdhcyBgVFBBQ0tFVF9WMmAgb3IgZWFybGllciwgYSBgc2xvdF9pZGAgd2FzIGJlaW5nICpzZXQqIGluIHRoZSBgcnhfb3duZXJfbWFwYCwgYnV0ICpub3QqIGNsZWFyZWQgdXBvbiBkcm9wcGluZyB0aGUgcGFja2V0IChgZ290byBkcm9wX25fYWNjb3VudGApLiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4gV2hhdCBoYXBwZW5zIGlzIHRoYXQgYHRlc3RfYml0KHNsb3RfaWQsIHBvLSZndDtyeF9yaW5nLnJ4X293bmVyX21hcClgIHdpbGwgKmFsd2F5cyogZXZhbHVhdGUgdG8gdHJ1ZSwgd2hpY2ggbGVhZHMgdG8gdGhlIHBhY2tldCBiZWluZyBkcm9wcGVkIGFuZCB0aGF0IHNsb3QgYmVpbmcgdW5hdmFpbGFibGUgZm9yIGZ1cnRoZXIgdXNlLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIGRlbmlhbCBvZiBzZXJ2aWNlIGlmIHRoaXMgaGFwcGVucyByZXBlYXRlZGx5LiBUaGUgZml4IGlzIGEgc2ltcGxlLCBidXQgY3JpdGljYWwsIGJpdC1jbGVhcmluZyBvcGVyYXRpb246IGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby0mZ3Q7cnhfcmluZy5yeF9vd25lcl9tYXApYC4KClRoZSBjb25jZXJuIGlzIGFsd2F5cywgJiMzNDtpcyB0aGlzIHJlYWwsIGlzIHRoaXMgZXhwbG9pdGFibGU/JiMzNDsuIFRoZSBnb29kIG5ld3MgaXMsIGFic29sdXRlbHkgeWVzISBBRl9QQUNLRVQgc29ja2V0cyBhcmUgaW5jcmVkaWJseSBjb21tb247IHRoZXkgYXJlIGEgc3RhbmRhcmQgc29ja2V0IGZhbWlseSAoQUZfUEFDS0VUKSwgYW5kIHN5emthbGxlciBoZWF2aWx5IGZ1enplZCB0aGlzIGFyZWEuIFVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgY3JlYXRlIEFGX1BBQ0tFVCBzb2NrZXRzIHVzaW5nIGBzb2NrZXQoQUZfUEFDS0VULCBTT0NLX1JBVywgLi4uKWAgb3IgYFNPQ0tfREdSQU1gLCBhbmQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBUUEFDS0VUIHJpbmcgYnVmZmVycyBhbmQgYFBBQ0tFVF9WTkVUX0hEUmAgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBldmVuIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgbGlrZSB2ZXRoIG9yIGxvb3BiYWNrLgoKTm93LCBJJiMzOTtsbCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYGFmX3BhY2tldC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGFmZmVjdCB0aGlzIHBhdGgsIGJ1dCB0aGUgZ2VuZXJhbCBhY2Nlc3NpYmlsaXR5IG9mIHRoaXMgY29kZSBpcyBjbGVhci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYW5kIGVhc2lseSByZWFjaGFibGUgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfUEFDS0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L01ha2VmaWxlLTUtXG5uZXQvcGFja2V0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BBQ0tFVCkgJiM0Mzs9IGFmX3BhY2tldC5vXG5uZXQvcGFja2V0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BBQ0tFVF9ESUFHKSAmIzQzOz0gYWZfcGFja2V0X2RpYWcub1xubmV0L3BhY2tldC9NYWtlZmlsZS04LWFmX3BhY2tldF9kaWFnLXkgJiM0Mzs9IGRpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBQYWNrZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgcGFja2V0IGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L3BhY2tldC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHBhY2tldCBoYW5kbGluZyBhcmUgZGVmaW5lZCwgYW5kIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgcHV0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZC4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb25zIGludG8gcGFja2V0IHByb2Nlc3NpbmcgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBhY2tldCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQQUNLRVRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZVxuICAxMDpcdFx0ICBkaXJlY3RseSB3aXRoIG5ldHdvcmsgZGV2aWNlcyB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBuZXR3b3JrXG4gIDExOlx0XHQgIHByb3RvY29sIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwsIGUuZy4gdGNwZHVtcC4gIElmIHlvdSB3YW50IHRoZW1cbiAgMTI6XHRcdCAgdG8gd29yaywgY2hvb3NlIFkuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgYWZfcGFja2V0LlxuICAxNjpcdFxuICAxNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBQQUNLRVRfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBBQ0tFVFxuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBQYWNrZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX1BBQ0tFVGAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9mIGludGVyZXN0LiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMgYWx3YXlzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSwgb3IgYmUgaW5mbHVlbmNlZCBieSwgYENPTkZJR19QQUNLRVRgLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSB0ZXh0IGluZGljYXRlcyBgbmV0L3BhY2tldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTtsbCBjaGVjayB0aGF0IGZpbGUgZm9yIGluY2x1ZGVzIGFuZCByZWZlcmVuY2VzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgYXQgcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTgyPW1lbnUgXCYjMzQ7TmV0d29ya2luZyBvcHRpb25zXCYjMzQ7XG5uZXQvS2NvbmZpZy04My1cbm5ldC9LY29uZmlnOjg0OnNvdXJjZSBcJiMzNDtuZXQvcGFja2V0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTg1LXNvdXJjZSBcJiMzNDtuZXQvcHNwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX1BBQ0tFVGAuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGxpdmVzIHVuZGVyICYjMzQ7TmV0d29ya2luZyBvcHRpb25zJiMzNDsgYW5kIG9ubHkgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgYmFzaWNhbGx5IHRoZSBiYXNlbGluZSBmb3IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBUaGF0IG1lYW5zIGVuYWJsaW5nIGBQQUNLRVRgIGlzIHRoZSBrZXkuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQgd2hlbiBgQ09ORklHX1BBQ0tFVGAgd2FzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgY29kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmbGFnLCBhbmQgbXkgdG9vbCBvZiBjaG9pY2UgaGVyZSBpcyB0aGUgYEZvY3VzU3ltYm9sc2AuCgpPa2F5LCB0aGUgdG9vbCBwb2ludHMgbWUgdG8gYHRwYWNrZXRfcmN2YCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgdHBhY2tldF9yY3ZgIGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZSBzY29wZSBtaWdodCBiZSBsaW1pdGVkLCBhbmQgdGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHNwZWNpZmljIGFyZWEgb2YgY29uY2VybiBvciBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYFBBQ0tFVGAgZmVhdHVyZS4KCk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHRwYWNrZXRfcmN2YCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgaW52b2tlZCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dCBhbmQgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBmZWF0dXJlIG9uIHRoZSBvdmVyYWxsIGtlcm5lbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHBhY2tldF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkyPXN0cnVjdCBwYWNrZXRfc29jaztcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTkzOnN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk0LVx0XHQgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTY4Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcHJiX3JldGlyZV9yeF9ibGtfdGltZXJfZXhwaXJlZChzdHJ1Y3QgaHJ0aW1lciAqdClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTY5Ni1cdC8qIFdlIG9ubHkgbmVlZCB0byBwbHVnIHRoZSByYWNlIHdoZW4gdGhlIGJsb2NrIGlzIHBhcnRpYWxseSBmaWxsZWQuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjY5NzpcdCAqIHRwYWNrZXRfcmN2OlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy02OTgtXHQgKlx0XHRsb2NrKCk7IGluY3JlbWVudCBCTE9DS19OVU1fUEtUUzsgdW5sb2NrKClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTgyMz1zdGF0aWMgdm9pZCBwcmJfdGhhd19xdWV1ZShzdHJ1Y3QgdHBhY2tldF9rYmRxX2NvcmUgKnBrYylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTgyOC0vKlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4Mjk6ICogcHJiX29wZW5fYmxvY2sgaXMgY2FsbGVkIGJ5IHRwYWNrZXRfcmN2IG9yIHRpbWVyIGNhbGxiYWNrLlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy04MzAtICpcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTgzNS0gKlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4MzY6ICogT25lIHNpZGUgZWZmZWN0IG9mIE5PVCB1cGRhdGUgaHJ0aW1lciB3aGVuIGNhbGxlZCBieSB0cGFja2V0X3JjdiBpcyB0aGF0XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjgzNzogKiBhIG5ld2x5IG9wZW5lZCBibG9jayB0cmlnZ2VyZWQgYnkgdHBhY2tldF9yY3YgbWF5IGJlIHJldGlyZWQgZWFybGllciB0aGFuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTgzOC0gKiBleHBlY3RlZC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRpbWVvdXQgaXMgdXBkYXRlZCBpbiBwcmJfb3Blbl9ibG9jaywgdGhlXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz04NDI9c3RhdGljIHZvaWQgcHJiX29wZW5fYmxvY2soc3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlICpwa2MxLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODgzLSAqIDQpIHVzZXItc3BhY2UgaXMgZWl0aGVyIHNsZWVwaW5nIG9yIHByb2Nlc3NpbmcgYmxvY2sgJiMzOTswJiMzOTsuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjg4NDogKiA1KSB0cGFja2V0X3JjdiBpcyBjdXJyZW50bHkgZmlsbGluZyBibG9jayAmIzM5OzcmIzM5Oywgc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODg1LSAqICAgIGl0IHdpbGwgY2xvc2UgYmxvY2stNyxsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIGZpbGwgYmxvY2sgJiMzOTswJiMzOTsuXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz05NDE9c3RhdGljIHZvaWQgcHJiX3JldGlyZV9jdXJyZW50X2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTQ5LVx0XHQgKiBQbHVnIHRoZSBjYXNlIHdoZXJlIGNvcHlfYml0cygpIGlzIGluIHByb2dyZXNzIG9uXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjk1MDpcdFx0ICogY3B1LTAgYW5kIHRwYWNrZXRfcmN2KCkgZ290IGludm9rZWQgb24gY3B1LTEsIGRpZG4mIzM5O3Rcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTUxLVx0XHQgKiBoYXZlIHNwYWNlIHRvIGNvcHkgdGhlIHBrdCBpbiB0aGUgY3VycmVudCBibG9jayBhbmRcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTEyNzE9c3RhdGljIGludCBfX3BhY2tldF9yY3ZfaGFzX3Jvb20oY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbyxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTEyNzYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjEyNzc6XHRpZiAocG8tXHUwMDNlcHJvdF9ob29rLmZ1bmMgIT0gdHBhY2tldF9yY3YpIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTI3OC1cdFx0aW50IHJjdmJ1ZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyNDgtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyNDk6c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjUwLVx0XHQgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM2MC1cdFx0bnZhbCA9IEdFVF9QQkRRQ19GUk9NX1JCKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpLVx1MDAzZW1heF9mcmFtZV9sZW4gLSBtYWNvZmY7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNjE6XHRcdHByX2Vycl9vbmNlKFwmIzM0O3RwYWNrZXRfcmN2OiBwYWNrZXQgdG9vIGJpZywgY2xhbXBlZCBmcm9tICV1IHRvICV1LiBtYWNvZmY9JXVcXG5cJiMzNDssXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjItXHRcdFx0ICAgIHNuYXBsZW4sIG52YWwsIG1hY29mZik7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NTE1PXN0YXRpYyBpbnQgcGFja2V0X3NldF9yaW5nKHN0cnVjdCBzb2NrICpzaywgdW5pb24gdHBhY2tldF9yZXFfdSAqcmVxX3UsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ5LVx0XHRwby1cdTAwM2Vwcm90X2hvb2suZnVuYyA9IChwby1cdTAwM2VyeF9yaW5nLnBnX3ZlYykgP1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjUwOlx0XHRcdFx0XHRcdHRwYWNrZXRfcmN2IDogcGFja2V0X3Jjdjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY1MS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmJfcXVldWUtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUGFja2V0IFNvY2tldCBSWCBSaW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IHRoZSBwYWNrZXQgc29ja2V0IHJlY2VpdmUgcmluZyB3b3Jrcy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYHRwYWNrZXRfcmN2YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIFRoYXQmIzM5O3MgdGhlIG9uZSByZWdpc3RlcmVkIGluIGBwby0mZ3Q7cHJvdF9ob29rLmZ1bmNgIHdoZW4gdGhlIHJlY2VpdmUgcmluZyBpcyBhY3RpdmUgKGBwby0mZ3Q7cnhfcmluZy5wZ192ZWMgIT0gTlVMTGApLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiBwYWNrZXRzIGFyZSByZWNlaXZlZCwgZWl0aGVyIHZpYSBgZGV2X3F1ZXVlX3htaXRfbml0YCwgYGRlbGl2ZXJfc2tiYCwgb3IgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGEgc3RhdGljIGFuZCBub3QgdXNlZCBldmVyeXdoZXJlLiBCZWNhdXNlIGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgY29kZSAofjMwMCBsaW5lcyksIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGJlIGlubGluZWQgYW5kIHdpbGwgYmUgYSBkaXN0aW5jdCBzeW1ib2wgaW4gYHZtbGludXhgLgoKSSBrbm93IHRoYXQgYHBhY2tldF9zZXRfcmluZ2AgaXMgd2hlcmUgdGhlIHJpbmcgaXMgYWN0dWFsbHkgc2V0IHVwLCBjb25maWd1cmVkLCBhbmQgd2hlcmUgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIHJlbGF0ZWQgY29tcG9uZW50cy4KCk5vdywgSSB3b25kZXIgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgcGFja2V0IHNvY2tldCBjb2RlIHRoYXQgcGxheSBhIHNpZ25pZmljYW50IHJvbGU/IExldCYjMzk7cyBjaGVjayBgcGFja2V0X3JlY3Ztc2dgIGFuZCBgcGFja2V0X3NldHNvY2tvcHRgLiBJdCBsb29rcyBsaWtlIGluIGBwYWNrZXRfc2V0c29ja29wdGAsIHRoZSBgUEFDS0VUX1JYX1JJTkdgIHNldHNvY2tvcHQgY2FsbHMgYHBhY2tldF9zZXRfcmluZ2AgLSB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZy4gSXQgbG9va3MgbGlrZSBgUEFDS0VUX1ZORVRfSERSYCBlbmFibGVzIGBwby0mZ3Q7aGFzX3ZuZXRfaGRyYC4KCkFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdm5ldF9oZHJfc3pgIGlzIHNldCB3aXRoaW4gYHRwYWNrZXRfcmN2YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm5ldF9oZHJfc3omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEwOT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfdm5ldChzdHJ1Y3QgbXNnaGRyICptc2csIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxMTA6XHRcdFx0ICAgc2l6ZV90ICpsZW4sIGludCB2bmV0X2hkcl9zeilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjExMS17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTEzLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTE0Olx0aWYgKCpsZW4gXHUwMDNjIHZuZXRfaGRyX3N6KVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTE1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjExNjpcdCpsZW4gLT0gdm5ldF9oZHJfc3o7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMTctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTIwLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTIxOlx0cmV0dXJuIG1lbWNweV90b19tc2cobXNnLCAodm9pZCAqKVx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMjItfVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjY2LVx0dW5zaWduZWQgaW50IHNsb3RfaWQgPSAwO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjY3Olx0aW50IHZuZXRfaGRyX3N6ID0gMDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI2OC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzMjQtXHRcdFx0XHQgICAgICAgcG8tXHUwMDNldHBfcmVzZXJ2ZTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjMyNTpcdFx0dm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzI2Olx0XHRpZiAodm5ldF9oZHJfc3opXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzMjc6XHRcdFx0bmV0b2ZmICYjNDM7PSB2bmV0X2hkcl9zejtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjMyOC1cdFx0bWFjb2ZmID0gbmV0b2ZmIC0gbWFjbGVuO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM1Mi1cdFx0XHRcdHNuYXBsZW4gPSAwO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzUzOlx0XHRcdFx0dm5ldF9oZHJfc3ogPSAwO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzU0LVx0XHRcdH1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjYtXHRcdFx0bWFjb2ZmID0gR0VUX1BCRFFDX0ZST01fUkIoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyktXHUwMDNlbWF4X2ZyYW1lX2xlbjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM2NzpcdFx0XHR2bmV0X2hkcl9zeiA9IDA7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjgtXHRcdH1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODM6XHRpZiAodm5ldF9oZHJfc3ogXHUwMDI2XHUwMDI2XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODQtXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyAmIzQzOyBtYWNvZmYgLVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU2OT1zdGF0aWMgaW50IHBhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqbGVuLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTcwOlx0XHRcdFx0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIGludCB2bmV0X2hkcl9zeilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3MS17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTczLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTc0Olx0aWYgKCpsZW4gXHUwMDNjIHZuZXRfaGRyX3N6KVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NjpcdCpsZW4gLT0gdm5ldF9oZHJfc3o7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTg1LVx0LyogbW92ZSBpdGVyIHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZiBtYWMgaGVhZGVyICovXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODY6XHRpZiAodm5ldF9oZHJfc3ogIT0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcikpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODc6XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCB2bmV0X2hkcl9zeiAtIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4OC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NDU9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU2LVx0Ym9vbCBuZWVkX3dhaXQgPSAhKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NTc6XHRpbnQgdm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU4LVx0dW5zaWduZWQgY2hhciAqYWRkciA9IE5VTEw7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODE1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODE2Olx0aWYgKChzaXplX21heCBcdTAwM2UgZGV2LVx1MDAzZW10dSAmIzQzOyByZXNlcnZlICYjNDM7IFZMQU5fSExFTikgXHUwMDI2XHUwMDI2ICF2bmV0X2hkcl9zeilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgxNy1cdFx0c2l6ZV9tYXggPSBkZXYtXHUwMDNlbXR1ICYjNDM7IHJlc2VydmUgJiM0MzsgVkxBTl9ITEVOO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1MC1cdFx0dGxlbiA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NTE6XHRcdGlmICh2bmV0X2hkcl9zeikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUyOlx0XHRcdGRhdGEgJiM0Mzs9IHZuZXRfaGRyX3N6O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUzOlx0XHRcdHRwX2xlbiAtPSB2bmV0X2hkcl9zejtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1NC1cdFx0XHRpZiAodHBfbGVuIFx1MDAzYyAwKSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODU3LVx0XHRcdH1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1ODpcdFx0XHRtZW1jcHkoXHUwMDI2dm5ldF9oZHIsIGRhdGEgLSB2bmV0X2hkcl9zeiwgc2l6ZW9mKHZuZXRfaGRyKSk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTktXHRcdFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODgzLVx0XHQgICAgdHBfbGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICYjNDM7IHJlc2VydmUgXHUwMDI2XHUwMDI2XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4ODQ6XHRcdCAgICAhdm5ldF9oZHJfc3ogXHUwMDI2XHUwMDI2XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4ODUtXHRcdCAgICAhcGFja2V0X2V4dHJhX3ZsYW5fbGVuX2FsbG93ZWQoZGV2LCBza2IpKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk3NT1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk4Ny1cdHN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyOTg4Olx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVx1MDAzZXZuZXRfaGRyX3N6KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk4OS1cdGludCBoYXJkX2hlYWRlcl9sZW4sIGhsZW4sIHRsZW4sIGxpbmVhcjtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMzEtXHRcdHJlc2VydmUgPSBoYXJkX2hlYWRlcl9sZW47XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMzI6XHRpZiAodm5ldF9oZHJfc3opIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzAzMzpcdFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXHUwMDI2bGVuLCBcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDM0LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEwNC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEwNTpcdGlmICh2bmV0X2hkcl9zeikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTA2LVx0XHRlcnIgPSB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEwOC1cdFx0XHRnb3RvIG91dF9mcmVlO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTA5Olx0XHRsZW4gJiM0Mzs9IHZuZXRfaGRyX3N6O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTEwLVx0XHR2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc2tiLCBcdTAwMjZ2bmV0X2hkcik7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ2PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ1MS1cdGludCBjb3BpZWQsIGVycjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQ1MjpcdGludCB2bmV0X2hkcl9sZW4gPSBSRUFEX09OQ0UocGt0X3NrKHNrKS1cdTAwM2V2bmV0X2hkcl9zeik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0NTMtXHR1bnNpZ25lZCBpbnQgb3JpZ2xlbiA9IDA7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zODE3PXBhY2tldF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MDA0LVx0XHR9IGVsc2Uge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MDA1Olx0XHRcdFdSSVRFX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3osIGhkcl9sZW4pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MDA2LVx0XHRcdHJldCA9IDA7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00MDg5PXN0YXRpYyBpbnQgcGFja2V0X2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQxMzYtXHRjYXNlIFBBQ0tFVF9WTkVUX0hEUjpcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDEzNzpcdFx0dmFsID0gISFSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTM4LVx0XHRicmVhaztcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDEzOS1cdGNhc2UgUEFDS0VUX1ZORVRfSERSX1NaOlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MTQwOlx0XHR2YWwgPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTQxLVx0XHRicmVhaztcbi0tXG5uZXQvcGFja2V0L2RpYWcuYz0xMz1zdGF0aWMgaW50IHBkaWFnX3B1dF9pbmZvKGNvbnN0IHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpubHNrYilcbi0tXG5uZXQvcGFja2V0L2RpYWcuYy0yOS1cdFx0cGluZm8ucGRpX2ZsYWdzIHw9IFBESV9PUklHREVWO1xubmV0L3BhY2tldC9kaWFnLmM6MzA6XHRpZiAoUkVBRF9PTkNFKHBvLVx1MDAzZXZuZXRfaGRyX3N6KSlcbm5ldC9wYWNrZXQvZGlhZy5jLTMxLVx0XHRwaW5mby5wZGlfZmxhZ3MgfD0gUERJX1ZORVRIRFI7XG4tLVxubmV0L3BhY2tldC9pbnRlcm5hbC5oPTEwND1zdHJ1Y3QgcGFja2V0X3NvY2sge1xuLS1cbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC0xMTUtXHRpbnRcdFx0XHRpZmluZGV4O1x0LyogYm91bmQgZGV2aWNlXHRcdCovXG5uZXQvcGFja2V0L2ludGVybmFsLmg6MTE2Olx0dThcdFx0XHR2bmV0X2hkcl9zejtcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC0xMTctXHRfX2JlMTZcdFx0XHRudW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjA3CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDc3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQUZfUEFDS0VUIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgZGlmZiBvbmx5IHRvdWNoZXMgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydDsgaXQga2VlcHMgdGhpbmdzIGZvY3VzZWQuIFRoZSBjb2RlIGFkZHMgYF9fY2xlYXJfYml0YCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgdHBhY2tldF9yY3ZgLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIHZpcnRpbyBuZXQgaGVhZGVyIGFuZCB2ZXJzaW9ucyBgVFBBQ0tFVF9WMWAgb3IgYFRQQUNLRVRfVjJgLiBUaGlzIGltcGxpZXMgYSBmaXggZm9yIHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCBjbGVhcmluZyB0aGUgYHJ4X293bmVyX21hcGAgYml0IGluIGNhc2UgdGhlIGhlYWRlciBwYXJzaW5nIGZhaWxzLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcmluZyBidWZmZXIgbWFuYWdlbWVudC4KCk5vdywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHNldHVwPyBBYnNvbHV0ZWx5LiBgQUZfUEFDS0VUYCBzb2NrZXRzIGFyZSBicmVhZCBhbmQgYnV0dGVyIGZvciBhbnkgTGludXggbmV0d29ya2luZyBleHBlcnQsIGFuZCBlc3BlY2lhbGx5IGZvciBzb21lb25lIGxpa2UgbWUgd2hvIGlzIGludm9sdmVkIGluIGZ1enppbmcuIEkga25vdyBzeXprYWxsZXIgaGl0cyB0aGlzIGNvZGUgcGF0aCBhbGwgdGhlIHRpbWUuIFVzZXJzcGFjZSBjcmVhdGVzIHRoZXNlIHNvY2tldHMsIHNldHMgdXAgdGhlIHJpbmcgYnVmZmVyIHVzaW5nIGBQQUNLRVRfUlhfUklOR2Agd2l0aCBlaXRoZXIgYFRQQUNLRVRfVjFgIG9yIGBUUEFDS0VUX1YyYCwgYW5kIGVuYWJsZXMgYFBBQ0tFVF9WTkVUX0hEUmAuIFRoYXQmIzM5O3MgYWxsIHN0YW5kYXJkLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYHRwYWNrZXRfcmN2YCBpcyBkaXJlY3RseSBpbnZvbHZlZCwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKRG9lcyB0aGlzIHRvdWNoIGFueSBjb3JlIHN1YnN5c3RlbXM/IFl1cCwgaXQmIzM5O3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBgYWZfcGFja2V0LmNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbC4KCklzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHRoZSBmdW5jdGlvbiBgdHBhY2tldF9yY3ZgLCBmb2N1c2luZyBvbiByaW5nIGJ1ZmZlciBiZWhhdmlvciBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgKGByeF9vd25lcl9tYXBgKS4gSSBrbm93IHRoYXQgZXJyb3JzIGluIHJpbmcgYnVmZmVyIGhhbmRsaW5nIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBjb25jdXJyZW5jeSBwcm9ibGVtcyBhbmQgZXZlbiBtZW1vcnkgY29ycnVwdGlvbiwgc28gdmVyaWZ5aW5nIHRoaXMgZml4IGlzIGNydWNpYWwuIFRoZSBgRm9jdXNTeW1ib2xzYCBvZiBgdHBhY2tldF9yY3ZgIGFuZCBgcGFja2V0X3NldF9yaW5nYCBjb25maXJtIHRoaXMuCgpGaW5hbGx5LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGBQQUNLRVRgIGlzIGFsbCB0aGF0JiMzOTtzIG5lZWRlZC4gSSBqdXN0IGRvdWJsZS1jaGVja2VkIHRoYXQgYFBBQ0tFVGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBgTkVUYCBpcyB1bml2ZXJzYWwuIFNvLCBgUEFDS0VUYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIGVuYWJsaW5nIHdoYXQgd2UgbmVlZC4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0LiBUaGUgZml4IGlzIHdpdGhpbiBhIGNydWNpYWwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIGlzIHJlYWRpbHkgcmVhY2hhYmxlLCBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcHJldmVudCByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHNvY2tldCByaW5nIGJ1ZmZlciBtYW5hZ2VtZW50LiBJJiMzOTttIGNhbGxpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RwYWNrZXRfcmN2JiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRfcmluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0cGFja2V0X3JjdigpIGluIG5ldC9wYWNrZXQvYWZfcGFja2V0LmMsIGVuc3VyaW5nIHRoYXQgdGhlIHNsb3QgaW4gcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHBhY2tldF9yY3YmIzM0OywKICAgICYjMzQ7cGFja2V0X3NldF9yaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCBpcyBjbGVhcmVkIHdoZW4gdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKSBmYWlscyBmb3IgVFBBQ0tFVF9WMS9WMiByaW5ncy4gVGhpcyBjb2RlIGlzIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9QQUNLRVQgc29ja2V0cyBjb25maWd1cmVkIHdpdGggUEFDS0VUX1JYX1JJTkcgYW5kIFBBQ0tFVF9WTkVUX0hEUi4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgc2xvdCBvd25lcnNoaXAgdHJhY2tpbmcsIHJpbmcgbWFuYWdlbWVudCwgYW5kIHBhY2tldCBkcm9wIGFjY291bnRpbmcgYmVoYXZlIGNvcnJlY3RseSB1bmRlciBtYWxmb3JtZWQgcGFja2V0IGFuZCBlcnJvciBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBgdHBhY2tldF9yY3YoKWAgd2hlcmUgZmFpbHVyZSBpbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKWAgY2xlYW5lZCB1cCBibG9jayBzdGF0ZSBvbmx5IGZvciBgVFBBQ0tFVF9WM2AsIG9taXR0aW5nIGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcClgIGZvciBgVFBBQ0tFVF9WMWAgYW5kIGBUUEFDS0VUX1YyYC5cblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIChpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBqdW1wcyB0byBgZHJvcF9uX2FjY291bnRgKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgKGBzbG90X2lkYCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBleHBsaWNpdGx5IGFzc2lnbmVkIGBwby1cdTAwM2VyeF9yaW5nLmhlYWRgLCBhbmQgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBiaXRtYXBfYWxsb2NgKS5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYWxyZWFkeSBjb3ZlciBhbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggYml0bWFwIGJvdW5kcyBvciBwb2ludGVyIHZhbGlkaXR5LlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OTBjNTQxYTI0MjY3ZWIyNDFjMjk2N2I0NTVlZDNhMDIyZTA0MTA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCA3NmJkZTc5MDZkNDk0Li41MGNhZTMyYWUyNjkyIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTIzODQsNyAmIzQzOzIzODQsOSBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgJiM0MzsgbWFjb2ZmIC0KIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciksCiAJCQkJICAgIHZpb19sZSgpLCB0cnVlLCAwKSkgewotCQlpZiAocG8tJmd0O3RwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMykKJiM0MzsJCWlmIChwby0mZ3Q7dHBfdmVyc2lvbiAmbHQ7PSBUUEFDS0VUX1YyKQomIzQzOwkJCV9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLSZndDtyeF9yaW5nLnJ4X293bmVyX21hcCk7CiYjNDM7CQllbHNlCiAJCQlwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKCZhbXA7cG8tJmd0O3J4X3JpbmcpOwogCQlnb3RvIGRyb3Bfbl9hY2NvdW50OwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBhIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBwYXRjaCB0byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgbmVjZXNzaXRhdGVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNvdmVyYWdlLiBUaGlzIGZlZWxzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZGVmZW5zaXZlIGFuYWx5c2lzLCBhIFFBL3Nhbml0aXplciBldmFsdWF0aW9uIHRhc2s7IGl0JiMzOTtzIGJlbmlnbiwgcHVyZWx5IGRlZmVuc2l2ZSBpbiBuYXR1cmUsIG5vIG9mZmVuc2l2ZSBwYXlsb2FkcyBvciBleHBsb2l0IGFuYWx5c2lzIGFyZSByZXF1aXJlZC4gR29vZC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZGlmZiBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgYFRQQUNLRVRfVjNgIGFuZCB0aGUgY2xlYXJpbmcgb2YgYSBiaXQgd2l0aGluIHRoZSBgcnhfb3duZXJfbWFwYCBvciBhIGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBjYWxsLCBiYXNlZCBvbiB0aGUgYHBvLSZndDt0cF92ZXJzaW9uYC4gSXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgYSBidWcgb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gcGFja2V0IHJlY2VwdGlvbiBpbiBkaWZmZXJlbnQgVFBBQ0tFVCB2ZXJzaW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGB2aXJ0aW9fbmV0X2hkcmAuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzODQuIEkmIzM5O2xsIHVzZSBteSB0b29scyB0byByZWFkIHRoZSBmaWxlIG9yIGdyZXAgZm9yIHRoZSByZWxldmFudCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB0aGUgcG90ZW50aWFsIHJpc2sgc3VyZmFjZXMgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHVzZXItc3VwcGxpZWQgZGF0YSB0aGF0IGNvdWxkIGxlYWQgdG8gS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGByeF9vd25lcl9tYXBgIGlzIGFuZCB3aGF0IGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBkb2VzLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIEtNU0FOIGZ1enppbmcgaXMgbGlrZWx5IHRvIGJlIGJlbmVmaWNpYWwuIElmIGl0JiMzOTtzIGEgY3JpdGljYWwgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgdXNlci1zdXBwbGllZCBkYXRhLCB0aGUgS01TQU4gc2Vzc2lvbiB3aWxsIGJlIHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYwOlx0XHRcdG52YWwgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuIC0gbWFjb2ZmO1xuMjM2MTpcdFx0XHRwcl9lcnJfb25jZShcJiMzNDt0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxuXCYjMzQ7LFxuMjM2MjpcdFx0XHRcdCAgICBzbmFwbGVuLCBudmFsLCBtYWNvZmYpO1xuMjM2MzpcdFx0XHRzbmFwbGVuID0gbnZhbDtcbjIzNjQ6XHRcdFx0aWYgKHVubGlrZWx5KChpbnQpc25hcGxlbiBcdTAwM2MgMCkpIHtcbjIzNjU6XHRcdFx0XHRzbmFwbGVuID0gMDtcbjIzNjY6XHRcdFx0XHRtYWNvZmYgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuO1xuMjM2NzpcdFx0XHRcdHZuZXRfaGRyX3N6ID0gMDtcbjIzNjg6XHRcdFx0fVxuMjM2OTpcdFx0fVxuMjM3MDpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4yMzcxOlx0XHRoLnJhdyA9IHBhY2tldF9jdXJyZW50X3J4X2ZyYW1lKHBvLCBza2IsXG4yMzcyOlx0XHRcdFx0XHRcdFRQX1NUQVRVU19LRVJORUwsIChtYWNvZmYmIzQzO3NuYXBsZW4pKTtcbjIzNzM6XHRcdGlmICghaC5yYXcpXG4yMzc0Olx0XHRcdGdvdG8gZHJvcF9uX2FjY291bnQ7XG4yMzc1Olx0XG4yMzc2Olx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpIHtcbjIzNzc6XHRcdFx0c2xvdF9pZCA9IHBvLVx1MDAzZXJ4X3JpbmcuaGVhZDtcbjIzNzg6XHRcdFx0aWYgKHRlc3RfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcbjIzNzk6XHRcdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuMjM4MDpcdFx0XHRfX3NldF9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xuMjM4MTpcdFx0fVxuMjM4MjpcdFxuMjM4MzpcdFx0aWYgKHZuZXRfaGRyX3N6IFx1MDAyNlx1MDAyNlxuMjM4NDpcdFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgJiM0MzsgbWFjb2ZmIC1cbjIzODU6XHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcbjIzODY6XHRcdFx0XHRcdCAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHtcbjIzODc6XHRcdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKVxuMjM4ODpcdFx0XHRcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbjIzODk6XHRcdFx0ZWxzZVxuMjM5MDpcdFx0XHRcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG4yMzkxOlx0XHRcdGdvdG8gZHJvcF9uX2FjY291bnQ7XG4yMzkyOlx0XHR9XG4yMzkzOlx0XG4yMzk0Olx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpIHtcbjIzOTU6XHRcdFx0cGFja2V0X2luY3JlbWVudF9yeF9oZWFkKHBvLCBcdTAwMjZwby1cdTAwM2VyeF9yaW5nKTtcbjIzOTY6XHRcdC8qXG4yMzk3Olx0XHQgKiBMT1NJTkcgd2lsbCBiZSByZXBvcnRlZCB0aWxsIHlvdSByZWFkIHRoZSBzdGF0cyxcbjIzOTg6XHRcdCAqIGJlY2F1c2UgaXQmIzM5O3MgQ09SIC0gQ2xlYXIgT24gUmVhZC5cbjIzOTk6XHRcdCAqIEFueXdheXMsIG1vdmluZyBpdCBmb3IgVjEvVjIgb25seSBhcyBWMyBkb2VzbiYjMzk7dCBuZWVkIHRoaXNcbjI0MDA6XHRcdCAqIGF0IHBhY2tldCBsZXZlbC5cbjI0MDE6XHRcdCAqL1xuMjQwMjpcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2cG8tXHUwMDNldHBfZHJvcHMpKVxuMjQwMzpcdFx0XHRcdHN0YXR1cyB8PSBUUF9TVEFUVVNfTE9TSU5HO1xuMjQwNDpcdFx0fVxuMjQwNTpcdFxuMjQwNjpcdFx0cG8tXHUwMDNlc3RhdHMuc3RhdHMxLnRwX3BhY2tldHMmIzQzOyYjNDM7O1xuMjQwNzpcdFx0aWYgKGNvcHlfc2tiKSB7XG4yNDA4Olx0XHRcdHN0YXR1cyB8PSBUUF9TVEFUVVNfQ09QWTtcbjI0MDk6XHRcdFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoY29weV9za2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgU291cmNlIE1hdGVyaWFsKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gQmVmb3JlIEkgZXZlbiBhdHRlbXB0IHRvIHN1bW1hcml6ZSBvciB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gc3BlY2lmaWMgc2VjdGlvbnMgb2YgdGhpcyB0ZXh0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSB0ZXh0IHRoYXQgb2NjdXJzICpiZWZvcmUqIGxpbmUgMjM2MCBhbmQgKmFmdGVyKiBsaW5lIDI0MDkuIEJ5IGZvY3VzaW5nIG9uIHRoZXNlIGRlZmluZWQgYm91bmRhcmllcywgSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGxpbmVzIGluIHRoZSBtaWRkbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIGZvciBhIGNvbXBsZXRlIGFuZCBpbmZvcm1lZCBhc3Nlc3NtZW50IG9mIHRoZSBzdWJqZWN0IG1hdHRlci4gSXQmIzM5O3MgYSBjcml0aWNhbCBhbmFseXRpY2FsIHN0ZXAgYmVmb3JlIGRpdmluZyBpbnRvIGEgZGV0YWlsZWQgc3lub3BzaXMsIHJlYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzMwOlx0XHRpZiAobmV0b2ZmIFx1MDAzZSBVU0hSVF9NQVgpIHtcbjIzMzE6XHRcdFx0YXRvbWljX2luYyhcdTAwMjZwby1cdTAwM2V0cF9kcm9wcyk7XG4yMzMyOlx0XHRcdGdvdG8gZHJvcF9uX3Jlc3RvcmU7XG4yMzMzOlx0XHR9XG4yMzM0Olx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpIHtcbjIzMzU6XHRcdFx0aWYgKG1hY29mZiAmIzQzOyBzbmFwbGVuIFx1MDAzZSBwby1cdTAwM2VyeF9yaW5nLmZyYW1lX3NpemUpIHtcbjIzMzY6XHRcdFx0XHRpZiAoUkVBRF9PTkNFKHBvLVx1MDAzZWNvcHlfdGhyZXNoKSBcdTAwMjZcdTAwMjZcbjIzMzc6XHRcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuMjMzODpcdFx0XHRcdFx0aWYgKHNrYl9zaGFyZWQoc2tiKSkge1xuMjMzOTpcdFx0XHRcdFx0XHRjb3B5X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuMjM0MDpcdFx0XHRcdFx0fSBlbHNlIHtcbjIzNDE6XHRcdFx0XHRcdFx0Y29weV9za2IgPSBza2JfZ2V0KHNrYik7XG4yMzQyOlx0XHRcdFx0XHRcdHNrYl9oZWFkID0gc2tiLVx1MDAzZWRhdGE7XG4yMzQzOlx0XHRcdFx0XHR9XG4yMzQ0Olx0XHRcdFx0XHRpZiAoY29weV9za2IpIHtcbjIzNDU6XHRcdFx0XHRcdFx0bWVtc2V0KFx1MDAyNlBBQ0tFVF9TS0JfQ0IoY29weV9za2IpLVx1MDAzZXNhLmxsLCAwLFxuMjM0NjpcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKFBBQ0tFVF9TS0JfQ0IoY29weV9za2IpLVx1MDAzZXNhLmxsKSk7XG4yMzQ3Olx0XHRcdFx0XHRcdHNrYl9zZXRfb3duZXJfcihjb3B5X3NrYiwgc2spO1xuMjM0ODpcdFx0XHRcdFx0fVxuMjM0OTpcdFx0XHRcdH1cbjIzNTA6XHRcdFx0XHRzbmFwbGVuID0gcG8tXHUwMDNlcnhfcmluZy5mcmFtZV9zaXplIC0gbWFjb2ZmO1xuMjM1MTpcdFx0XHRcdGlmICgoaW50KXNuYXBsZW4gXHUwMDNjIDApIHtcbjIzNTI6XHRcdFx0XHRcdHNuYXBsZW4gPSAwO1xuMjM1MzpcdFx0XHRcdFx0dm5ldF9oZHJfc3ogPSAwO1xuMjM1NDpcdFx0XHRcdH1cbjIzNTU6XHRcdFx0fVxuMjM1NjpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShtYWNvZmYgJiM0Mzsgc25hcGxlbiBcdTAwM2VcbjIzNTc6XHRcdFx0XHQgICAgR0VUX1BCRFFDX0ZST01fUkIoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyktXHUwMDNlbWF4X2ZyYW1lX2xlbikpIHtcbjIzNTg6XHRcdFx0dTMyIG52YWw7XG4yMzU5Olx0XG4yMzYwOlx0XHRcdG52YWwgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuIC0gbWFjb2ZmO1xuMjM2MTpcdFx0XHRwcl9lcnJfb25jZShcJiMzNDt0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxuXCYjMzQ7LFxuMjM2MjpcdFx0XHRcdCAgICBzbmFwbGVuLCBudmFsLCBtYWNvZmYpO1xuMjM2MzpcdFx0XHRzbmFwbGVuID0gbnZhbDtcbjIzNjQ6XHRcdFx0aWYgKHVubGlrZWx5KChpbnQpc25hcGxlbiBcdTAwM2MgMCkpIHtcbjIzNjU6XHRcdFx0XHRzbmFwbGVuID0gMDtcbjIzNjY6XHRcdFx0XHRtYWNvZmYgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuO1xuMjM2NzpcdFx0XHRcdHZuZXRfaGRyX3N6ID0gMDtcbjIzNjg6XHRcdFx0fVxuMjM2OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IFJlY2VpdmUgSXNzdWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGB0cGFja2V0X3JjdmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMzc2LiBJIHNlZSBhIGNvbmRpdGlvbmFsIGJsb2NrIGhlcmUgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZywgaGFuZGxpbmcgYFRQQUNLRVRfVjJgIGFuZCBlYXJsaWVyIHZlcnNpb25zLiBUaGUgaW5pdGlhbCBjaGVjayBpbnZvbHZlcyBgcG8tJmd0O3J4X3JpbmcuaGVhZGAgYW5kIGByeF9vd25lcl9tYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzbG90IGlzbiYjMzk7dCBhbHJlYWR5IGNsYWltZWQuIElmIGl0IGlzLCBgZHJvcF9uX2FjY291bnRgIGlzIGNhbGxlZCBpbW1lZGlhdGVseS4gSWYgbm90LCB0aGUgYml0IHJlcHJlc2VudGluZyBvd25lcnNoaXAgaXMgc2V0LgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgLiBUaGlzIGxpa2VseSBoYW5kbGVzIHRoZSBWaXJ0SU8gbmV0d29yayBoZWFkZXIgYW5kIGl0cyBleHRyYWN0aW9uIGZyb20gdGhlIFNLQi4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgY29uZGl0aW9uOiBpZiB0aGlzIGhlYWRlciBleHRyYWN0aW9uIGZhaWxzLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBvd25lcnNoaXAgYml0IGluIG9sZGVyIHZlcnNpb25zIChgVFBBQ0tFVF9WMmAgb3IgZWFybGllciksIG9yIGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBmb3IgbmV3ZXIgdmVyc2lvbnMuIFRoaXMgbWFrZXMgc2Vuc2U7IGlmIHdlIGNhbiYjMzk7dCBwcm9wZXJseSBwcm9jZXNzIHRoZSBoZWFkZXIsIHdlIGNhbiYjMzk7dCB1c2UgdGhpcyByaW5nIGJ1ZmZlciwgYW5kIG11c3QgcmVsZWFzZSBpdC4gVGhlIGNvZGUgdGhlbiBjYWxscyBgZHJvcF9uX2FjY291bnRgLgoKTm93LCBsZXQgbWUgZ28gYmFjayBhIG1vbWVudCBhbmQgbG9vayBhdCB0aGUgJiMzNDtiZWZvcmUmIzM0OyB2ZXJzaW9uIG9mIHRoZSBjb2RlLCB3aGljaCBzZWVtcyB0byBpbXBseSB0aGlzIGJsb2NrIHdhcyBhZGRlZC4gUHJldmlvdXNseSwgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCBibG9jayB3YXMgb25seSBkaWZmZXJlbnQgZm9yIGBUUEFDS0VUX1YzYC4gSSBoYXZlIGEgZmVlbGluZyB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgdGhhdCB0aGlzIG5ldyBjaGFuZ2UgYXR0ZW1wdGVkIHRvIGFkZHJlc3MuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBnaXQgaGlzdG9yeSBvZiB0aGlzIGNvbW1pdCwgb3IgYmV0dGVyIHlldCwgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYHJ4X293bmVyX21hcGAgaW4gdGhlIGdpdCBsb2cgdG8gZ2V0IHRoZSBmdWxsIHN0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgdGhlIHNwZWNpZmljIHByb2JsZW0gaXQgYWltZWQgdG8gcmVzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhfb3duZXJfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzctXHRcdHNsb3RfaWQgPSBwby1cdTAwM2VyeF9yaW5nLmhlYWQ7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNzg6XHRcdGlmICh0ZXN0X2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCkpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzktXHRcdFx0Z290byBkcm9wX25fYWNjb3VudDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM4MDpcdFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4MS1cdH1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODctXHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM4ODpcdFx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXHRcdGVsc2Vcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MDYtXHRcdF9fcGFja2V0X3NldF9zdGF0dXMocG8sIGgucmF3LCBzdGF0dXMpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTA3Olx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MDgtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NTE1PXN0YXRpYyBpbnQgcGFja2V0X3NldF9yaW5nKHN0cnVjdCBzb2NrICpzaywgdW5pb24gdHBhY2tldF9yZXFfdSAqcmVxX3UsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NTE5LVx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ1MjA6XHR1bnNpZ25lZCBsb25nICpyeF9vd25lcl9tYXAgPSBOVUxMO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NTIxLVx0aW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjA2LVx0XHRcdGlmICghdHhfcmluZykge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA3Olx0XHRcdFx0cnhfb3duZXJfbWFwID0gYml0bWFwX2FsbG9jKHJlcS1cdTAwM2V0cF9mcmFtZV9ucixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYwOC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA5Olx0XHRcdFx0aWYgKCFyeF9vd25lcl9tYXApXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MTAtXHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWVfcGdfdmVjO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0NC1cdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjQ1Olx0XHRcdHN3YXAocmItXHUwMDNlcnhfb3duZXJfbWFwLCByeF9vd25lcl9tYXApO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ2LVx0XHRyYi1cdTAwM2VmcmFtZV9tYXggPSAocmVxLVx1MDAzZXRwX2ZyYW1lX25yIC0gMSk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjgyLVx0aWYgKHBnX3ZlYykge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjgzOlx0XHRiaXRtYXBfZnJlZShyeF9vd25lcl9tYXApO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00Njg0LVx0XHRpZiAodHhfcmluZyBcdTAwMjZcdTAwMjYgY2xvc2luZylcbi0tXG5uZXQvcGFja2V0L2ludGVybmFsLmg9NTQ9c3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciB7XG4tLVxubmV0L3BhY2tldC9pbnRlcm5hbC5oLTY4LVx0dW5pb24ge1xubmV0L3BhY2tldC9pbnRlcm5hbC5oOjY5Olx0XHR1bnNpZ25lZCBsb25nXHRcdFx0KnJ4X293bmVyX21hcDtcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC03MC1cdFx0c3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlXHRwcmJfYmRxYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVFBBQ0tFVCB2MS92MiBQYWNrZXQgUmluZyBCdWZmZXIgTGVhayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9wYWNrZXQvaW50ZXJuYWwuaGAgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBwYWNrZXRfcmluZ19idWZmZXJgIHN0cnVjdC4gVGhlIHVuaW9uIHVzaW5nIGVpdGhlciBgcnhfb3duZXJfbWFwYCBvciBgcHJiX2JkcWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllIOKAkyBjbGFzc2ljIHZlcnNpb25pbmcgdHJpY2tlcnkuIGByeF9vd25lcl9tYXBgIGlzIGZvciBUUEFDS0VUX1YxIGFuZCBUUEFDS0VUX1YyLCB3aGlsZSBgcHJiX2JkcWNgIGlzIGZvciBWMy4gR290IGl0LgoKTm93LCBteSBjb25jZXJuIGlzIHRoaXMgYHJ4X293bmVyX21hcGAgdXNhZ2UuIFRoZSBjb2RlJiMzOTtzIHNldHRpbmcgdGhlIGBzbG90X2lkYCBiaXQgaW4gYHJ4X293bmVyX21hcGAgaWYgdGhlIHBhY2tldCB2ZXJzaW9uIGlzIFYxIG9yIFYyLiBGaW5lLCBzbyBmYXIgc28gZ29vZCwgbGluZSAyMzgwLiBUaGUgcHJvYmxlbSBhcmlzZXMgaWYgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCAqZmFpbHMqLiBJbiB0aGF0IGNhc2UsIGxvb2shIE9yaWdpbmFsbHksIGZvciBWMSBhbmQgVjIsIHRoZSBjb2RlICpuZXZlciogY2xlYXJlZCB0aGUgYml0ISBUaGUgYF9fc2V0X2JpdGAgd2FzIGNhbGxlZCwgYnV0IGlmIHRoZSBoZWFkZXIgcGFyc2luZyBmYWlsZWQsIHRoZSBiaXQgc3RheWVkIHNldC4KClRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgbGVhaywgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uLiBUaGUgc2xvdCBzdGF5cyBtYXJrZWQgYXMgb3duZWQgZm9yZXZlciwgbWVhbmluZyBlaXRoZXIgdGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgY29udGludW91c2x5LCBvciBhIHN0YWxlIHNsb3Qgb3duZXJzaGlwIHN0YXRlIGNvdWxkIGJlIHRyaWdnZXJlZC4KClNvLCB0aGlzIHBhdGNoLi4uIGFoLCBJIHNlZS4gSXQmIzM5O3MgY2xldmVybHkgYWRkcmVzc2luZyB0aGUgaXNzdWUuIFRoZSBkaWZmIHNob3dzIHRoYXQgbm93LCBpZiB0aGUgdmVyc2lvbiBpcyBWMSBvciBWMiwgdGhlIGNvZGUgKmRvZXMqIGNsZWFyIHRoZSBiaXQgd2l0aCBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tJmd0O3J4X3Jpbmcucnhfb3duZXJfbWFwKWAgaWYgdGhlIHZlcnNpb24gaXMgVjEgb3IgVjIgYmVmb3JlIGdvaW5nIHRvIGBkcm9wX25fYWNjb3VudGAuIE90aGVyd2lzZSwgaXQgdXNlcyBgcHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cygmYW1wO3BvLSZndDtyeF9yaW5nKWAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBiaXQgaXMgYWx3YXlzIGNsZWFyZWQgb24gZXJyb3IsIHByZXZlbnRpbmcgdGhlIG93bmVyc2hpcCBsZWFrLgoKVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIGNoZWNrIHRoZSBgc2xvdF9pZGAgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIGluIGB0cGFja2V0X3JjdmAgc3RhcnRpbmcgZnJvbSBsaW5lcyAyMjQ5IHRvIDIzODUgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIG5lZWRzIHRvIGJlIGJ1bGxldHByb29mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNDU6XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG4yMjQ2Olx0XHRyZXR1cm4gMDtcbjIyNDc6XHR9XG4yMjQ4Olx0XG4yMjQ5Olx0c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMjI1MDpcdFx0XHQgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuMjI1MTpcdHtcbjIyNTI6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0NPTlNVTUVEO1xuMjI1MzpcdFx0c3RydWN0IHNvY2sgKnNrID0gTlVMTDtcbjIyNTQ6XHRcdHN0cnVjdCBwYWNrZXRfc29jayAqcG87XG4yMjU1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDtcbjIyNTY6XHRcdHVuaW9uIHRwYWNrZXRfdWhkciBoO1xuMjI1NzpcdFx0dTggKnNrYl9oZWFkID0gc2tiLVx1MDAzZWRhdGE7XG4yMjU4Olx0XHRpbnQgc2tiX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4yMjU5Olx0XHR1bnNpZ25lZCBpbnQgc25hcGxlbiwgcmVzO1xuMjI2MDpcdFx0dW5zaWduZWQgbG9uZyBzdGF0dXMgPSBUUF9TVEFUVVNfVVNFUjtcbjIyNjE6XHRcdHVuc2lnbmVkIHNob3J0IG1hY29mZiwgaGRybGVuO1xuMjI2MjpcdFx0dW5zaWduZWQgaW50IG5ldG9mZjtcbjIyNjM6XHRcdHN0cnVjdCBza19idWZmICpjb3B5X3NrYiA9IE5VTEw7XG4yMjY0Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbjIyNjU6XHRcdF9fdTMyIHRzX3N0YXR1cztcbjIyNjY6XHRcdHVuc2lnbmVkIGludCBzbG90X2lkID0gMDtcbjIyNjc6XHRcdGludCB2bmV0X2hkcl9zeiA9IDA7XG4yMjY4Olx0XG4yMjY5Olx0XHQvKiBzdHJ1Y3QgdHBhY2tldHsyLDN9X2hkciBpcyBhbGlnbmVkIHRvIGEgbXVsdGlwbGUgb2YgVFBBQ0tFVF9BTElHTk1FTlQuXG4yMjcwOlx0XHQgKiBXZSBtYXkgYWRkIG1lbWJlcnMgdG8gdGhlbSB1bnRpbCBjdXJyZW50IGFsaWduZWQgc2l6ZSB3aXRob3V0IGZvcmNpbmdcbjIyNzE6XHRcdCAqIHVzZXJzcGFjZSB0byBjYWxsIGdldHNvY2tvcHQoLi4uLCBQQUNLRVRfSERSTEVOLCAuLi4pLlxuMjI3MjpcdFx0ICovXG4yMjczOlx0XHRCVUlMRF9CVUdfT04oVFBBQ0tFVF9BTElHTihzaXplb2YoKmguaDIpKSAhPSAzMik7XG4yMjc0Olx0XHRCVUlMRF9CVUdfT04oVFBBQ0tFVF9BTElHTihzaXplb2YoKmguaDMpKSAhPSA0OCk7XG4yMjc1Olx0XG4yMjc2Olx0XHRpZiAoc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSylcbjIyNzc6XHRcdFx0Z290byBkcm9wO1xuMjI3ODpcdFxuMjI3OTpcdFx0c2sgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbjIyODA6XHRcdHBvID0gcGt0X3NrKHNrKTtcbjIyODE6XHRcbjIyODI6XHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgc29ja19uZXQoc2spKSlcbjIyODM6XHRcdFx0Z290byBkcm9wO1xuMjI4NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGBzbG90X2lkYCBpbml0aWFsaXplZCB0byAwLiBJZiB0aGUgcGFja2V0IHR5cGUgaXMgb2xkIChgcG8tJmd0O3RwX3ZlcnNpb24gJmx0Oz0gVFBBQ0tFVF9WMmApLCBgc2xvdF9pZGAgZ2V0cyB1cGRhdGVkIHRvIGBwby0mZ3Q7cnhfcmluZy5oZWFkYCwgYW5kIHdlIHNldCBhIGJpdCBpbiBgcnhfb3duZXJfbWFwYCB1c2luZyBgX19zZXRfYml0YC4gTm93LCBpZiB3ZSBoaXQgYW4gZXJyb3IgbGF0ZXIsIHdlIG5lZWQgdG8gY2xlYXIgdGhhdCBiaXQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyBgc2xvdF9pZGAgdXNlZCB3aXRob3V0IGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgbG9va2luZyBhdCB0aGUgY29kZSwgaW4gdGhlIGVycm9yIHBhdGgsIGlmIHRoZSBwYWNrZXQgdHlwZSBpcyBvbGQsIHdlICpjbGVhciogdGhlIGJpdCB3ZSBwcmV2aW91c2x5ICpzZXQqICh1c2luZyBgX19jbGVhcl9iaXRgKS4gSWYgaXQmIzM5O3MgYFRQQUNLRVRfVjNgLCBhIGRpZmZlcmVudCBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmVzZXQgdGhlIGZpbGwgc3RhdHVzLCBzbyBubyBiaXQgaXMgY2xlYXJlZC4KClNvLCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHdoZXJlIHBvdGVudGlhbCBwcm9ibGVtcyAqY291bGQqIG9jY3VyLiBGaXJzdCwgd2hhdCBkb2VzIHRoaXMgYml0IGluIHRoZSBgcnhfb3duZXJfbWFwYCBldmVuICptZWFuKj8gT2theSwgSSByZWNhbGwgaXQmIzM5O3MgdXNlZCB0byB0cmFjayBvd25lcnNoaXAgb2YgcmluZyBidWZmZXIgc2xvdHMuIEluIHRoZSBlcnJvciBwYXRoLCB3ZSBhcmUgKnJlbGVhc2luZyogb3duZXJzaGlwLiBJZiB0aGUgcGFja2V0IHR5cGUgaXMgb2xkICgmbHQ7PSBWMiksIHRoZW4gd2UgY2xlYXIgdGhlIGJpdCB0byByZWxlYXNlIG93bmVyc2hpcC4KCkkgd2FzIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgS01TQU4gYW5kIEtBU0FOIHdvdWxkIGRldGVjdCBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWFkcyBhbmQgbGVha3MsIHdoaWxlIEtBU0FOIGlzIHRoZSBnby10byBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUuCgpEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBwcm9ibGVtcyBiYXNlZCBvbiB0aG9zZSBLQVNBTiAvIEtNU0FOIGNoZWNrcz8gV2VsbCwgbm90aGluZyYjMzk7cyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBmaWVsZC4gTm8gY29uZGl0aW9uYWwgbG9naWMgc2VlbXMgdG8gYmUgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UmIzM5O3JlIG5vdCBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIGVpdGhlci4gQW5kIHRoZXJlIGFyZSBubyBvYnZpb3VzIGJvdW5kcyBpc3N1ZXMgdGhhdCB3b3VsZCBjYXVzZSByZWFkL3dyaXRlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgY291bGQgYHJ4X293bmVyX21hcGAgYmUgTlVMTD8gTGV0JiMzOTtzIHRyYWNlIGl0IGJhY2sgdG8gYHBhY2tldF9zZXRfcmluZ2AuIEFoLCB5ZXMsIGl0JiMzOTtzIGFsbG9jYXRlZCB3aXRoIGBiaXRtYXBfYWxsb2NgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBfX0dGUF9aRVJPYC4gQW5kIHRoZSBjb2RlICpkb2VzKiBjaGVjayBmb3IgYSBOVUxMIGByeF9vd25lcl9tYXBgIGFmdGVyIHRoZSBhbGxvY2F0aW9uIGFuZCBqdW1wcyB0byBgb3V0X2ZyZWVfcGdfdmVjYCBpZiBpdCBpcyBudWxsLCBzbyBpdCYjMzk7cyBpbXBvc3NpYmxlIGZvciBgcnhfb3duZXJfbWFwYCB0byBiZSBudWxsLgoKQW5kLCBpZiBgc2xvdF9pZGAgaXMgb3V0IG9mIGJvdW5kcywgdGhhdCBzaG91bGQgYWxzbyBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4sIGFzIGl0IHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYml0IGFjY2Vzcy4gQW5kIGBzbG90X2lkYCBzaG91bGQgYmUgYm91bmQgYnkgYHBvLSZndDtyeF9yaW5nLmhlYWRgIGFuZCB0aGUgb3ZlcmFsbCByaW5nIHNpemUuIFNvIG5vLgoKTm93LCB3aGF0JiMzOTtzIHRoZSBhY3R1YWwgYnVnIHRoaXMgcGF0Y2ggZml4ZXM/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBoaXN0b3J5IGFuZCBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTk3Mj1zdGF0aWMgaW50IHByYl9xdWV1ZV9mcm96ZW4oc3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlICpwa2MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NzYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjk3NzpzdGF0aWMgdm9pZCBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKHN0cnVjdCBwYWNrZXRfcmluZ19idWZmZXIgKnJiKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NzgtXHRfX3JlbGVhc2VzKFx1MDAyNnBrYy1cdTAwM2VibGtfZmlsbF9pbl9wcm9nX2xvY2spXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXHRcdGVsc2Vcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM5MDpcdFx0XHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzkxLVx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxMC1cdH0gZWxzZSBpZiAocG8tXHUwMDNldHBfdmVyc2lvbiA9PSBUUEFDS0VUX1YzKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1MTE6XHRcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MTItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTU2CgkJCQkJCQlvdXRwdXQ6IDI4MwoJCQkJCQkJdGhvdWdodHM6IDk1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBKdXN0aWZpY2F0aW9uIE5lZWRlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkcmVzc2luZyBhIGJ1ZyBpbiBgdHBhY2tldF9yY3YoKWAuIFNwZWNpZmljYWxseSwgd2hlbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGZhaWxzLCB0aGVyZSYjMzk7cyBhIGNsZWFudXAgb3ZlcnNpZ2h0LiBUaGUgb3JpZ2luYWwgY29kZSBvbmx5IGNsZWFyZWQgdGhlIGJsb2NrIHN0YXR1cyBmb3IgYFRQQUNLRVRfVjNgIHBhY2tldHMsIG5lZ2xlY3RpbmcgdG8gY2xlYXIgdGhlIG93bmVyc2hpcCBiaXQgaW4gYHBvLSZndDtyeF9yaW5nLnJ4X293bmVyX21hcGAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgIHBhY2tldHMuIFRoaXMgbWVhbnMgc2xvdHMgd2VyZSBnZXR0aW5nIGluY29ycmVjdGx5IG1hcmtlZCBhcyBvd25lZCwgZXZlbiBhZnRlciBhbiBlcnJvci4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIG93bmVyc2hpcCBiaXQgZ2V0cyBjbGVhcmVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHBhY2tldCB2ZXJzaW9uLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyByZXF1aXJlcyBhIEtNU0FOIGNoZWNrLiBMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGlzOgoKMS4gICoqV2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkPyoqIEl0JiMzOTtzIGEgY2xlYW51cCBwYXRoLiBXZSYjMzk7cmUgKnJlbW92aW5nKiBhIHBvdGVudGlhbCBtaXNzZWQgc3RlcCwgbm90IGludHJvZHVjaW5nIG5ldyBjb21wbGV4IGxvZ2ljIG9yIGFsbG9jYXRpb25zLgoKMi4gICoqTWVtb3J5IEFjY2VzczoqKiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiB0aGUgYml0IG9wZXJhdGlvbnMgb3IgaW5kZXhpbmcgaXNzdWVzIGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYgd291bGQgYmUgaW1tZWRpYXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoYXQmIzM5O3MgYSBzdHJvbmcgbGF5ZXIgb2YgcHJvdGVjdGlvbi4KCjMuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgaGVyZSDigJMgYHNsb3RfaWRgLCBgcG8tJmd0O3J4X3Jpbmcucnhfb3duZXJfbWFwYCwgYW5kIGBwby0mZ3Q7dHBfdmVyc2lvbmAg4oCTIGFyZSBhbGwgaW5pdGlhbGl6ZWQuIGBzbG90X2lkYCBpcyBkZXJpdmVkIGZyb20gYHBvLSZndDtyeF9yaW5nLmhlYWRgIHdoaWNoIGlzIGluaXRpYWxpemVkLiBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQgemVyb2VkIHdpdGggYGJpdG1hcF9hbGxvYyhfX0dGUF9aRVJPKWAuIFRoZSBwYXRjaCBpdHNlbGYgaXNuJiMzOTt0IGNyZWF0aW5nIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCYjMzk7cyBmaXhpbmcgYSBzdGF0ZSBjbGVhbnVwLiBGdXJ0aGVybW9yZSwgaW4gdGhlIGVycm9yIHBhdGgsIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIOKAkyB3ZSBhcmUgc2ltcGx5IGp1bXBpbmcgdG8gYGRyb3Bfbl9hY2NvdW50YCwgd2hpY2ggZG9lcyBub3QgdHJhbnNtaXQgaW5mb3JtYXRpb24gYmFjayB0byB0aGUgdXNlci4KCjQuICAqKktNU0FOIHZzIEtBU0FOOioqIFRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBmaW5kIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEdpdmVuIHRoYXQgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciB0aGF0IHRoZSB2YXJpYWJsZXMgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgZG9pbmcgYW55dGhpbmcgbW9yZSBjb21wbGV4IHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCB3b3VsZCByZXF1aXJlIG1vcmUgY2FyZWZ1bCBpbnNwZWN0aW9uIHRoYW4gS0FTQU4gcHJvdmlkZXMuCgpUaGVyZWZvcmUsIGFmdGVyIGFuYWx5emluZyB0aGlzLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgcGF0Y2ggaXMgcmVsYXRpdmVseSBzaW1wbGUsIGFuZCB0aGUgcG90ZW50aWFsIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgYXJlIHZlcnkgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgY2hlY2tzLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvci1oYW5kbGluZyBwYXRoIGluIGB0cGFja2V0X3JjdigpYCB3aGVyZSBmYWlsdXJlIGluIGB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYigpYCBjbGVhbmVkIHVwIGJsb2NrIHN0YXRlIG9ubHkgZm9yIGBUUEFDS0VUX1YzYCwgb21pdHRpbmcgYF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgKGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGp1bXBzIHRvIGBkcm9wX25fYWNjb3VudGApLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHNsb3RfaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGV4cGxpY2l0bHkgYXNzaWduZWQgYHBvLVx1MDAzZXJ4X3JpbmcuaGVhZGAsIGFuZCBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQgemVyby1pbml0aWFsaXplZCB2aWEgYGJpdG1hcF9hbGxvY2ApLlxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBhbHJlYWR5IGNvdmVyIGFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBiaXRtYXAgYm91bmRzIG9yIHBvaW50ZXIgdmFsaWRpdHkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApYCBmb3IgYFRQQUNLRVRfVjFgIGFuZCBgVFBBQ0tFVF9WMmAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSAoaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQganVtcHMgdG8gYGRyb3Bfbl9hY2NvdW50YCksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIChgc2xvdF9pZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgZXhwbGljaXRseSBhc3NpZ25lZCBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIGByeF9vd25lcl9tYXBgIGlzIGFsbG9jYXRlZCB6ZXJvLWluaXRpYWxpemVkIHZpYSBgYml0bWFwX2FsbG9jYCkuXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzoxNS41ODU4MDEwMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEzOTYxMjUwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHBhY2tldF9yY3ZcIixcbiAgICBcInBhY2tldF9zZXRfcmluZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBgdHBhY2tldF9yY3YoKWAgd2hlcmUgZmFpbHVyZSBpbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKWAgY2xlYW5lZCB1cCBibG9jayBzdGF0ZSBvbmx5IGZvciBgVFBBQ0tFVF9WM2AsIG9taXR0aW5nIGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApYCBmb3IgYFRQQUNLRVRfVjFgIGFuZCBgVFBBQ0tFVF9WMmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSAoaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQganVtcHMgdG8gYGRyb3Bfbl9hY2NvdW50YCksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIChgc2xvdF9pZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgZXhwbGljaXRseSBhc3NpZ25lZCBgcG8tXFx1MDAzZXJ4X3JpbmcuaGVhZGAsIGFuZCBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQgemVyby1pbml0aWFsaXplZCB2aWEgYGJpdG1hcF9hbGxvY2ApLlxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYWxyZWFkeSBjb3ZlciBhbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggYml0bWFwIGJvdW5kcyBvciBwb2ludGVyIHZhbGlkaXR5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0cGFja2V0X3JjdigpIGluIG5ldC9wYWNrZXQvYWZfcGFja2V0LmMsIGVuc3VyaW5nIHRoYXQgdGhlIHNsb3QgaW4gcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwIGlzIGNsZWFyZWQgd2hlbiB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYigpIGZhaWxzIGZvciBUUEFDS0VUX1YxL1YyIHJpbmdzLiBUaGlzIGNvZGUgaXMgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzIGNvbmZpZ3VyZWQgd2l0aCBQQUNLRVRfUlhfUklORyBhbmQgUEFDS0VUX1ZORVRfSERSLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhhdCBzbG90IG93bmVyc2hpcCB0cmFja2luZywgcmluZyBtYW5hZ2VtZW50LCBhbmQgcGFja2V0IGRyb3AgYWNjb3VudGluZyBiZWhhdmUgY29ycmVjdGx5IHVuZGVyIG1hbGZvcm1lZCBwYWNrZXQgYW5kIGVycm9yIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjE1LjU4NTgwNTgxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MjY2MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODkwYzU0MWEyNDI2N2ViMjQxYzI5NjdiNDU1ZWQzYTAyMmUwNDEwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbmluZGV4IDc2YmRlNzkwNmQ0OTQuLjUwY2FlMzJhZTI2OTIgMTAwNjQ0XFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG5AQCAtMjM4NCw3ICsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyArIG1hY29mZiAtXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcXG4gXFx0XFx0XFx0XFx0ICAgIHZpb19sZSgpLCB0cnVlLCAwKSkge1xcbi1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMylcXG4rXFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpXFxuK1xcdFxcdFxcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxuK1xcdFxcdGVsc2VcXG4gXFx0XFx0XFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpO1xcbiBcXHRcXHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjE2LjAyNDY2MzEwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc3MjkwNjYzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHBhY2tldF9yY3ZcIixcbiAgICBcInBhY2tldF9zZXRfcmluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OTBjNTQxYTI0MjY3ZWIyNDFjMjk2N2I0NTVlZDNhMDIyZTA0MTA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuaW5kZXggNzZiZGU3OTA2ZDQ5NC4uNTBjYWUzMmFlMjY5MiAxMDA2NDRcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbkBAIC0yMzg0LDcgKzIzODQsOSBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyArIG1hY29mZiAtXG4gXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciksXG4gXHRcdFx0XHQgICAgdmlvX2xlKCksIHRydWUsIDApKSB7XG4tXHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uID09IFRQQUNLRVRfVjMpXG4rXHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbitcdFx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG4rXHRcdGVsc2VcbiBcdFx0XHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpO1xuIFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6MTYuMDI0NjY0OTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk5NTc4NDI1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBiZWluZyBjaGFuZ2VkLiBTbywgbXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0LiBJJ20gZ29pbmcgdG8gZmlyZSB1cCBgZ2l0IGRpZmZgIG9yLCBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50LCBtYXliZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhcm91bmQgbGluZSAyMzg0IG9mIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gQ29udGV4dCBpcyAqZXZlcnl0aGluZyogd2hlbiB5b3UncmUgcmV2aWV3aW5nIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgbmV0d29ya2luZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW1tZWRpYXRlbHkgYXJvdW5kIHRoZSBjaGFuZ2UgdG8gZnVsbHkgZ3JvayB0aGUgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgbG9naWMgZmxvdywgYW5kIHRoZSBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMuIEkgY2FuJ3QganVzdCBsb29rIGF0IHRoZSBsaW5lIGFuZCBzYXkgXCJ0aGF0IGxvb2tzIGdvb2RcIiDigJMgSSBoYXZlIHRvICp1bmRlcnN0YW5kKiBpdC4gTGV0J3Mgc2VlIHdoYXQgd2UgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6MzUuOTgyNTA5ODkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM3MDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbjIzNzE6XFx0XFx0aC5yYXcgPSBwYWNrZXRfY3VycmVudF9yeF9mcmFtZShwbywgc2tiLFxcbjIzNzI6XFx0XFx0XFx0XFx0XFx0XFx0VFBfU1RBVFVTX0tFUk5FTCwgKG1hY29mZitzbmFwbGVuKSk7XFxuMjM3MzpcXHRcXHRpZiAoIWgucmF3KVxcbjIzNzQ6XFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG4yMzc1OlxcdFxcbjIzNzY6XFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpIHtcXG4yMzc3OlxcdFxcdFxcdHNsb3RfaWQgPSBwby1cXHUwMDNlcnhfcmluZy5oZWFkO1xcbjIzNzg6XFx0XFx0XFx0aWYgKHRlc3RfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCkpXFxuMjM3OTpcXHRcXHRcXHRcXHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xcbjIzODA6XFx0XFx0XFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxuMjM4MTpcXHRcXHR9XFxuMjM4MjpcXHRcXG4yMzgzOlxcdFxcdGlmICh2bmV0X2hkcl9zeiBcXHUwMDI2XFx1MDAyNlxcbjIzODQ6XFx0XFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgKyBtYWNvZmYgLVxcbjIzODU6XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpLFxcbjIzODY6XFx0XFx0XFx0XFx0XFx0ICAgIHZpb19sZSgpLCB0cnVlLCAwKSkge1xcbjIzODc6XFx0XFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpXFxuMjM4ODpcXHRcXHRcXHRcXHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbjIzODk6XFx0XFx0XFx0ZWxzZVxcbjIzOTA6XFx0XFx0XFx0XFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpO1xcbjIzOTE6XFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG4yMzkyOlxcdFxcdH1cXG4yMzkzOlxcdFxcbjIzOTQ6XFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpIHtcXG4yMzk1OlxcdFxcdFxcdHBhY2tldF9pbmNyZW1lbnRfcnhfaGVhZChwbywgXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKTtcXG4yMzk2OlxcdFxcdC8qXFxuMjM5NzpcXHRcXHQgKiBMT1NJTkcgd2lsbCBiZSByZXBvcnRlZCB0aWxsIHlvdSByZWFkIHRoZSBzdGF0cyxcXG4yMzk4OlxcdFxcdCAqIGJlY2F1c2UgaXQncyBDT1IgLSBDbGVhciBPbiBSZWFkLlxcbjIzOTk6XFx0XFx0ICogQW55d2F5cywgbW92aW5nIGl0IGZvciBWMS9WMiBvbmx5IGFzIFYzIGRvZXNuJ3QgbmVlZCB0aGlzXFxuMjQwMDpcXHRcXHQgKiBhdCBwYWNrZXQgbGV2ZWwuXFxuMjQwMTpcXHRcXHQgKi9cXG4yNDAyOlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2cG8tXFx1MDAzZXRwX2Ryb3BzKSlcXG4yNDAzOlxcdFxcdFxcdFxcdHN0YXR1cyB8PSBUUF9TVEFUVVNfTE9TSU5HO1xcbjI0MDQ6XFx0XFx0fVxcbjI0MDU6XFx0XFxuMjQwNjpcXHRcXHRwby1cXHUwMDNlc3RhdHMuc3RhdHMxLnRwX3BhY2tldHMrKztcXG4yNDA3OlxcdFxcdGlmIChjb3B5X3NrYikge1xcbjI0MDg6XFx0XFx0XFx0c3RhdHVzIHw9IFRQX1NUQVRVU19DT1BZO1xcbjI0MDk6XFx0XFx0XFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoY29weV9za2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzozNS45ODI2NzM1MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MzYzNjE2MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgcGF0Y2gg4oCTIHdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgYW5kIHdoeSB3YXMgdGhpcyBtb2RpZmljYXRpb24gbmVjZXNzYXJ5IGluIHRoZSBmaXJzdCBwbGFjZT8gVG8gZG8gdGhpcywgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcGF0Y2ggY29udGV4dCBpdHNlbGY7IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBjb21taXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFuZ2UuIEtub3dpbmcgdGhlIGhpc3Rvcnkgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIFRoaXMgd2lsbCBoZWxwIHdpdGggYSBtZW50YWwgbW9kZWwgb2YgdGhlIHJlYXNvbmluZy5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZS4gSSBrbm93IHRoZSBjaGFuZ2UgY29uY2VybnMgdGhlIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nIGluIGBhZl9wYWNrZXQuY2AsIHNvIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBnaXQgbG9nYCBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRoZSBsb2cgZm9yIGNoYW5nZXMgcmVsYXRlZCB0byB0aGlzIGFyZWEsIGFuZCBrZXl3b3JkcyBzdWNoIGFzIGByeF9vd25lcl9tYXBgLiBJIGtub3cgdGhpcyBoZWxwcyBrZWVwIHRyYWNrIG9mIHRoZSBvd25lcnNoaXAgb2YgdGhlIHJlY2VpdmluZyBzaWRlLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBwaW5wb2ludCB0aGUgZXhhY3QgY29tbWl0IG9yIGNvbW1pdHMgdGhhdCBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4gVGhpcyB3aWxsIGhvcGVmdWxseSBzaG93IG1lIHRoZSBsb2dpYy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo0NC4zNDYyOTMwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI0OTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeF9vd25lcl9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzc3LVxcdFxcdHNsb3RfaWQgPSBwby1cXHUwMDNlcnhfcmluZy5oZWFkO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM3ODpcXHRcXHRpZiAodGVzdF9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzktXFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODA6XFx0XFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzgxLVxcdH1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4Ny1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODg6XFx0XFx0XFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXFx0XFx0ZWxzZVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTA2LVxcdFxcdF9fcGFja2V0X3NldF9zdGF0dXMocG8sIGgucmF3LCBzdGF0dXMpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUwNzpcXHRcXHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwOC1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ1MTU9c3RhdGljIGludCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCB1bmlvbiB0cGFja2V0X3JlcV91ICpyZXFfdSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDUxOS1cXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ1MjA6XFx0dW5zaWduZWQgbG9uZyAqcnhfb3duZXJfbWFwID0gTlVMTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MjEtXFx0aW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MDYtXFx0XFx0XFx0aWYgKCF0eF9yaW5nKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA3OlxcdFxcdFxcdFxcdHJ4X293bmVyX21hcCA9IGJpdG1hcF9hbGxvYyhyZXEtXFx1MDAzZXRwX2ZyYW1lX25yLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYwOC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA5OlxcdFxcdFxcdFxcdGlmICghcnhfb3duZXJfbWFwKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYxMC1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3BnX3ZlYztcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0NC1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NDU6XFx0XFx0XFx0c3dhcChyYi1cXHUwMDNlcnhfb3duZXJfbWFwLCByeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0Ni1cXHRcXHRyYi1cXHUwMDNlZnJhbWVfbWF4ID0gKHJlcS1cXHUwMDNldHBfZnJhbWVfbnIgLSAxKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY4Mi1cXHRpZiAocGdfdmVjKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjgzOlxcdFxcdGJpdG1hcF9mcmVlKHJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00Njg0LVxcdFxcdGlmICh0eF9yaW5nIFxcdTAwMjZcXHUwMDI2IGNsb3NpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQ0LjM5NDU0NjM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTA3MTkzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQUZfUEFDS0VUIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgdHBhY2tldF9yY3ZgIGZ1bmN0aW9uLCBJIHNlZSBhIHNpZ25pZmljYW50IGNoYW5nZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYmAgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIEFGX1BBQ0tFVC4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhhdCBibG9jayBvZiBjb2RlIHdoZXJlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYHJ4X293bmVyX21hcGAgYW5kIHRoZSBgVFBBQ0tFVGAgdmVyc2lvbnMuXG5cbkluaXRpYWxseSwgaWYgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCBmYWlsZWQgYW5kIHRoZSBwYWNrZXQgdHlwZSB3YXMgYFRQQUNLRVRfVjJgIG9yIGVhcmxpZXIsIGEgYHNsb3RfaWRgIHdhcyBiZWluZyAqc2V0KiBpbiB0aGUgYHJ4X293bmVyX21hcGAsIGJ1dCAqbm90KiBjbGVhcmVkIHVwb24gZHJvcHBpbmcgdGhlIHBhY2tldCAoYGdvdG8gZHJvcF9uX2FjY291bnRgKS4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy4gV2hhdCBoYXBwZW5zIGlzIHRoYXQgYHRlc3RfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgd2lsbCAqYWx3YXlzKiBldmFsdWF0ZSB0byB0cnVlLCB3aGljaCBsZWFkcyB0byB0aGUgcGFja2V0IGJlaW5nIGRyb3BwZWQgYW5kIHRoYXQgc2xvdCBiZWluZyB1bmF2YWlsYWJsZSBmb3IgZnVydGhlciB1c2UsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgZGVuaWFsIG9mIHNlcnZpY2UgaWYgdGhpcyBoYXBwZW5zIHJlcGVhdGVkbHkuIFRoZSBmaXggaXMgYSBzaW1wbGUsIGJ1dCBjcml0aWNhbCwgYml0LWNsZWFyaW5nIG9wZXJhdGlvbjogYF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAuXG5cblRoZSBjb25jZXJuIGlzIGFsd2F5cywgXCJpcyB0aGlzIHJlYWwsIGlzIHRoaXMgZXhwbG9pdGFibGU/XCIuIFRoZSBnb29kIG5ld3MgaXMsIGFic29sdXRlbHkgeWVzISBBRl9QQUNLRVQgc29ja2V0cyBhcmUgaW5jcmVkaWJseSBjb21tb247IHRoZXkgYXJlIGEgc3RhbmRhcmQgc29ja2V0IGZhbWlseSAoQUZfUEFDS0VUKSwgYW5kIHN5emthbGxlciBoZWF2aWx5IGZ1enplZCB0aGlzIGFyZWEuIFVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgY3JlYXRlIEFGX1BBQ0tFVCBzb2NrZXRzIHVzaW5nIGBzb2NrZXQoQUZfUEFDS0VULCBTT0NLX1JBVywgLi4uKWAgb3IgYFNPQ0tfREdSQU1gLCBhbmQgd2UncmUgZGVhbGluZyB3aXRoIFRQQUNLRVQgcmluZyBidWZmZXJzIGFuZCBgUEFDS0VUX1ZORVRfSERSYCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGV2ZW4gd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZSBsaWtlIHZldGggb3IgbG9vcGJhY2suXG5cbk5vdywgSSdsbCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYGFmX3BhY2tldC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGFmZmVjdCB0aGlzIHBhdGgsIGJ1dCB0aGUgZ2VuZXJhbCBhY2Nlc3NpYmlsaXR5IG9mIHRoaXMgY29kZSBpcyBjbGVhci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYW5kIGVhc2lseSByZWFjaGFibGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo0OS4yODUyNjg1NDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NjMyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BBQ0tFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvTWFrZWZpbGUtNS1cXG5uZXQvcGFja2V0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BBQ0tFVCkgKz0gYWZfcGFja2V0Lm9cXG5uZXQvcGFja2V0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BBQ0tFVF9ESUFHKSArPSBhZl9wYWNrZXRfZGlhZy5vXFxubmV0L3BhY2tldC9NYWtlZmlsZS04LWFmX3BhY2tldF9kaWFnLXkgKz0gZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQ5LjMzMTgzODQyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDk5NDM4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFBhY2tldCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJ3MgbmV0d29yayBwYWNrZXQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvcGFja2V0L0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gcGFja2V0IGhhbmRsaW5nIGFyZSBkZWZpbmVkLCBhbmQgaXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHB1dCB0b2dldGhlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkncmUgc3RydWN0dXJlZC4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb25zIGludG8gcGFja2V0IHByb2Nlc3NpbmcgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTEuNTgxNzg1NjI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQYWNrZXQgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUEFDS0VUXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUGFja2V0IHNvY2tldFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZVxcbiAgMTA6XFx0XFx0ICBkaXJlY3RseSB3aXRoIG5ldHdvcmsgZGV2aWNlcyB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIHByb3RvY29sIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwsIGUuZy4gdGNwZHVtcC4gIElmIHlvdSB3YW50IHRoZW1cXG4gIDEyOlxcdFxcdCAgdG8gd29yaywgY2hvb3NlIFkuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAxNTpcXHRcXHQgIGJlIGNhbGxlZCBhZl9wYWNrZXQuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIFBBQ0tFVF9ESUFHXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBQQUNLRVRcXG4gIDIyOlxcdFxcdGRlZmF1bHQgblxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9QQUNLRVQgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxcbiAgMjU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1MS41ODE4NTU0OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Nzg1NDc4NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBQYWNrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfUEFDS0VUYCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gb2YgaW50ZXJlc3QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlLCBvciBiZSBpbmZsdWVuY2VkIGJ5LCBgQ09ORklHX1BBQ0tFVGAuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIExldCdzIHNlZS4uLiB0aGUgdGV4dCBpbmRpY2F0ZXMgYG5ldC9wYWNrZXQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ2xsIGNoZWNrIHRoYXQgZmlsZSBmb3IgaW5jbHVkZXMgYW5kIHJlZmVyZW5jZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdCBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1OS40MzY2NDIzMDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc2NTE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L3BhY2tldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTgyPW1lbnUgXFxcIk5ldHdvcmtpbmcgb3B0aW9uc1xcXCJcXG5uZXQvS2NvbmZpZy04My1cXG5uZXQvS2NvbmZpZzo4NDpzb3VyY2UgXFxcIm5ldC9wYWNrZXQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy04NS1zb3VyY2UgXFxcIm5ldC9wc3AvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDEuMTQ0Mjk5NTEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQ0ODIwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGFja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX1BBQ0tFVGAuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGxpdmVzIHVuZGVyIFwiTmV0d29ya2luZyBvcHRpb25zXCIgYW5kIG9ubHkgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgYmFzaWNhbGx5IHRoZSBiYXNlbGluZSBmb3IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBUaGF0IG1lYW5zIGVuYWJsaW5nIGBQQUNLRVRgIGlzIHRoZSBrZXkuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjaGFuZ2VkIHdoZW4gYENPTkZJR19QQUNLRVRgIHdhcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmxhZywgYW5kIG15IHRvb2wgb2YgY2hvaWNlIGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgLlxuXG5Pa2F5LCB0aGUgdG9vbCBwb2ludHMgbWUgdG8gYHRwYWNrZXRfcmN2YCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgdHBhY2tldF9yY3ZgIGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIElmIGl0J3Mgc3RhdGljLCB0aGUgc2NvcGUgbWlnaHQgYmUgbGltaXRlZCwgYW5kIHRoaXMgY291bGQgaW5kaWNhdGUgYSBzcGVjaWZpYyBhcmVhIG9mIGNvbmNlcm4gb3IgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIGBQQUNLRVRgIGZlYXR1cmUuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHRwYWNrZXRfcmN2YCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyBob3cgaXQncyBpbnZva2VkIHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0IGFuZCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZlYXR1cmUgb24gdGhlIG92ZXJhbGwga2VybmVsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDMuNDk4NzgzNTU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYwMDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cGFja2V0X3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkyPXN0cnVjdCBwYWNrZXRfc29jaztcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzpzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTQtXFx0XFx0ICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTY4Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcHJiX3JldGlyZV9yeF9ibGtfdGltZXJfZXhwaXJlZChzdHJ1Y3QgaHJ0aW1lciAqdClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNjk2LVxcdC8qIFdlIG9ubHkgbmVlZCB0byBwbHVnIHRoZSByYWNlIHdoZW4gdGhlIGJsb2NrIGlzIHBhcnRpYWxseSBmaWxsZWQuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo2OTc6XFx0ICogdHBhY2tldF9yY3Y6XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy02OTgtXFx0ICpcXHRcXHRsb2NrKCk7IGluY3JlbWVudCBCTE9DS19OVU1fUEtUUzsgdW5sb2NrKClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9ODIzPXN0YXRpYyB2b2lkIHByYl90aGF3X3F1ZXVlKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy04MjgtLypcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjgyOTogKiBwcmJfb3Blbl9ibG9jayBpcyBjYWxsZWQgYnkgdHBhY2tldF9yY3Ygb3IgdGltZXIgY2FsbGJhY2suXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy04MzAtICpcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODM1LSAqXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4MzY6ICogT25lIHNpZGUgZWZmZWN0IG9mIE5PVCB1cGRhdGUgaHJ0aW1lciB3aGVuIGNhbGxlZCBieSB0cGFja2V0X3JjdiBpcyB0aGF0XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4Mzc6ICogYSBuZXdseSBvcGVuZWQgYmxvY2sgdHJpZ2dlcmVkIGJ5IHRwYWNrZXRfcmN2IG1heSBiZSByZXRpcmVkIGVhcmxpZXIgdGhhblxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODM4LSAqIGV4cGVjdGVkLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGltZW91dCBpcyB1cGRhdGVkIGluIHByYl9vcGVuX2Jsb2NrLCB0aGVcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9ODQyPXN0YXRpYyB2b2lkIHByYl9vcGVuX2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjMSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODgzLSAqIDQpIHVzZXItc3BhY2UgaXMgZWl0aGVyIHNsZWVwaW5nIG9yIHByb2Nlc3NpbmcgYmxvY2sgJzAnLlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6ODg0OiAqIDUpIHRwYWNrZXRfcmN2IGlzIGN1cnJlbnRseSBmaWxsaW5nIGJsb2NrICc3Jywgc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTg4NS0gKiAgICBpdCB3aWxsIGNsb3NlIGJsb2NrLTcsbG9vcCBhcm91bmQgYW5kIHRyeSB0byBmaWxsIGJsb2NrICcwJy5cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9OTQxPXN0YXRpYyB2b2lkIHByYl9yZXRpcmVfY3VycmVudF9ibG9jayhzdHJ1Y3QgdHBhY2tldF9rYmRxX2NvcmUgKnBrYyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTQ5LVxcdFxcdCAqIFBsdWcgdGhlIGNhc2Ugd2hlcmUgY29weV9iaXRzKCkgaXMgaW4gcHJvZ3Jlc3Mgb25cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjk1MDpcXHRcXHQgKiBjcHUtMCBhbmQgdHBhY2tldF9yY3YoKSBnb3QgaW52b2tlZCBvbiBjcHUtMSwgZGlkbid0XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NTEtXFx0XFx0ICogaGF2ZSBzcGFjZSB0byBjb3B5IHRoZSBwa3QgaW4gdGhlIGN1cnJlbnQgYmxvY2sgYW5kXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTEyNzE9c3RhdGljIGludCBfX3BhY2tldF9yY3ZfaGFzX3Jvb20oY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTI3Ni1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjEyNzc6XFx0aWYgKHBvLVxcdTAwM2Vwcm90X2hvb2suZnVuYyAhPSB0cGFja2V0X3Jjdikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTI3OC1cXHRcXHRpbnQgcmN2YnVmID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjQ4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjI0OTpzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjUwLVxcdFxcdCAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjAtXFx0XFx0bnZhbCA9IEdFVF9QQkRRQ19GUk9NX1JCKFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyktXFx1MDAzZW1heF9mcmFtZV9sZW4gLSBtYWNvZmY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzYxOlxcdFxcdHByX2Vycl9vbmNlKFxcXCJ0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxcXG5cXFwiLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM2Mi1cXHRcXHRcXHQgICAgc25hcGxlbiwgbnZhbCwgbWFjb2ZmKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDUxNT1zdGF0aWMgaW50IHBhY2tldF9zZXRfcmluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuaW9uIHRwYWNrZXRfcmVxX3UgKnJlcV91LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ5LVxcdFxcdHBvLVxcdTAwM2Vwcm90X2hvb2suZnVuYyA9IChwby1cXHUwMDNlcnhfcmluZy5wZ192ZWMpID9cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NTA6XFx0XFx0XFx0XFx0XFx0XFx0dHBhY2tldF9yY3YgOiBwYWNrZXRfcmN2O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY1MS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cmJfcXVldWUtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowMy41NDQzODcyNDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzgxMjU2MDgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQYWNrZXQgU29ja2V0IFJYIFJpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gaG93IHRoZSBwYWNrZXQgc29ja2V0IHJlY2VpdmUgcmluZyB3b3Jrcy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYHRwYWNrZXRfcmN2YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIFRoYXQncyB0aGUgb25lIHJlZ2lzdGVyZWQgaW4gYHBvLVx1MDAzZXByb3RfaG9vay5mdW5jYCB3aGVuIHRoZSByZWNlaXZlIHJpbmcgaXMgYWN0aXZlIChgcG8tXHUwMDNlcnhfcmluZy5wZ192ZWMgIT0gTlVMTGApLiBJdCdzIGNhbGxlZCB3aGVuIHBhY2tldHMgYXJlIHJlY2VpdmVkLCBlaXRoZXIgdmlhIGBkZXZfcXVldWVfeG1pdF9uaXRgLCBgZGVsaXZlcl9za2JgLCBvciBgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgYSBzdGF0aWMgYW5kIG5vdCB1c2VkIGV2ZXJ5d2hlcmUuIEJlY2F1c2UgaXQncyBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUgKH4zMDAgbGluZXMpLCBpdCdzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGJlIGlubGluZWQgYW5kIHdpbGwgYmUgYSBkaXN0aW5jdCBzeW1ib2wgaW4gYHZtbGludXhgLlxuXG5JIGtub3cgdGhhdCBgcGFja2V0X3NldF9yaW5nYCBpcyB3aGVyZSB0aGUgcmluZyBpcyBhY3R1YWxseSBzZXQgdXAsIGNvbmZpZ3VyZWQsIGFuZCB3aGVyZSBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcmVsYXRlZCBjb21wb25lbnRzLlxuXG5Ob3csIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHBhY2tldCBzb2NrZXQgY29kZSB0aGF0IHBsYXkgYSBzaWduaWZpY2FudCByb2xlPyBMZXQncyBjaGVjayBgcGFja2V0X3JlY3Ztc2dgIGFuZCBgcGFja2V0X3NldHNvY2tvcHRgLiBJdCBsb29rcyBsaWtlIGluIGBwYWNrZXRfc2V0c29ja29wdGAsIHRoZSBgUEFDS0VUX1JYX1JJTkdgIHNldHNvY2tvcHQgY2FsbHMgYHBhY2tldF9zZXRfcmluZ2AgLSB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZy4gSXQgbG9va3MgbGlrZSBgUEFDS0VUX1ZORVRfSERSYCBlbmFibGVzIGBwby1cdTAwM2VoYXNfdm5ldF9oZHJgLlxuXG5BbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdm5ldF9oZHJfc3pgIGlzIHNldCB3aXRoaW4gYHRwYWNrZXRfcmN2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNy4zNTY5NTEzNDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODIwOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZuZXRfaGRyX3N6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTA5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl92bmV0KHN0cnVjdCBtc2doZHIgKm1zZywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxMTA6XFx0XFx0XFx0ICAgc2l6ZV90ICpsZW4sIGludCB2bmV0X2hkcl9zeilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMTEte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTEzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjExNDpcXHRpZiAoKmxlbiBcXHUwMDNjIHZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjExNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxMTY6XFx0KmxlbiAtPSB2bmV0X2hkcl9zejtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMTctXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMjAtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTIxOlxcdHJldHVybiBtZW1jcHlfdG9fbXNnKG1zZywgKHZvaWQgKilcXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMjItfVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI2Ni1cXHR1bnNpZ25lZCBpbnQgc2xvdF9pZCA9IDA7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjY3OlxcdGludCB2bmV0X2hkcl9zeiA9IDA7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjY4LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzI0LVxcdFxcdFxcdFxcdCAgICAgICBwby1cXHUwMDNldHBfcmVzZXJ2ZTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzMjU6XFx0XFx0dm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXFx1MDAzZXZuZXRfaGRyX3N6KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzMjY6XFx0XFx0aWYgKHZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjMyNzpcXHRcXHRcXHRuZXRvZmYgKz0gdm5ldF9oZHJfc3o7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzI4LVxcdFxcdG1hY29mZiA9IG5ldG9mZiAtIG1hY2xlbjtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM1Mi1cXHRcXHRcXHRcXHRzbmFwbGVuID0gMDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNTM6XFx0XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM1NC1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjYtXFx0XFx0XFx0bWFjb2ZmID0gR0VUX1BCRFFDX0ZST01fUkIoXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKS1cXHUwMDNlbWF4X2ZyYW1lX2xlbjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNjc6XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM2OC1cXHRcXHR9XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzgzOlxcdGlmICh2bmV0X2hkcl9zeiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4NC1cXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyArIG1hY29mZiAtXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1Njk9c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NzA6XFx0XFx0XFx0XFx0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIGludCB2bmV0X2hkcl9zeilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzEte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTczLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NDpcXHRpZiAoKmxlbiBcXHUwMDNjIHZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NzY6XFx0KmxlbiAtPSB2bmV0X2hkcl9zejtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzctXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1ODUtXFx0LyogbW92ZSBpdGVyIHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZiBtYWMgaGVhZGVyICovXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTg2OlxcdGlmICh2bmV0X2hkcl9zeiAhPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODc6XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgdm5ldF9oZHJfc3ogLSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTg4LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzQ1PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU2LVxcdGJvb2wgbmVlZF93YWl0ID0gIShtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzU3OlxcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc1OC1cXHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgxNS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4MTY6XFx0aWYgKChzaXplX21heCBcXHUwMDNlIGRldi1cXHUwMDNlbXR1ICsgcmVzZXJ2ZSArIFZMQU5fSExFTikgXFx1MDAyNlxcdTAwMjYgIXZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgxNy1cXHRcXHRzaXplX21heCA9IGRldi1cXHUwMDNlbXR1ICsgcmVzZXJ2ZSArIFZMQU5fSExFTjtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1MC1cXHRcXHR0bGVuID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUxOlxcdFxcdGlmICh2bmV0X2hkcl9zeikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1MjpcXHRcXHRcXHRkYXRhICs9IHZuZXRfaGRyX3N6O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1MzpcXHRcXHRcXHR0cF9sZW4gLT0gdm5ldF9oZHJfc3o7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODU0LVxcdFxcdFxcdGlmICh0cF9sZW4gXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTctXFx0XFx0XFx0fVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1ODpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1OS1cXHRcXHRcXHRpZiAoX19wYWNrZXRfc25kX3ZuZXRfcGFyc2UoXFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4ODMtXFx0XFx0ICAgIHRwX2xlbiBcXHUwMDNlIGRldi1cXHUwMDNlbXR1ICsgcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg4NDpcXHRcXHQgICAgIXZuZXRfaGRyX3N6IFxcdTAwMjZcXHUwMDI2XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODg1LVxcdFxcdCAgICAhcGFja2V0X2V4dHJhX3ZsYW5fbGVuX2FsbG93ZWQoZGV2LCBza2IpKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTc1PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5ODctXFx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyOTg4OlxcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk4OS1cXHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMzEtXFx0XFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMzI6XFx0aWYgKHZuZXRfaGRyX3N6KSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMDMzOlxcdFxcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFxcdTAwMjZsZW4sIFxcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAzNC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTA0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEwNTpcXHRpZiAodm5ldF9oZHJfc3opIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMDYtXFx0XFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXFx1MDAyNnZuZXRfaGRyLCB2aW9fbGUoKSk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMDgtXFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMDk6XFx0XFx0bGVuICs9IHZuZXRfaGRyX3N6O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExMC1cXHRcXHR2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc2tiLCBcXHUwMDI2dm5ldF9oZHIpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ2PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDUxLVxcdGludCBjb3BpZWQsIGVycjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0NTI6XFx0aW50IHZuZXRfaGRyX2xlbiA9IFJFQURfT05DRShwa3Rfc2soc2spLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDUzLVxcdHVuc2lnbmVkIGludCBvcmlnbGVuID0gMDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzgxNz1wYWNrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MDA0LVxcdFxcdH0gZWxzZSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MDA1OlxcdFxcdFxcdFdSSVRFX09OQ0UocG8tXFx1MDAzZXZuZXRfaGRyX3N6LCBoZHJfbGVuKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQwMDYtXFx0XFx0XFx0cmV0ID0gMDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDA4OT1zdGF0aWMgaW50IHBhY2tldF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQxMzYtXFx0Y2FzZSBQQUNLRVRfVk5FVF9IRFI6XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MTM3OlxcdFxcdHZhbCA9ICEhUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTM4LVxcdFxcdGJyZWFrO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDEzOS1cXHRjYXNlIFBBQ0tFVF9WTkVUX0hEUl9TWjpcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQxNDA6XFx0XFx0dmFsID0gUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTQxLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3BhY2tldC9kaWFnLmM9MTM9c3RhdGljIGludCBwZGlhZ19wdXRfaW5mbyhjb25zdCBzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IpXFxuLS1cXG5uZXQvcGFja2V0L2RpYWcuYy0yOS1cXHRcXHRwaW5mby5wZGlfZmxhZ3MgfD0gUERJX09SSUdERVY7XFxubmV0L3BhY2tldC9kaWFnLmM6MzA6XFx0aWYgKFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opKVxcbm5ldC9wYWNrZXQvZGlhZy5jLTMxLVxcdFxcdHBpbmZvLnBkaV9mbGFncyB8PSBQRElfVk5FVEhEUjtcXG4tLVxcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaD0xMDQ9c3RydWN0IHBhY2tldF9zb2NrIHtcXG4tLVxcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC0xMTUtXFx0aW50XFx0XFx0XFx0aWZpbmRleDtcXHQvKiBib3VuZCBkZXZpY2VcXHRcXHQqL1xcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDoxMTY6XFx0dThcXHRcXHRcXHR2bmV0X2hkcl9zejtcXG5uZXQvcGFja2V0L2ludGVybmFsLmgtMTE3LVxcdF9fYmUxNlxcdFxcdFxcdG51bTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDcuNDAyNzgwNTkxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNzg4NTM4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEFGX1BBQ0tFVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBkaWZmIG9ubHkgdG91Y2hlcyBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AuIFRoYXQncyBhIGdvb2Qgc3RhcnQ7IGl0IGtlZXBzIHRoaW5ncyBmb2N1c2VkLiBUaGUgY29kZSBhZGRzIGBfX2NsZWFyX2JpdGAgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYHRwYWNrZXRfcmN2YCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSB2aXJ0aW8gbmV0IGhlYWRlciBhbmQgdmVyc2lvbnMgYFRQQUNLRVRfVjFgIG9yIGBUUEFDS0VUX1YyYC4gVGhpcyBpbXBsaWVzIGEgZml4IGZvciBzbG90IG93bmVyc2hpcCB0cmFja2luZywgY2xlYXJpbmcgdGhlIGByeF9vd25lcl9tYXBgIGJpdCBpbiBjYXNlIHRoZSBoZWFkZXIgcGFyc2luZyBmYWlscywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQuXG5cbk5vdywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHNldHVwPyBBYnNvbHV0ZWx5LiBgQUZfUEFDS0VUYCBzb2NrZXRzIGFyZSBicmVhZCBhbmQgYnV0dGVyIGZvciBhbnkgTGludXggbmV0d29ya2luZyBleHBlcnQsIGFuZCBlc3BlY2lhbGx5IGZvciBzb21lb25lIGxpa2UgbWUgd2hvIGlzIGludm9sdmVkIGluIGZ1enppbmcuIEkga25vdyBzeXprYWxsZXIgaGl0cyB0aGlzIGNvZGUgcGF0aCBhbGwgdGhlIHRpbWUuIFVzZXJzcGFjZSBjcmVhdGVzIHRoZXNlIHNvY2tldHMsIHNldHMgdXAgdGhlIHJpbmcgYnVmZmVyIHVzaW5nIGBQQUNLRVRfUlhfUklOR2Agd2l0aCBlaXRoZXIgYFRQQUNLRVRfVjFgIG9yIGBUUEFDS0VUX1YyYCwgYW5kIGVuYWJsZXMgYFBBQ0tFVF9WTkVUX0hEUmAuIFRoYXQncyBhbGwgc3RhbmRhcmQuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHBhY2tldF9yY3ZgIGlzIGRpcmVjdGx5IGludm9sdmVkLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkRvZXMgdGhpcyB0b3VjaCBhbnkgY29yZSBzdWJzeXN0ZW1zPyBZdXAsIGl0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBgYWZfcGFja2V0LmNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbC5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0LiBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGZ1bmN0aW9uIGB0cGFja2V0X3JjdmAsIGZvY3VzaW5nIG9uIHJpbmcgYnVmZmVyIGJlaGF2aW9yIGFuZCBtZW1vcnkgbWFuYWdlbWVudCAoYHJ4X293bmVyX21hcGApLiBJIGtub3cgdGhhdCBlcnJvcnMgaW4gcmluZyBidWZmZXIgaGFuZGxpbmcgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IGNvbmN1cnJlbmN5IHByb2JsZW1zIGFuZCBldmVuIG1lbW9yeSBjb3JydXB0aW9uLCBzbyB2ZXJpZnlpbmcgdGhpcyBmaXggaXMgY3J1Y2lhbC4gVGhlIGBGb2N1c1N5bWJvbHNgIG9mIGB0cGFja2V0X3JjdmAgYW5kIGBwYWNrZXRfc2V0X3JpbmdgIGNvbmZpcm0gdGhpcy5cblxuRmluYWxseSwgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBgUEFDS0VUYCBpcyBhbGwgdGhhdCdzIG5lZWRlZC4gSSBqdXN0IGRvdWJsZS1jaGVja2VkIHRoYXQgYFBBQ0tFVGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBgTkVUYCBpcyB1bml2ZXJzYWwuIFNvLCBgUEFDS0VUYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIGVuYWJsaW5nIHdoYXQgd2UgbmVlZC5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGhpZ2gtcHJpb3JpdHkgZnV6emluZyB0YXJnZXQuIFRoZSBmaXggaXMgd2l0aGluIGEgY3J1Y2lhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgaXMgcmVhZGlseSByZWFjaGFibGUsIGFuZCBoYXMgdGhlIHBvdGVudGlhbCB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gc29ja2V0IHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQuIEknbSBjYWxsaW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjA3LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxMy42ODE2MzY4NjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA4OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHBhY2tldF9yY3ZcIixcbiAgICBcInBhY2tldF9zZXRfcmluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cGFja2V0X3JjdlwiLFxuICAgIFwicGFja2V0X3NldF9yaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdHBhY2tldF9yY3YoKSBpbiBuZXQvcGFja2V0L2FmX3BhY2tldC5jLCBlbnN1cmluZyB0aGF0IHRoZSBzbG90IGluIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCBpcyBjbGVhcmVkIHdoZW4gdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKSBmYWlscyBmb3IgVFBBQ0tFVF9WMS9WMiByaW5ncy4gVGhpcyBjb2RlIGlzIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9QQUNLRVQgc29ja2V0cyBjb25maWd1cmVkIHdpdGggUEFDS0VUX1JYX1JJTkcgYW5kIFBBQ0tFVF9WTkVUX0hEUi4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgc2xvdCBvd25lcnNoaXAgdHJhY2tpbmcsIHJpbmcgbWFuYWdlbWVudCwgYW5kIHBhY2tldCBkcm9wIGFjY291bnRpbmcgYmVoYXZlIGNvcnJlY3RseSB1bmRlciBtYWxmb3JtZWQgcGFja2V0IGFuZCBlcnJvciBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxMy43NTM3MzI1NDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjI4MTg0MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTMuNzU0MTQ4MTg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTMyMjc3NjQyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgKGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGp1bXBzIHRvIGBkcm9wX25fYWNjb3VudGApLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHNsb3RfaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGV4cGxpY2l0bHkgYXNzaWduZWQgYHBvLVxcdTAwM2VyeF9yaW5nLmhlYWRgLCBhbmQgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBiaXRtYXBfYWxsb2NgKS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODkwYzU0MWEyNDI2N2ViMjQxYzI5NjdiNDU1ZWQzYTAyMmUwNDEwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbmluZGV4IDc2YmRlNzkwNmQ0OTQuLjUwY2FlMzJhZTI2OTIgMTAwNjQ0XG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG4rKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5AQCAtMjM4NCw3ICsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgKyBtYWNvZmYgLVxuIFx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpLFxuIFx0XHRcdFx0ICAgIHZpb19sZSgpLCB0cnVlLCAwKSkge1xuLVx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiA9PSBUUEFDS0VUX1YzKVxuK1x0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpXG4rXHRcdFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xuK1x0XHRlbHNlXG4gXHRcdFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcdTAwMjZwby1cdTAwM2VyeF9yaW5nKTtcbiBcdFx0Z290byBkcm9wX25fYWNjb3VudDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjEzLjc1NDE0OTIxOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDU0NTc2MjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGEgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBwYXRjaCB0byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgbmVjZXNzaXRhdGVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNvdmVyYWdlLiBUaGlzIGZlZWxzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZGVmZW5zaXZlIGFuYWx5c2lzLCBhIFFBL3Nhbml0aXplciBldmFsdWF0aW9uIHRhc2s7IGl0J3MgYmVuaWduLCBwdXJlbHkgZGVmZW5zaXZlIGluIG5hdHVyZSwgbm8gb2ZmZW5zaXZlIHBheWxvYWRzIG9yIGV4cGxvaXQgYW5hbHlzaXMgYXJlIHJlcXVpcmVkLiBHb29kLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBhbmFseXplIHRoZSBwYXRjaCBpdHNlbGYgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCdzIHNlZS4uLiB0aGUgZGlmZiBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgYFRQQUNLRVRfVjNgIGFuZCB0aGUgY2xlYXJpbmcgb2YgYSBiaXQgd2l0aGluIHRoZSBgcnhfb3duZXJfbWFwYCBvciBhIGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBjYWxsLCBiYXNlZCBvbiB0aGUgYHBvLVx1MDAzZXRwX3ZlcnNpb25gLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGJ1ZyBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBwYWNrZXQgcmVjZXB0aW9uIGluIGRpZmZlcmVudCBUUEFDS0VUIHZlcnNpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggYHZpcnRpb19uZXRfaGRyYC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzODQuIEknbGwgdXNlIG15IHRvb2xzIHRvIHJlYWQgdGhlIGZpbGUgb3IgZ3JlcCBmb3IgdGhlIHJlbGV2YW50IGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3MgdGhlIHBvdGVudGlhbCByaXNrIHN1cmZhY2VzIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyLXN1cHBsaWVkIGRhdGEgdGhhdCBjb3VsZCBsZWFkIHRvIEtNU0FOLWRldGVjdGFibGUgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGByeF9vd25lcl9tYXBgIGlzIGFuZCB3aGF0IGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBkb2VzLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIHdoZXRoZXIgS01TQU4gZnV6emluZyBpcyBsaWtlbHkgdG8gYmUgYmVuZWZpY2lhbC4gSWYgaXQncyBhIGNyaXRpY2FsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHVzZXItc3VwcGxpZWQgZGF0YSwgdGhlIEtNU0FOIHNlc3Npb24gd2lsbCBiZSB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoyNC4yOTk5MTQxNjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2MDpcXHRcXHRcXHRudmFsID0gR0VUX1BCRFFDX0ZST01fUkIoXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKS1cXHUwMDNlbWF4X2ZyYW1lX2xlbiAtIG1hY29mZjtcXG4yMzYxOlxcdFxcdFxcdHByX2Vycl9vbmNlKFxcXCJ0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxcXG5cXFwiLFxcbjIzNjI6XFx0XFx0XFx0XFx0ICAgIHNuYXBsZW4sIG52YWwsIG1hY29mZik7XFxuMjM2MzpcXHRcXHRcXHRzbmFwbGVuID0gbnZhbDtcXG4yMzY0OlxcdFxcdFxcdGlmICh1bmxpa2VseSgoaW50KXNuYXBsZW4gXFx1MDAzYyAwKSkge1xcbjIzNjU6XFx0XFx0XFx0XFx0c25hcGxlbiA9IDA7XFxuMjM2NjpcXHRcXHRcXHRcXHRtYWNvZmYgPSBHRVRfUEJEUUNfRlJPTV9SQihcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpLVxcdTAwM2VtYXhfZnJhbWVfbGVuO1xcbjIzNjc6XFx0XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbjIzNjg6XFx0XFx0XFx0fVxcbjIzNjk6XFx0XFx0fVxcbjIzNzA6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4yMzcxOlxcdFxcdGgucmF3ID0gcGFja2V0X2N1cnJlbnRfcnhfZnJhbWUocG8sIHNrYixcXG4yMzcyOlxcdFxcdFxcdFxcdFxcdFxcdFRQX1NUQVRVU19LRVJORUwsIChtYWNvZmYrc25hcGxlbikpO1xcbjIzNzM6XFx0XFx0aWYgKCFoLnJhdylcXG4yMzc0OlxcdFxcdFxcdGdvdG8gZHJvcF9uX2FjY291bnQ7XFxuMjM3NTpcXHRcXG4yMzc2OlxcdFxcdGlmIChwby1cXHUwMDNldHBfdmVyc2lvbiBcXHUwMDNjPSBUUEFDS0VUX1YyKSB7XFxuMjM3NzpcXHRcXHRcXHRzbG90X2lkID0gcG8tXFx1MDAzZXJ4X3JpbmcuaGVhZDtcXG4yMzc4OlxcdFxcdFxcdGlmICh0ZXN0X2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApKVxcbjIzNzk6XFx0XFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG4yMzgwOlxcdFxcdFxcdF9fc2V0X2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbjIzODE6XFx0XFx0fVxcbjIzODI6XFx0XFxuMjM4MzpcXHRcXHRpZiAodm5ldF9oZHJfc3ogXFx1MDAyNlxcdTAwMjZcXG4yMzg0OlxcdFxcdCAgICB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYihza2IsIGgucmF3ICsgbWFjb2ZmIC1cXG4yMzg1OlxcdFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcXG4yMzg2OlxcdFxcdFxcdFxcdFxcdCAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHtcXG4yMzg3OlxcdFxcdFxcdGlmIChwby1cXHUwMDNldHBfdmVyc2lvbiBcXHUwMDNjPSBUUEFDS0VUX1YyKVxcbjIzODg6XFx0XFx0XFx0XFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcXG4yMzg5OlxcdFxcdFxcdGVsc2VcXG4yMzkwOlxcdFxcdFxcdFxcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKTtcXG4yMzkxOlxcdFxcdFxcdGdvdG8gZHJvcF9uX2FjY291bnQ7XFxuMjM5MjpcXHRcXHR9XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdGlmIChwby1cXHUwMDNldHBfdmVyc2lvbiBcXHUwMDNjPSBUUEFDS0VUX1YyKSB7XFxuMjM5NTpcXHRcXHRcXHRwYWNrZXRfaW5jcmVtZW50X3J4X2hlYWQocG8sIFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyk7XFxuMjM5NjpcXHRcXHQvKlxcbjIzOTc6XFx0XFx0ICogTE9TSU5HIHdpbGwgYmUgcmVwb3J0ZWQgdGlsbCB5b3UgcmVhZCB0aGUgc3RhdHMsXFxuMjM5ODpcXHRcXHQgKiBiZWNhdXNlIGl0J3MgQ09SIC0gQ2xlYXIgT24gUmVhZC5cXG4yMzk5OlxcdFxcdCAqIEFueXdheXMsIG1vdmluZyBpdCBmb3IgVjEvVjIgb25seSBhcyBWMyBkb2Vzbid0IG5lZWQgdGhpc1xcbjI0MDA6XFx0XFx0ICogYXQgcGFja2V0IGxldmVsLlxcbjI0MDE6XFx0XFx0ICovXFxuMjQwMjpcXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnBvLVxcdTAwM2V0cF9kcm9wcykpXFxuMjQwMzpcXHRcXHRcXHRcXHRzdGF0dXMgfD0gVFBfU1RBVFVTX0xPU0lORztcXG4yNDA0OlxcdFxcdH1cXG4yNDA1OlxcdFxcbjI0MDY6XFx0XFx0cG8tXFx1MDAzZXN0YXRzLnN0YXRzMS50cF9wYWNrZXRzKys7XFxuMjQwNzpcXHRcXHRpZiAoY29weV9za2IpIHtcXG4yNDA4OlxcdFxcdFxcdHN0YXR1cyB8PSBUUF9TVEFUVVNfQ09QWTtcXG4yNDA5OlxcdFxcdFxcdHNrYl9jbGVhcl9kZWxpdmVyeV90aW1lKGNvcHlfc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MjQuMzAwMjQ3NDQzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4Njg0MTUwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFNvdXJjZSBNYXRlcmlhbCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gQmVmb3JlIEkgZXZlbiBhdHRlbXB0IHRvIHN1bW1hcml6ZSBvciB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gc3BlY2lmaWMgc2VjdGlvbnMgb2YgdGhpcyB0ZXh0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSB0ZXh0IHRoYXQgb2NjdXJzICpiZWZvcmUqIGxpbmUgMjM2MCBhbmQgKmFmdGVyKiBsaW5lIDI0MDkuIEJ5IGZvY3VzaW5nIG9uIHRoZXNlIGRlZmluZWQgYm91bmRhcmllcywgSSdtIGhvcGluZyB0byBnYWluIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgbGluZXMgaW4gdGhlIG1pZGRsZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyB3aWxsIHByb3ZpZGUgbWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGZyYW1ld29yayBmb3IgYSBjb21wbGV0ZSBhbmQgaW5mb3JtZWQgYXNzZXNzbWVudCBvZiB0aGUgc3ViamVjdCBtYXR0ZXIuIEl0J3MgYSBjcml0aWNhbCBhbmFseXRpY2FsIHN0ZXAgYmVmb3JlIGRpdmluZyBpbnRvIGEgZGV0YWlsZWQgc3lub3BzaXMsIHJlYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MjYuMTY4NjY2MjI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMzA6XFx0XFx0aWYgKG5ldG9mZiBcXHUwMDNlIFVTSFJUX01BWCkge1xcbjIzMzE6XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2cG8tXFx1MDAzZXRwX2Ryb3BzKTtcXG4yMzMyOlxcdFxcdFxcdGdvdG8gZHJvcF9uX3Jlc3RvcmU7XFxuMjMzMzpcXHRcXHR9XFxuMjMzNDpcXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMikge1xcbjIzMzU6XFx0XFx0XFx0aWYgKG1hY29mZiArIHNuYXBsZW4gXFx1MDAzZSBwby1cXHUwMDNlcnhfcmluZy5mcmFtZV9zaXplKSB7XFxuMjMzNjpcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBvLVxcdTAwM2Vjb3B5X3RocmVzaCkgXFx1MDAyNlxcdTAwMjZcXG4yMzM3OlxcdFxcdFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2Mgc2stXFx1MDAzZXNrX3JjdmJ1Zikge1xcbjIzMzg6XFx0XFx0XFx0XFx0XFx0aWYgKHNrYl9zaGFyZWQoc2tiKSkge1xcbjIzMzk6XFx0XFx0XFx0XFx0XFx0XFx0Y29weV9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4yMzQwOlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0MTpcXHRcXHRcXHRcXHRcXHRcXHRjb3B5X3NrYiA9IHNrYl9nZXQoc2tiKTtcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdFxcdHNrYl9oZWFkID0gc2tiLVxcdTAwM2VkYXRhO1xcbjIzNDM6XFx0XFx0XFx0XFx0XFx0fVxcbjIzNDQ6XFx0XFx0XFx0XFx0XFx0aWYgKGNvcHlfc2tiKSB7XFxuMjM0NTpcXHRcXHRcXHRcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNlBBQ0tFVF9TS0JfQ0IoY29weV9za2IpLVxcdTAwM2VzYS5sbCwgMCxcXG4yMzQ2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoUEFDS0VUX1NLQl9DQihjb3B5X3NrYiktXFx1MDAzZXNhLmxsKSk7XFxuMjM0NzpcXHRcXHRcXHRcXHRcXHRcXHRza2Jfc2V0X293bmVyX3IoY29weV9za2IsIHNrKTtcXG4yMzQ4OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzQ5OlxcdFxcdFxcdFxcdH1cXG4yMzUwOlxcdFxcdFxcdFxcdHNuYXBsZW4gPSBwby1cXHUwMDNlcnhfcmluZy5mcmFtZV9zaXplIC0gbWFjb2ZmO1xcbjIzNTE6XFx0XFx0XFx0XFx0aWYgKChpbnQpc25hcGxlbiBcXHUwMDNjIDApIHtcXG4yMzUyOlxcdFxcdFxcdFxcdFxcdHNuYXBsZW4gPSAwO1xcbjIzNTM6XFx0XFx0XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbjIzNTQ6XFx0XFx0XFx0XFx0fVxcbjIzNTU6XFx0XFx0XFx0fVxcbjIzNTY6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShtYWNvZmYgKyBzbmFwbGVuIFxcdTAwM2VcXG4yMzU3OlxcdFxcdFxcdFxcdCAgICBHRVRfUEJEUUNfRlJPTV9SQihcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpLVxcdTAwM2VtYXhfZnJhbWVfbGVuKSkge1xcbjIzNTg6XFx0XFx0XFx0dTMyIG52YWw7XFxuMjM1OTpcXHRcXG4yMzYwOlxcdFxcdFxcdG52YWwgPSBHRVRfUEJEUUNfRlJPTV9SQihcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpLVxcdTAwM2VtYXhfZnJhbWVfbGVuIC0gbWFjb2ZmO1xcbjIzNjE6XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcInRwYWNrZXRfcmN2OiBwYWNrZXQgdG9vIGJpZywgY2xhbXBlZCBmcm9tICV1IHRvICV1LiBtYWNvZmY9JXVcXFxcblxcXCIsXFxuMjM2MjpcXHRcXHRcXHRcXHQgICAgc25hcGxlbiwgbnZhbCwgbWFjb2ZmKTtcXG4yMzYzOlxcdFxcdFxcdHNuYXBsZW4gPSBudmFsO1xcbjIzNjQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KChpbnQpc25hcGxlbiBcXHUwMDNjIDApKSB7XFxuMjM2NTpcXHRcXHRcXHRcXHRzbmFwbGVuID0gMDtcXG4yMzY2OlxcdFxcdFxcdFxcdG1hY29mZiA9IEdFVF9QQkRRQ19GUk9NX1JCKFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyktXFx1MDAzZW1heF9mcmFtZV9sZW47XFxuMjM2NzpcXHRcXHRcXHRcXHR2bmV0X2hkcl9zeiA9IDA7XFxuMjM2ODpcXHRcXHRcXHR9XFxuMjM2OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjI2LjE2ODkzMDA1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDYyODg2OTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBSZWNlaXZlIElzc3VlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgdHBhY2tldF9yY3ZgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjM3Ni4gSSBzZWUgYSBjb25kaXRpb25hbCBibG9jayBoZXJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcsIGhhbmRsaW5nIGBUUEFDS0VUX1YyYCBhbmQgZWFybGllciB2ZXJzaW9ucy4gVGhlIGluaXRpYWwgY2hlY2sgaW52b2x2ZXMgYHBvLVx1MDAzZXJ4X3JpbmcuaGVhZGAgYW5kIGByeF9vd25lcl9tYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzbG90IGlzbid0IGFscmVhZHkgY2xhaW1lZC4gSWYgaXQgaXMsIGBkcm9wX25fYWNjb3VudGAgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LiBJZiBub3QsIHRoZSBiaXQgcmVwcmVzZW50aW5nIG93bmVyc2hpcCBpcyBzZXQuXG5cblRoZW4sIHRoZXJlJ3MgYSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgLiBUaGlzIGxpa2VseSBoYW5kbGVzIHRoZSBWaXJ0SU8gbmV0d29yayBoZWFkZXIgYW5kIGl0cyBleHRyYWN0aW9uIGZyb20gdGhlIFNLQi4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgYSBjb25kaXRpb246IGlmIHRoaXMgaGVhZGVyIGV4dHJhY3Rpb24gZmFpbHMsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIG93bmVyc2hpcCBiaXQgaW4gb2xkZXIgdmVyc2lvbnMgKGBUUEFDS0VUX1YyYCBvciBlYXJsaWVyKSwgb3IgYHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXNgIGZvciBuZXdlciB2ZXJzaW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgd2UgY2FuJ3QgcHJvcGVybHkgcHJvY2VzcyB0aGUgaGVhZGVyLCB3ZSBjYW4ndCB1c2UgdGhpcyByaW5nIGJ1ZmZlciwgYW5kIG11c3QgcmVsZWFzZSBpdC4gVGhlIGNvZGUgdGhlbiBjYWxscyBgZHJvcF9uX2FjY291bnRgLlxuXG5Ob3csIGxldCBtZSBnbyBiYWNrIGEgbW9tZW50IGFuZCBsb29rIGF0IHRoZSBcImJlZm9yZVwiIHZlcnNpb24gb2YgdGhlIGNvZGUsIHdoaWNoIHNlZW1zIHRvIGltcGx5IHRoaXMgYmxvY2sgd2FzIGFkZGVkLiBQcmV2aW91c2x5LCB0aGUgbG9naWMgd2l0aGluIHRoZSBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGJsb2NrIHdhcyBvbmx5IGRpZmZlcmVudCBmb3IgYFRQQUNLRVRfVjNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyB0aGF0IHRoaXMgbmV3IGNoYW5nZSBhdHRlbXB0ZWQgdG8gYWRkcmVzcy4gSSdtIGdvaW5nIHRvIGxvb2sgaW50byB0aGUgZ2l0IGhpc3Rvcnkgb2YgdGhpcyBjb21taXQsIG9yIGJldHRlciB5ZXQsIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGByeF9vd25lcl9tYXBgIGluIHRoZSBnaXQgbG9nIHRvIGdldCB0aGUgZnVsbCBzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgYW5kIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGl0IGFpbWVkIHRvIHJlc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDozNi43OTc4MDM5MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjY5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X293bmVyX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzc3LVxcdFxcdHNsb3RfaWQgPSBwby1cXHUwMDNlcnhfcmluZy5oZWFkO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM3ODpcXHRcXHRpZiAodGVzdF9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzktXFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODA6XFx0XFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzgxLVxcdH1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4Ny1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODg6XFx0XFx0XFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXFx0XFx0ZWxzZVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTA2LVxcdFxcdF9fcGFja2V0X3NldF9zdGF0dXMocG8sIGgucmF3LCBzdGF0dXMpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUwNzpcXHRcXHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwOC1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ1MTU9c3RhdGljIGludCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCB1bmlvbiB0cGFja2V0X3JlcV91ICpyZXFfdSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDUxOS1cXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ1MjA6XFx0dW5zaWduZWQgbG9uZyAqcnhfb3duZXJfbWFwID0gTlVMTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MjEtXFx0aW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MDYtXFx0XFx0XFx0aWYgKCF0eF9yaW5nKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA3OlxcdFxcdFxcdFxcdHJ4X293bmVyX21hcCA9IGJpdG1hcF9hbGxvYyhyZXEtXFx1MDAzZXRwX2ZyYW1lX25yLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYwOC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA5OlxcdFxcdFxcdFxcdGlmICghcnhfb3duZXJfbWFwKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYxMC1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3BnX3ZlYztcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0NC1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NDU6XFx0XFx0XFx0c3dhcChyYi1cXHUwMDNlcnhfb3duZXJfbWFwLCByeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0Ni1cXHRcXHRyYi1cXHUwMDNlZnJhbWVfbWF4ID0gKHJlcS1cXHUwMDNldHBfZnJhbWVfbnIgLSAxKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY4Mi1cXHRpZiAocGdfdmVjKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjgzOlxcdFxcdGJpdG1hcF9mcmVlKHJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00Njg0LVxcdFxcdGlmICh0eF9yaW5nIFxcdTAwMjZcXHUwMDI2IGNsb3NpbmcpXFxuLS1cXG5uZXQvcGFja2V0L2ludGVybmFsLmg9NTQ9c3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciB7XFxuLS1cXG5uZXQvcGFja2V0L2ludGVybmFsLmgtNjgtXFx0dW5pb24ge1xcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDo2OTpcXHRcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0KnJ4X293bmVyX21hcDtcXG5uZXQvcGFja2V0L2ludGVybmFsLmgtNzAtXFx0XFx0c3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlXFx0cHJiX2JkcWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjM2Ljg0MzQ3OTM2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTIzODkyNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBUUEFDS0VUIHYxL3YyIFBhY2tldCBSaW5nIEJ1ZmZlciBMZWFrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgbmV0L3BhY2tldC9pbnRlcm5hbC5oYCBhbmQgc3BlY2lmaWNhbGx5IHRoaXMgYHBhY2tldF9yaW5nX2J1ZmZlcmAgc3RydWN0LiBUaGUgdW5pb24gdXNpbmcgZWl0aGVyIGByeF9vd25lcl9tYXBgIG9yIGBwcmJfYmRxY2AgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUg4oCTIGNsYXNzaWMgdmVyc2lvbmluZyB0cmlja2VyeS4gYHJ4X293bmVyX21hcGAgaXMgZm9yIFRQQUNLRVRfVjEgYW5kIFRQQUNLRVRfVjIsIHdoaWxlIGBwcmJfYmRxY2AgaXMgZm9yIFYzLiBHb3QgaXQuXG5cbk5vdywgbXkgY29uY2VybiBpcyB0aGlzIGByeF9vd25lcl9tYXBgIHVzYWdlLiBUaGUgY29kZSdzIHNldHRpbmcgdGhlIGBzbG90X2lkYCBiaXQgaW4gYHJ4X293bmVyX21hcGAgaWYgdGhlIHBhY2tldCB2ZXJzaW9uIGlzIFYxIG9yIFYyLiBGaW5lLCBzbyBmYXIgc28gZ29vZCwgbGluZSAyMzgwLiBUaGUgcHJvYmxlbSBhcmlzZXMgaWYgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCAqZmFpbHMqLiBJbiB0aGF0IGNhc2UsIGxvb2shIE9yaWdpbmFsbHksIGZvciBWMSBhbmQgVjIsIHRoZSBjb2RlICpuZXZlciogY2xlYXJlZCB0aGUgYml0ISBUaGUgYF9fc2V0X2JpdGAgd2FzIGNhbGxlZCwgYnV0IGlmIHRoZSBoZWFkZXIgcGFyc2luZyBmYWlsZWQsIHRoZSBiaXQgc3RheWVkIHNldC5cblxuVGhhdCdzIGEgcG90ZW50aWFsIGxlYWssIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbi4gVGhlIHNsb3Qgc3RheXMgbWFya2VkIGFzIG93bmVkIGZvcmV2ZXIsIG1lYW5pbmcgZWl0aGVyIHRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIGNvbnRpbnVvdXNseSwgb3IgYSBzdGFsZSBzbG90IG93bmVyc2hpcCBzdGF0ZSBjb3VsZCBiZSB0cmlnZ2VyZWQuXG5cblNvLCB0aGlzIHBhdGNoLi4uIGFoLCBJIHNlZS4gSXQncyBjbGV2ZXJseSBhZGRyZXNzaW5nIHRoZSBpc3N1ZS4gVGhlIGRpZmYgc2hvd3MgdGhhdCBub3csIGlmIHRoZSB2ZXJzaW9uIGlzIFYxIG9yIFYyLCB0aGUgY29kZSAqZG9lcyogY2xlYXIgdGhlIGJpdCB3aXRoIGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcClgIGlmIHRoZSB2ZXJzaW9uIGlzIFYxIG9yIFYyIGJlZm9yZSBnb2luZyB0byBgZHJvcF9uX2FjY291bnRgLiBPdGhlcndpc2UsIGl0IHVzZXMgYHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZylgLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYml0IGlzIGFsd2F5cyBjbGVhcmVkIG9uIGVycm9yLCBwcmV2ZW50aW5nIHRoZSBvd25lcnNoaXAgbGVhay5cblxuVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIGNoZWNrIHRoZSBgc2xvdF9pZGAgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIGluIGB0cGFja2V0X3JjdmAgc3RhcnRpbmcgZnJvbSBsaW5lcyAyMjQ5IHRvIDIzODUgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIG5lZWRzIHRvIGJlIGJ1bGxldHByb29mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjYxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjQ2Ljc2NzM3NDUzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjQ1OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxuMjI0NjpcXHRcXHRyZXR1cm4gMDtcXG4yMjQ3OlxcdH1cXG4yMjQ4OlxcdFxcbjIyNDk6XFx0c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjIyNTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG4yMjUxOlxcdHtcXG4yMjUyOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0NPTlNVTUVEO1xcbjIyNTM6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gTlVMTDtcXG4yMjU0OlxcdFxcdHN0cnVjdCBwYWNrZXRfc29jayAqcG87XFxuMjI1NTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDtcXG4yMjU2OlxcdFxcdHVuaW9uIHRwYWNrZXRfdWhkciBoO1xcbjIyNTc6XFx0XFx0dTggKnNrYl9oZWFkID0gc2tiLVxcdTAwM2VkYXRhO1xcbjIyNTg6XFx0XFx0aW50IHNrYl9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4yMjU5OlxcdFxcdHVuc2lnbmVkIGludCBzbmFwbGVuLCByZXM7XFxuMjI2MDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXR1cyA9IFRQX1NUQVRVU19VU0VSO1xcbjIyNjE6XFx0XFx0dW5zaWduZWQgc2hvcnQgbWFjb2ZmLCBoZHJsZW47XFxuMjI2MjpcXHRcXHR1bnNpZ25lZCBpbnQgbmV0b2ZmO1xcbjIyNjM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmNvcHlfc2tiID0gTlVMTDtcXG4yMjY0OlxcdFxcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbjIyNjU6XFx0XFx0X191MzIgdHNfc3RhdHVzO1xcbjIyNjY6XFx0XFx0dW5zaWduZWQgaW50IHNsb3RfaWQgPSAwO1xcbjIyNjc6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gMDtcXG4yMjY4OlxcdFxcbjIyNjk6XFx0XFx0Lyogc3RydWN0IHRwYWNrZXR7MiwzfV9oZHIgaXMgYWxpZ25lZCB0byBhIG11bHRpcGxlIG9mIFRQQUNLRVRfQUxJR05NRU5ULlxcbjIyNzA6XFx0XFx0ICogV2UgbWF5IGFkZCBtZW1iZXJzIHRvIHRoZW0gdW50aWwgY3VycmVudCBhbGlnbmVkIHNpemUgd2l0aG91dCBmb3JjaW5nXFxuMjI3MTpcXHRcXHQgKiB1c2Vyc3BhY2UgdG8gY2FsbCBnZXRzb2Nrb3B0KC4uLiwgUEFDS0VUX0hEUkxFTiwgLi4uKS5cXG4yMjcyOlxcdFxcdCAqL1xcbjIyNzM6XFx0XFx0QlVJTERfQlVHX09OKFRQQUNLRVRfQUxJR04oc2l6ZW9mKCpoLmgyKSkgIT0gMzIpO1xcbjIyNzQ6XFx0XFx0QlVJTERfQlVHX09OKFRQQUNLRVRfQUxJR04oc2l6ZW9mKCpoLmgzKSkgIT0gNDgpO1xcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTE9PUEJBQ0spXFxuMjI3NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjI3ODpcXHRcXG4yMjc5OlxcdFxcdHNrID0gcHQtXFx1MDAzZWFmX3BhY2tldF9wcml2O1xcbjIyODA6XFx0XFx0cG8gPSBwa3Rfc2soc2spO1xcbjIyODE6XFx0XFxuMjI4MjpcXHRcXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIHNvY2tfbmV0KHNrKSkpXFxuMjI4MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjI4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDYuNzY3NjM5MTkzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMDE5MzAxODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGBzbG90X2lkYCBpbml0aWFsaXplZCB0byAwLiBJZiB0aGUgcGFja2V0IHR5cGUgaXMgb2xkIChgcG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjJgKSwgYHNsb3RfaWRgIGdldHMgdXBkYXRlZCB0byBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIHdlIHNldCBhIGJpdCBpbiBgcnhfb3duZXJfbWFwYCB1c2luZyBgX19zZXRfYml0YC4gTm93LCBpZiB3ZSBoaXQgYW4gZXJyb3IgbGF0ZXIsIHdlIG5lZWQgdG8gY2xlYXIgdGhhdCBiaXQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyBgc2xvdF9pZGAgdXNlZCB3aXRob3V0IGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgbG9va2luZyBhdCB0aGUgY29kZSwgaW4gdGhlIGVycm9yIHBhdGgsIGlmIHRoZSBwYWNrZXQgdHlwZSBpcyBvbGQsIHdlICpjbGVhciogdGhlIGJpdCB3ZSBwcmV2aW91c2x5ICpzZXQqICh1c2luZyBgX19jbGVhcl9iaXRgKS4gSWYgaXQncyBgVFBBQ0tFVF9WM2AsIGEgZGlmZmVyZW50IGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZXNldCB0aGUgZmlsbCBzdGF0dXMsIHNvIG5vIGJpdCBpcyBjbGVhcmVkLlxuXG5TbywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHdoZXJlIHBvdGVudGlhbCBwcm9ibGVtcyAqY291bGQqIG9jY3VyLiBGaXJzdCwgd2hhdCBkb2VzIHRoaXMgYml0IGluIHRoZSBgcnhfb3duZXJfbWFwYCBldmVuICptZWFuKj8gT2theSwgSSByZWNhbGwgaXQncyB1c2VkIHRvIHRyYWNrIG93bmVyc2hpcCBvZiByaW5nIGJ1ZmZlciBzbG90cy4gSW4gdGhlIGVycm9yIHBhdGgsIHdlIGFyZSAqcmVsZWFzaW5nKiBvd25lcnNoaXAuIElmIHRoZSBwYWNrZXQgdHlwZSBpcyBvbGQgKFx1MDAzYz0gVjIpLCB0aGVuIHdlIGNsZWFyIHRoZSBiaXQgdG8gcmVsZWFzZSBvd25lcnNoaXAuXG5cbkkgd2FzIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLiBMZXQncyBzZWUgd2hhdCBLTVNBTiBhbmQgS0FTQU4gd291bGQgZGV0ZWN0IGhlcmUuIEtNU0FOIGlzIGdyZWF0IGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIHJlYWRzIGFuZCBsZWFrcywgd2hpbGUgS0FTQU4gaXMgdGhlIGdvLXRvIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZS5cblxuRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgcHJvYmxlbXMgYmFzZWQgb24gdGhvc2UgS0FTQU4gLyBLTVNBTiBjaGVja3M/IFdlbGwsIG5vdGhpbmcncyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBmaWVsZC4gTm8gY29uZGl0aW9uYWwgbG9naWMgc2VlbXMgdG8gYmUgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UncmUgbm90IGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgZWl0aGVyLiBBbmQgdGhlcmUgYXJlIG5vIG9idmlvdXMgYm91bmRzIGlzc3VlcyB0aGF0IHdvdWxkIGNhdXNlIHJlYWQvd3JpdGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkhvd2V2ZXIsIGNvdWxkIGByeF9vd25lcl9tYXBgIGJlIE5VTEw/IExldCdzIHRyYWNlIGl0IGJhY2sgdG8gYHBhY2tldF9zZXRfcmluZ2AuIEFoLCB5ZXMsIGl0J3MgYWxsb2NhdGVkIHdpdGggYGJpdG1hcF9hbGxvY2AgYW5kIGluaXRpYWxpemVkIHdpdGggYF9fR0ZQX1pFUk9gLiBBbmQgdGhlIGNvZGUgKmRvZXMqIGNoZWNrIGZvciBhIE5VTEwgYHJ4X293bmVyX21hcGAgYWZ0ZXIgdGhlIGFsbG9jYXRpb24gYW5kIGp1bXBzIHRvIGBvdXRfZnJlZV9wZ192ZWNgIGlmIGl0IGlzIG51bGwsIHNvIGl0J3MgaW1wb3NzaWJsZSBmb3IgYHJ4X293bmVyX21hcGAgdG8gYmUgbnVsbC5cblxuQW5kLCBpZiBgc2xvdF9pZGAgaXMgb3V0IG9mIGJvdW5kcywgdGhhdCBzaG91bGQgYWxzbyBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4sIGFzIGl0IHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYml0IGFjY2Vzcy4gQW5kIGBzbG90X2lkYCBzaG91bGQgYmUgYm91bmQgYnkgYHBvLVx1MDAzZXJ4X3JpbmcuaGVhZGAgYW5kIHRoZSBvdmVyYWxsIHJpbmcgc2l6ZS4gU28gbm8uXG5cbk5vdywgd2hhdCdzIHRoZSBhY3R1YWwgYnVnIHRoaXMgcGF0Y2ggZml4ZXM/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGhpc3RvcnkgYW5kIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjU3Ljc4Njk0MzE2MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODA2NzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9OTcyPXN0YXRpYyBpbnQgcHJiX3F1ZXVlX2Zyb3plbihzdHJ1Y3QgdHBhY2tldF9rYmRxX2NvcmUgKnBrYylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTc2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6OTc3OnN0YXRpYyB2b2lkIHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoc3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciAqcmIpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NzgtXFx0X19yZWxlYXNlcyhcXHUwMDI2cGtjLVxcdTAwM2VibGtfZmlsbF9pbl9wcm9nX2xvY2spXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzg5LVxcdFxcdGVsc2VcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzOTA6XFx0XFx0XFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM5MS1cXHRcXHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTEwLVxcdH0gZWxzZSBpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMykge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUxMTpcXHRcXHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTEyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTkuNTQ1MDQ0NDE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0MzY4MzQ2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gSnVzdGlmaWNhdGlvbiBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkcmVzc2luZyBhIGJ1ZyBpbiBgdHBhY2tldF9yY3YoKWAuIFNwZWNpZmljYWxseSwgd2hlbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGZhaWxzLCB0aGVyZSdzIGEgY2xlYW51cCBvdmVyc2lnaHQuIFRoZSBvcmlnaW5hbCBjb2RlIG9ubHkgY2xlYXJlZCB0aGUgYmxvY2sgc3RhdHVzIGZvciBgVFBBQ0tFVF9WM2AgcGFja2V0cywgbmVnbGVjdGluZyB0byBjbGVhciB0aGUgb3duZXJzaGlwIGJpdCBpbiBgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXBgIGZvciBgVFBBQ0tFVF9WMWAgYW5kIGBUUEFDS0VUX1YyYCBwYWNrZXRzLiBUaGlzIG1lYW5zIHNsb3RzIHdlcmUgZ2V0dGluZyBpbmNvcnJlY3RseSBtYXJrZWQgYXMgb3duZWQsIGV2ZW4gYWZ0ZXIgYW4gZXJyb3IuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGVuc3VyaW5nIHRoZSBvd25lcnNoaXAgYml0IGdldHMgY2xlYXJlZCByZWdhcmRsZXNzIG9mIHRoZSBwYWNrZXQgdmVyc2lvbi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyByZXF1aXJlcyBhIEtNU0FOIGNoZWNrLiBMZXQncyB0aGluayB0aHJvdWdoIHRoaXM6XG5cbjEuICAqKldoYXQncyBiZWluZyBjaGFuZ2VkPyoqIEl0J3MgYSBjbGVhbnVwIHBhdGguIFdlJ3JlICpyZW1vdmluZyogYSBwb3RlbnRpYWwgbWlzc2VkIHN0ZXAsIG5vdCBpbnRyb2R1Y2luZyBuZXcgY29tcGxleCBsb2dpYyBvciBhbGxvY2F0aW9ucy5cblxuMi4gICoqTWVtb3J5IEFjY2VzczoqKiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiB0aGUgYml0IG9wZXJhdGlvbnMgb3IgaW5kZXhpbmcgaXNzdWVzIGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYgd291bGQgYmUgaW1tZWRpYXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoYXQncyBhIHN0cm9uZyBsYXllciBvZiBwcm90ZWN0aW9uLlxuXG4zLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeToqKiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGhlcmUg4oCTIGBzbG90X2lkYCwgYHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwYCwgYW5kIGBwby1cdTAwM2V0cF92ZXJzaW9uYCDigJMgYXJlIGFsbCBpbml0aWFsaXplZC4gYHNsb3RfaWRgIGlzIGRlcml2ZWQgZnJvbSBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCB3aGljaCBpcyBpbml0aWFsaXplZC4gYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm9lZCB3aXRoIGBiaXRtYXBfYWxsb2MoX19HRlBfWkVSTylgLiBUaGUgcGF0Y2ggaXRzZWxmIGlzbid0IGNyZWF0aW5nIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCdzIGZpeGluZyBhIHN0YXRlIGNsZWFudXAuIEZ1cnRoZXJtb3JlLCBpbiB0aGUgZXJyb3IgcGF0aCwgbm8ga2VybmVsIGRhdGEgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ug4oCTIHdlIGFyZSBzaW1wbHkganVtcGluZyB0byBgZHJvcF9uX2FjY291bnRgLCB3aGljaCBkb2VzIG5vdCB0cmFuc21pdCBpbmZvcm1hdGlvbiBiYWNrIHRvIHRoZSB1c2VyLlxuXG40LiAgKipLTVNBTiB2cyBLQVNBTjoqKiBUaGUga2V5IGRpZmZlcmVuY2UgaGVyZSBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgKnNwZWNpZmljYWxseSogZGVzaWduZWQgdG8gZmluZCB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBHaXZlbiB0aGF0IHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciB0aGF0IHRoZSB2YXJpYWJsZXMgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnl0aGluZyB0aGF0IHdvdWxkIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhLCBvciBkb2luZyBhbnl0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHdvdWxkIHJlcXVpcmUgbW9yZSBjYXJlZnVsIGluc3BlY3Rpb24gdGhhbiBLQVNBTiBwcm92aWRlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhbmFseXppbmcgdGhpcywgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBhdGNoIGlzIHJlbGF0aXZlbHkgc2ltcGxlLCBhbmQgdGhlIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkIGFyZSB2ZXJ5IHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGNoZWNrcy4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1NiwiT3V0cHV0VG9rZW5zIjoyODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDYuOTgxODg2NjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvci1oYW5kbGluZyBwYXRoIGluIGB0cGFja2V0X3JjdigpYCB3aGVyZSBmYWlsdXJlIGluIGB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYigpYCBjbGVhbmVkIHVwIGJsb2NrIHN0YXRlIG9ubHkgZm9yIGBUUEFDS0VUX1YzYCwgb21pdHRpbmcgYF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcClgIGZvciBgVFBBQ0tFVF9WMWAgYW5kIGBUUEFDS0VUX1YyYC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIChpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBqdW1wcyB0byBgZHJvcF9uX2FjY291bnRgKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgKGBzbG90X2lkYCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBleHBsaWNpdGx5IGFzc2lnbmVkIGBwby1cXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIGByeF9vd25lcl9tYXBgIGlzIGFsbG9jYXRlZCB6ZXJvLWluaXRpYWxpemVkIHZpYSBgYml0bWFwX2FsbG9jYCkuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBhbHJlYWR5IGNvdmVyIGFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBiaXRtYXAgYm91bmRzIG9yIHBvaW50ZXIgdmFsaWRpdHkuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgKGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGp1bXBzIHRvIGBkcm9wX25fYWNjb3VudGApLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHNsb3RfaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGV4cGxpY2l0bHkgYXNzaWduZWQgYHBvLVxcdTAwM2VyeF9yaW5nLmhlYWRgLCBhbmQgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBiaXRtYXBfYWxsb2NgKS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 10:31:37 +0000 UTC FinishedAt: 2026-09-13 10:35:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET" ], "series_id": "0b3d2872-082f-4946-b62a-e275c26e6583" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tpacket_rcv", "packet_set_ring" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RwYWNrZXRfcmN2JiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRfcmluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApYCBmb3IgYFRQQUNLRVRfVjFgIGFuZCBgVFBBQ0tFVF9WMmAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSAoaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQganVtcHMgdG8gYGRyb3Bfbl9hY2NvdW50YCksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIChgc2xvdF9pZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgZXhwbGljaXRseSBhc3NpZ25lZCBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIGByeF9vd25lcl9tYXBgIGlzIGFsbG9jYXRlZCB6ZXJvLWluaXRpYWxpemVkIHZpYSBgYml0bWFwX2FsbG9jYCkuXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0cGFja2V0X3JjdigpIGluIG5ldC9wYWNrZXQvYWZfcGFja2V0LmMsIGVuc3VyaW5nIHRoYXQgdGhlIHNsb3QgaW4gcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg5MGM1NDFhMjQyNjdlYjI0MWMyOTY3YjQ1NWVkM2EwMjJlMDQxMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuaW5kZXggNzZiZGU3OTA2ZDQ5NC4uNTBjYWUzMmFlMjY5MiAxMDA2NDRcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbkBAIC0yMzg0LDcgJiM0MzsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgJiM0MzsgbWFjb2ZmIC1cbiBcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcbiBcdFx0XHRcdCAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHtcbi1cdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMylcbiYjNDM7XHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xuJiM0MztcdFx0ZWxzZVxuIFx0XHRcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG4gXHRcdGdvdG8gZHJvcF9uX2FjY291bnQ7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHBhY2tldF9yY3YmIzM0OywKICAgICYjMzQ7cGFja2V0X3NldF9yaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCBpcyBjbGVhcmVkIHdoZW4gdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKSBmYWlscyBmb3IgVFBBQ0tFVF9WMS9WMiByaW5ncy4gVGhpcyBjb2RlIGlzIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9QQUNLRVQgc29ja2V0cyBjb25maWd1cmVkIHdpdGggUEFDS0VUX1JYX1JJTkcgYW5kIFBBQ0tFVF9WTkVUX0hEUi4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgc2xvdCBvd25lcnNoaXAgdHJhY2tpbmcsIHJpbmcgbWFuYWdlbWVudCwgYW5kIHBhY2tldCBkcm9wIGFjY291bnRpbmcgYmVoYXZlIGNvcnJlY3RseSB1bmRlciBtYWxmb3JtZWQgcGFja2V0IGFuZCBlcnJvciBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODkwYzU0MWEyNDI2N2ViMjQxYzI5NjdiNDU1ZWQzYTAyMmUwNDEwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggNzZiZGU3OTA2ZDQ5NC4uNTBjYWUzMmFlMjY5MiAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0yMzg0LDcgJiM0MzsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCSAgICB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYihza2IsIGgucmF3ICYjNDM7IG1hY29mZiAtCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpLAogCQkJCSAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHsKLQkJaWYgKHBvLSZndDt0cF92ZXJzaW9uID09IFRQQUNLRVRfVjMpCiYjNDM7CQlpZiAocG8tJmd0O3RwX3ZlcnNpb24gJmx0Oz0gVFBBQ0tFVF9WMikKJiM0MzsJCQlfX2NsZWFyX2JpdChzbG90X2lkLCBwby0mZ3Q7cnhfcmluZy5yeF9vd25lcl9tYXApOwomIzQzOwkJZWxzZQogCQkJcHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cygmYW1wO3BvLSZndDtyeF9yaW5nKTsKIAkJZ290byBkcm9wX25fYWNjb3VudDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgYmVmb3JlIEkgZXZlbiBzdGFydCB0byB0aGluayBhYm91dCB0aGUgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLiBTbywgbXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYGdpdCBkaWZmYCBvciwgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudCwgbWF5YmUgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYXJvdW5kIGxpbmUgMjM4NCBvZiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AuIENvbnRleHQgaXMgKmV2ZXJ5dGhpbmcqIHdoZW4geW91JiMzOTtyZSByZXZpZXdpbmcgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW1tZWRpYXRlbHkgYXJvdW5kIHRoZSBjaGFuZ2UgdG8gZnVsbHkgZ3JvayB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGxvZ2ljIGZsb3csIGFuZCB0aGUgYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLiBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGxpbmUgYW5kIHNheSAmIzM0O3RoYXQgbG9va3MgZ29vZCYjMzQ7IOKAkyBJIGhhdmUgdG8gKnVuZGVyc3RhbmQqIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNzA6XHRcdHNwaW5fbG9jayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuMjM3MTpcdFx0aC5yYXcgPSBwYWNrZXRfY3VycmVudF9yeF9mcmFtZShwbywgc2tiLFxuMjM3MjpcdFx0XHRcdFx0XHRUUF9TVEFUVVNfS0VSTkVMLCAobWFjb2ZmJiM0MztzbmFwbGVuKSk7XG4yMzczOlx0XHRpZiAoIWgucmF3KVxuMjM3NDpcdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuMjM3NTpcdFxuMjM3NjpcdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKSB7XG4yMzc3Olx0XHRcdHNsb3RfaWQgPSBwby1cdTAwM2VyeF9yaW5nLmhlYWQ7XG4yMzc4Olx0XHRcdGlmICh0ZXN0X2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCkpXG4yMzc5Olx0XHRcdFx0Z290byBkcm9wX25fYWNjb3VudDtcbjIzODA6XHRcdFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbjIzODE6XHRcdH1cbjIzODI6XHRcbjIzODM6XHRcdGlmICh2bmV0X2hkcl9zeiBcdTAwMjZcdTAwMjZcbjIzODQ6XHRcdCAgICB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYihza2IsIGgucmF3ICYjNDM7IG1hY29mZiAtXG4yMzg1Olx0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciksXG4yMzg2Olx0XHRcdFx0XHQgICAgdmlvX2xlKCksIHRydWUsIDApKSB7XG4yMzg3Olx0XHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbjIzODg6XHRcdFx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG4yMzg5Olx0XHRcdGVsc2VcbjIzOTA6XHRcdFx0XHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpO1xuMjM5MTpcdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuMjM5MjpcdFx0fVxuMjM5MzpcdFxuMjM5NDpcdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKSB7XG4yMzk1Olx0XHRcdHBhY2tldF9pbmNyZW1lbnRfcnhfaGVhZChwbywgXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG4yMzk2Olx0XHQvKlxuMjM5NzpcdFx0ICogTE9TSU5HIHdpbGwgYmUgcmVwb3J0ZWQgdGlsbCB5b3UgcmVhZCB0aGUgc3RhdHMsXG4yMzk4Olx0XHQgKiBiZWNhdXNlIGl0JiMzOTtzIENPUiAtIENsZWFyIE9uIFJlYWQuXG4yMzk5Olx0XHQgKiBBbnl3YXlzLCBtb3ZpbmcgaXQgZm9yIFYxL1YyIG9ubHkgYXMgVjMgZG9lc24mIzM5O3QgbmVlZCB0aGlzXG4yNDAwOlx0XHQgKiBhdCBwYWNrZXQgbGV2ZWwuXG4yNDAxOlx0XHQgKi9cbjI0MDI6XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnBvLVx1MDAzZXRwX2Ryb3BzKSlcbjI0MDM6XHRcdFx0XHRzdGF0dXMgfD0gVFBfU1RBVFVTX0xPU0lORztcbjI0MDQ6XHRcdH1cbjI0MDU6XHRcbjI0MDY6XHRcdHBvLVx1MDAzZXN0YXRzLnN0YXRzMS50cF9wYWNrZXRzJiM0MzsmIzQzOztcbjI0MDc6XHRcdGlmIChjb3B5X3NrYikge1xuMjQwODpcdFx0XHRzdGF0dXMgfD0gVFBfU1RBVFVTX0NPUFk7XG4yNDA5Olx0XHRcdHNrYl9jbGVhcl9kZWxpdmVyeV90aW1lKGNvcHlfc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGlzIHBhdGNoIOKAkyB3aGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvaW5nLCBhbmQgd2h5IHdhcyB0aGlzIG1vZGlmaWNhdGlvbiBuZWNlc3NhcnkgaW4gdGhlIGZpcnN0IHBsYWNlPyBUbyBkbyB0aGlzLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcGF0Y2ggY29udGV4dCBpdHNlbGY7IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhbmdlLiBLbm93aW5nIHRoZSBoaXN0b3J5IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nLiBUaGlzIHdpbGwgaGVscCB3aXRoIGEgbWVudGFsIG1vZGVsIG9mIHRoZSByZWFzb25pbmcuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZS4gSSBrbm93IHRoZSBjaGFuZ2UgY29uY2VybnMgdGhlIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nIGluIGBhZl9wYWNrZXQuY2AsIHNvIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ2l0IGxvZ2Agb24gdGhhdCBzcGVjaWZpYyBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGxvZyBmb3IgY2hhbmdlcyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgYW5kIGtleXdvcmRzIHN1Y2ggYXMgYHJ4X293bmVyX21hcGAuIEkga25vdyB0aGlzIGhlbHBzIGtlZXAgdHJhY2sgb2YgdGhlIG93bmVyc2hpcCBvZiB0aGUgcmVjZWl2aW5nIHNpZGUuIFRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb21taXQgb3IgY29tbWl0cyB0aGF0IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHNob3cgbWUgdGhlIGxvZ2ljLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhfb3duZXJfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM3Ny1cdFx0c2xvdF9pZCA9IHBvLVx1MDAzZXJ4X3JpbmcuaGVhZDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM3ODpcdFx0aWYgKHRlc3RfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM3OS1cdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzgwOlx0XHRfX3NldF9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzgxLVx0fVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4Ny1cdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzg4Olx0XHRcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4OS1cdFx0ZWxzZVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwNi1cdFx0X19wYWNrZXRfc2V0X3N0YXR1cyhwbywgaC5yYXcsIHN0YXR1cyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1MDc6XHRcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwOC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ1MTU9c3RhdGljIGludCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCB1bmlvbiB0cGFja2V0X3JlcV91ICpyZXFfdSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MTktXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDUyMDpcdHVuc2lnbmVkIGxvbmcgKnJ4X293bmVyX21hcCA9IE5VTEw7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MjEtXHRpbnQgd2FzX3J1bm5pbmcsIG9yZGVyID0gMDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MDYtXHRcdFx0aWYgKCF0eF9yaW5nKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2MDc6XHRcdFx0XHRyeF9vd25lcl9tYXAgPSBiaXRtYXBfYWxsb2MocmVxLVx1MDAzZXRwX2ZyYW1lX25yLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjA4LVx0XHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2MDk6XHRcdFx0XHRpZiAoIXJ4X293bmVyX21hcClcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYxMC1cdFx0XHRcdFx0Z290byBvdXRfZnJlZV9wZ192ZWM7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ0LVx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NDU6XHRcdFx0c3dhcChyYi1cdTAwM2VyeF9vd25lcl9tYXAsIHJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2NDYtXHRcdHJiLVx1MDAzZWZyYW1lX21heCA9IChyZXEtXHUwMDNldHBfZnJhbWVfbnIgLSAxKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODItXHRpZiAocGdfdmVjKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2ODM6XHRcdGJpdG1hcF9mcmVlKHJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2ODQtXHRcdGlmICh0eF9yaW5nIFx1MDAyNlx1MDAyNiBjbG9zaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQUZfUEFDS0VUIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIGB0cGFja2V0X3JjdmAgZnVuY3Rpb24sIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGUgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQUZfUEFDS0VULiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBibG9jayBvZiBjb2RlIHdoZXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGByeF9vd25lcl9tYXBgIGFuZCB0aGUgYFRQQUNLRVRgIHZlcnNpb25zLgoKSW5pdGlhbGx5LCBpZiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGZhaWxlZCBhbmQgdGhlIHBhY2tldCB0eXBlIHdhcyBgVFBBQ0tFVF9WMmAgb3IgZWFybGllciwgYSBgc2xvdF9pZGAgd2FzIGJlaW5nICpzZXQqIGluIHRoZSBgcnhfb3duZXJfbWFwYCwgYnV0ICpub3QqIGNsZWFyZWQgdXBvbiBkcm9wcGluZyB0aGUgcGFja2V0IChgZ290byBkcm9wX25fYWNjb3VudGApLiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4gV2hhdCBoYXBwZW5zIGlzIHRoYXQgYHRlc3RfYml0KHNsb3RfaWQsIHBvLSZndDtyeF9yaW5nLnJ4X293bmVyX21hcClgIHdpbGwgKmFsd2F5cyogZXZhbHVhdGUgdG8gdHJ1ZSwgd2hpY2ggbGVhZHMgdG8gdGhlIHBhY2tldCBiZWluZyBkcm9wcGVkIGFuZCB0aGF0IHNsb3QgYmVpbmcgdW5hdmFpbGFibGUgZm9yIGZ1cnRoZXIgdXNlLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIGRlbmlhbCBvZiBzZXJ2aWNlIGlmIHRoaXMgaGFwcGVucyByZXBlYXRlZGx5LiBUaGUgZml4IGlzIGEgc2ltcGxlLCBidXQgY3JpdGljYWwsIGJpdC1jbGVhcmluZyBvcGVyYXRpb246IGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby0mZ3Q7cnhfcmluZy5yeF9vd25lcl9tYXApYC4KClRoZSBjb25jZXJuIGlzIGFsd2F5cywgJiMzNDtpcyB0aGlzIHJlYWwsIGlzIHRoaXMgZXhwbG9pdGFibGU/JiMzNDsuIFRoZSBnb29kIG5ld3MgaXMsIGFic29sdXRlbHkgeWVzISBBRl9QQUNLRVQgc29ja2V0cyBhcmUgaW5jcmVkaWJseSBjb21tb247IHRoZXkgYXJlIGEgc3RhbmRhcmQgc29ja2V0IGZhbWlseSAoQUZfUEFDS0VUKSwgYW5kIHN5emthbGxlciBoZWF2aWx5IGZ1enplZCB0aGlzIGFyZWEuIFVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgY3JlYXRlIEFGX1BBQ0tFVCBzb2NrZXRzIHVzaW5nIGBzb2NrZXQoQUZfUEFDS0VULCBTT0NLX1JBVywgLi4uKWAgb3IgYFNPQ0tfREdSQU1gLCBhbmQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBUUEFDS0VUIHJpbmcgYnVmZmVycyBhbmQgYFBBQ0tFVF9WTkVUX0hEUmAgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBldmVuIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgbGlrZSB2ZXRoIG9yIGxvb3BiYWNrLgoKTm93LCBJJiMzOTtsbCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYGFmX3BhY2tldC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGFmZmVjdCB0aGlzIHBhdGgsIGJ1dCB0aGUgZ2VuZXJhbCBhY2Nlc3NpYmlsaXR5IG9mIHRoaXMgY29kZSBpcyBjbGVhci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYW5kIGVhc2lseSByZWFjaGFibGUgdnVsbmVyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfUEFDS0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L01ha2VmaWxlLTUtXG5uZXQvcGFja2V0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BBQ0tFVCkgJiM0Mzs9IGFmX3BhY2tldC5vXG5uZXQvcGFja2V0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BBQ0tFVF9ESUFHKSAmIzQzOz0gYWZfcGFja2V0X2RpYWcub1xubmV0L3BhY2tldC9NYWtlZmlsZS04LWFmX3BhY2tldF9kaWFnLXkgJiM0Mzs9IGRpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBQYWNrZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgcGFja2V0IGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L3BhY2tldC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHBhY2tldCBoYW5kbGluZyBhcmUgZGVmaW5lZCwgYW5kIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgcHV0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZC4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb25zIGludG8gcGFja2V0IHByb2Nlc3NpbmcgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBhY2tldCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQQUNLRVRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZVxuICAxMDpcdFx0ICBkaXJlY3RseSB3aXRoIG5ldHdvcmsgZGV2aWNlcyB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBuZXR3b3JrXG4gIDExOlx0XHQgIHByb3RvY29sIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwsIGUuZy4gdGNwZHVtcC4gIElmIHlvdSB3YW50IHRoZW1cbiAgMTI6XHRcdCAgdG8gd29yaywgY2hvb3NlIFkuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgYWZfcGFja2V0LlxuICAxNjpcdFxuICAxNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBQQUNLRVRfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFBBQ0tFVFxuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDI1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBQYWNrZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX1BBQ0tFVGAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9mIGludGVyZXN0LiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMgYWx3YXlzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSwgb3IgYmUgaW5mbHVlbmNlZCBieSwgYENPTkZJR19QQUNLRVRgLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSB0ZXh0IGluZGljYXRlcyBgbmV0L3BhY2tldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTtsbCBjaGVjayB0aGF0IGZpbGUgZm9yIGluY2x1ZGVzIGFuZCByZWZlcmVuY2VzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgYXQgcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTgyPW1lbnUgXCYjMzQ7TmV0d29ya2luZyBvcHRpb25zXCYjMzQ7XG5uZXQvS2NvbmZpZy04My1cbm5ldC9LY29uZmlnOjg0OnNvdXJjZSBcJiMzNDtuZXQvcGFja2V0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTg1LXNvdXJjZSBcJiMzNDtuZXQvcHNwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhY2tldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX1BBQ0tFVGAuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGxpdmVzIHVuZGVyICYjMzQ7TmV0d29ya2luZyBvcHRpb25zJiMzNDsgYW5kIG9ubHkgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgYmFzaWNhbGx5IHRoZSBiYXNlbGluZSBmb3IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBUaGF0IG1lYW5zIGVuYWJsaW5nIGBQQUNLRVRgIGlzIHRoZSBrZXkuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQgd2hlbiBgQ09ORklHX1BBQ0tFVGAgd2FzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgY29kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmbGFnLCBhbmQgbXkgdG9vbCBvZiBjaG9pY2UgaGVyZSBpcyB0aGUgYEZvY3VzU3ltYm9sc2AuCgpPa2F5LCB0aGUgdG9vbCBwb2ludHMgbWUgdG8gYHRwYWNrZXRfcmN2YCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgdHBhY2tldF9yY3ZgIGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZSBzY29wZSBtaWdodCBiZSBsaW1pdGVkLCBhbmQgdGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHNwZWNpZmljIGFyZWEgb2YgY29uY2VybiBvciBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYFBBQ0tFVGAgZmVhdHVyZS4KCk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHRwYWNrZXRfcmN2YCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgaW52b2tlZCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dCBhbmQgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBmZWF0dXJlIG9uIHRoZSBvdmVyYWxsIGtlcm5lbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHBhY2tldF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkyPXN0cnVjdCBwYWNrZXRfc29jaztcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTkzOnN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk0LVx0XHQgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTY4Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcHJiX3JldGlyZV9yeF9ibGtfdGltZXJfZXhwaXJlZChzdHJ1Y3QgaHJ0aW1lciAqdClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTY5Ni1cdC8qIFdlIG9ubHkgbmVlZCB0byBwbHVnIHRoZSByYWNlIHdoZW4gdGhlIGJsb2NrIGlzIHBhcnRpYWxseSBmaWxsZWQuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjY5NzpcdCAqIHRwYWNrZXRfcmN2OlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy02OTgtXHQgKlx0XHRsb2NrKCk7IGluY3JlbWVudCBCTE9DS19OVU1fUEtUUzsgdW5sb2NrKClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTgyMz1zdGF0aWMgdm9pZCBwcmJfdGhhd19xdWV1ZShzdHJ1Y3QgdHBhY2tldF9rYmRxX2NvcmUgKnBrYylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTgyOC0vKlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4Mjk6ICogcHJiX29wZW5fYmxvY2sgaXMgY2FsbGVkIGJ5IHRwYWNrZXRfcmN2IG9yIHRpbWVyIGNhbGxiYWNrLlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy04MzAtICpcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTgzNS0gKlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4MzY6ICogT25lIHNpZGUgZWZmZWN0IG9mIE5PVCB1cGRhdGUgaHJ0aW1lciB3aGVuIGNhbGxlZCBieSB0cGFja2V0X3JjdiBpcyB0aGF0XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjgzNzogKiBhIG5ld2x5IG9wZW5lZCBibG9jayB0cmlnZ2VyZWQgYnkgdHBhY2tldF9yY3YgbWF5IGJlIHJldGlyZWQgZWFybGllciB0aGFuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTgzOC0gKiBleHBlY3RlZC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRpbWVvdXQgaXMgdXBkYXRlZCBpbiBwcmJfb3Blbl9ibG9jaywgdGhlXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz04NDI9c3RhdGljIHZvaWQgcHJiX29wZW5fYmxvY2soc3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlICpwa2MxLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODgzLSAqIDQpIHVzZXItc3BhY2UgaXMgZWl0aGVyIHNsZWVwaW5nIG9yIHByb2Nlc3NpbmcgYmxvY2sgJiMzOTswJiMzOTsuXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjg4NDogKiA1KSB0cGFja2V0X3JjdiBpcyBjdXJyZW50bHkgZmlsbGluZyBibG9jayAmIzM5OzcmIzM5Oywgc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODg1LSAqICAgIGl0IHdpbGwgY2xvc2UgYmxvY2stNyxsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIGZpbGwgYmxvY2sgJiMzOTswJiMzOTsuXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz05NDE9c3RhdGljIHZvaWQgcHJiX3JldGlyZV9jdXJyZW50X2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTQ5LVx0XHQgKiBQbHVnIHRoZSBjYXNlIHdoZXJlIGNvcHlfYml0cygpIGlzIGluIHByb2dyZXNzIG9uXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjk1MDpcdFx0ICogY3B1LTAgYW5kIHRwYWNrZXRfcmN2KCkgZ290IGludm9rZWQgb24gY3B1LTEsIGRpZG4mIzM5O3Rcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTUxLVx0XHQgKiBoYXZlIHNwYWNlIHRvIGNvcHkgdGhlIHBrdCBpbiB0aGUgY3VycmVudCBibG9jayBhbmRcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTEyNzE9c3RhdGljIGludCBfX3BhY2tldF9yY3ZfaGFzX3Jvb20oY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbyxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTEyNzYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjEyNzc6XHRpZiAocG8tXHUwMDNlcHJvdF9ob29rLmZ1bmMgIT0gdHBhY2tldF9yY3YpIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTI3OC1cdFx0aW50IHJjdmJ1ZiA9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyNDgtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyNDk6c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjUwLVx0XHQgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM2MC1cdFx0bnZhbCA9IEdFVF9QQkRRQ19GUk9NX1JCKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpLVx1MDAzZW1heF9mcmFtZV9sZW4gLSBtYWNvZmY7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNjE6XHRcdHByX2Vycl9vbmNlKFwmIzM0O3RwYWNrZXRfcmN2OiBwYWNrZXQgdG9vIGJpZywgY2xhbXBlZCBmcm9tICV1IHRvICV1LiBtYWNvZmY9JXVcXG5cJiMzNDssXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjItXHRcdFx0ICAgIHNuYXBsZW4sIG52YWwsIG1hY29mZik7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NTE1PXN0YXRpYyBpbnQgcGFja2V0X3NldF9yaW5nKHN0cnVjdCBzb2NrICpzaywgdW5pb24gdHBhY2tldF9yZXFfdSAqcmVxX3UsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ5LVx0XHRwby1cdTAwM2Vwcm90X2hvb2suZnVuYyA9IChwby1cdTAwM2VyeF9yaW5nLnBnX3ZlYykgP1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjUwOlx0XHRcdFx0XHRcdHRwYWNrZXRfcmN2IDogcGFja2V0X3Jjdjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY1MS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmJfcXVldWUtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUGFja2V0IFNvY2tldCBSWCBSaW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IHRoZSBwYWNrZXQgc29ja2V0IHJlY2VpdmUgcmluZyB3b3Jrcy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYHRwYWNrZXRfcmN2YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIFRoYXQmIzM5O3MgdGhlIG9uZSByZWdpc3RlcmVkIGluIGBwby0mZ3Q7cHJvdF9ob29rLmZ1bmNgIHdoZW4gdGhlIHJlY2VpdmUgcmluZyBpcyBhY3RpdmUgKGBwby0mZ3Q7cnhfcmluZy5wZ192ZWMgIT0gTlVMTGApLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiBwYWNrZXRzIGFyZSByZWNlaXZlZCwgZWl0aGVyIHZpYSBgZGV2X3F1ZXVlX3htaXRfbml0YCwgYGRlbGl2ZXJfc2tiYCwgb3IgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGEgc3RhdGljIGFuZCBub3QgdXNlZCBldmVyeXdoZXJlLiBCZWNhdXNlIGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgY29kZSAofjMwMCBsaW5lcyksIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGJlIGlubGluZWQgYW5kIHdpbGwgYmUgYSBkaXN0aW5jdCBzeW1ib2wgaW4gYHZtbGludXhgLgoKSSBrbm93IHRoYXQgYHBhY2tldF9zZXRfcmluZ2AgaXMgd2hlcmUgdGhlIHJpbmcgaXMgYWN0dWFsbHkgc2V0IHVwLCBjb25maWd1cmVkLCBhbmQgd2hlcmUgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIHJlbGF0ZWQgY29tcG9uZW50cy4KCk5vdywgSSB3b25kZXIgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgcGFja2V0IHNvY2tldCBjb2RlIHRoYXQgcGxheSBhIHNpZ25pZmljYW50IHJvbGU/IExldCYjMzk7cyBjaGVjayBgcGFja2V0X3JlY3Ztc2dgIGFuZCBgcGFja2V0X3NldHNvY2tvcHRgLiBJdCBsb29rcyBsaWtlIGluIGBwYWNrZXRfc2V0c29ja29wdGAsIHRoZSBgUEFDS0VUX1JYX1JJTkdgIHNldHNvY2tvcHQgY2FsbHMgYHBhY2tldF9zZXRfcmluZ2AgLSB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZy4gSXQgbG9va3MgbGlrZSBgUEFDS0VUX1ZORVRfSERSYCBlbmFibGVzIGBwby0mZ3Q7aGFzX3ZuZXRfaGRyYC4KCkFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdm5ldF9oZHJfc3pgIGlzIHNldCB3aXRoaW4gYHRwYWNrZXRfcmN2YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm5ldF9oZHJfc3omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEwOT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfdm5ldChzdHJ1Y3QgbXNnaGRyICptc2csIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxMTA6XHRcdFx0ICAgc2l6ZV90ICpsZW4sIGludCB2bmV0X2hkcl9zeilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjExMS17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTEzLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTE0Olx0aWYgKCpsZW4gXHUwMDNjIHZuZXRfaGRyX3N6KVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTE1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjExNjpcdCpsZW4gLT0gdm5ldF9oZHJfc3o7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMTctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTIwLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTIxOlx0cmV0dXJuIG1lbWNweV90b19tc2cobXNnLCAodm9pZCAqKVx1MDAyNnZuZXRfaGRyLCB2bmV0X2hkcl9zeik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMjItfVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjI0OT1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjY2LVx0dW5zaWduZWQgaW50IHNsb3RfaWQgPSAwO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjY3Olx0aW50IHZuZXRfaGRyX3N6ID0gMDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI2OC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzMjQtXHRcdFx0XHQgICAgICAgcG8tXHUwMDNldHBfcmVzZXJ2ZTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjMyNTpcdFx0dm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzI2Olx0XHRpZiAodm5ldF9oZHJfc3opXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzMjc6XHRcdFx0bmV0b2ZmICYjNDM7PSB2bmV0X2hkcl9zejtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjMyOC1cdFx0bWFjb2ZmID0gbmV0b2ZmIC0gbWFjbGVuO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM1Mi1cdFx0XHRcdHNuYXBsZW4gPSAwO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzUzOlx0XHRcdFx0dm5ldF9oZHJfc3ogPSAwO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzU0LVx0XHRcdH1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjYtXHRcdFx0bWFjb2ZmID0gR0VUX1BCRFFDX0ZST01fUkIoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyktXHUwMDNlbWF4X2ZyYW1lX2xlbjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM2NzpcdFx0XHR2bmV0X2hkcl9zeiA9IDA7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjgtXHRcdH1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODItXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODM6XHRpZiAodm5ldF9oZHJfc3ogXHUwMDI2XHUwMDI2XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODQtXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyAmIzQzOyBtYWNvZmYgLVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjU2OT1zdGF0aWMgaW50IHBhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqbGVuLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTcwOlx0XHRcdFx0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIGludCB2bmV0X2hkcl9zeilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3MS17XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTczLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTc0Olx0aWYgKCpsZW4gXHUwMDNjIHZuZXRfaGRyX3N6KVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NjpcdCpsZW4gLT0gdm5ldF9oZHJfc3o7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTg1LVx0LyogbW92ZSBpdGVyIHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZiBtYWMgaGVhZGVyICovXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODY6XHRpZiAodm5ldF9oZHJfc3ogIT0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcikpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODc6XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCB2bmV0X2hkcl9zeiAtIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU4OC1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NDU9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU2LVx0Ym9vbCBuZWVkX3dhaXQgPSAhKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3NTc6XHRpbnQgdm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU4LVx0dW5zaWduZWQgY2hhciAqYWRkciA9IE5VTEw7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODE1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODE2Olx0aWYgKChzaXplX21heCBcdTAwM2UgZGV2LVx1MDAzZW10dSAmIzQzOyByZXNlcnZlICYjNDM7IFZMQU5fSExFTikgXHUwMDI2XHUwMDI2ICF2bmV0X2hkcl9zeilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgxNy1cdFx0c2l6ZV9tYXggPSBkZXYtXHUwMDNlbXR1ICYjNDM7IHJlc2VydmUgJiM0MzsgVkxBTl9ITEVOO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1MC1cdFx0dGxlbiA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NTE6XHRcdGlmICh2bmV0X2hkcl9zeikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUyOlx0XHRcdGRhdGEgJiM0Mzs9IHZuZXRfaGRyX3N6O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUzOlx0XHRcdHRwX2xlbiAtPSB2bmV0X2hkcl9zejtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1NC1cdFx0XHRpZiAodHBfbGVuIFx1MDAzYyAwKSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODU3LVx0XHRcdH1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1ODpcdFx0XHRtZW1jcHkoXHUwMDI2dm5ldF9oZHIsIGRhdGEgLSB2bmV0X2hkcl9zeiwgc2l6ZW9mKHZuZXRfaGRyKSk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTktXHRcdFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODgzLVx0XHQgICAgdHBfbGVuIFx1MDAzZSBkZXYtXHUwMDNlbXR1ICYjNDM7IHJlc2VydmUgXHUwMDI2XHUwMDI2XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4ODQ6XHRcdCAgICAhdm5ldF9oZHJfc3ogXHUwMDI2XHUwMDI2XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4ODUtXHRcdCAgICAhcGFja2V0X2V4dHJhX3ZsYW5fbGVuX2FsbG93ZWQoZGV2LCBza2IpKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk3NT1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk4Ny1cdHN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyOTg4Olx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHBvLVx1MDAzZXZuZXRfaGRyX3N6KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk4OS1cdGludCBoYXJkX2hlYWRlcl9sZW4sIGhsZW4sIHRsZW4sIGxpbmVhcjtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMzEtXHRcdHJlc2VydmUgPSBoYXJkX2hlYWRlcl9sZW47XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMzI6XHRpZiAodm5ldF9oZHJfc3opIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzAzMzpcdFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXHUwMDI2bGVuLCBcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDM0LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEwNC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEwNTpcdGlmICh2bmV0X2hkcl9zeikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTA2LVx0XHRlcnIgPSB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEwOC1cdFx0XHRnb3RvIG91dF9mcmVlO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTA5Olx0XHRsZW4gJiM0Mzs9IHZuZXRfaGRyX3N6O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTEwLVx0XHR2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc2tiLCBcdTAwMjZ2bmV0X2hkcik7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ2PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQ1MS1cdGludCBjb3BpZWQsIGVycjtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQ1MjpcdGludCB2bmV0X2hkcl9sZW4gPSBSRUFEX09OQ0UocGt0X3NrKHNrKS1cdTAwM2V2bmV0X2hkcl9zeik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTM0NTMtXHR1bnNpZ25lZCBpbnQgb3JpZ2xlbiA9IDA7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zODE3PXBhY2tldF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MDA0LVx0XHR9IGVsc2Uge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MDA1Olx0XHRcdFdSSVRFX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3osIGhkcl9sZW4pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MDA2LVx0XHRcdHJldCA9IDA7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00MDg5PXN0YXRpYyBpbnQgcGFja2V0X2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQxMzYtXHRjYXNlIFBBQ0tFVF9WTkVUX0hEUjpcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDEzNzpcdFx0dmFsID0gISFSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTM4LVx0XHRicmVhaztcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDEzOS1cdGNhc2UgUEFDS0VUX1ZORVRfSERSX1NaOlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MTQwOlx0XHR2YWwgPSBSRUFEX09OQ0UocG8tXHUwMDNldm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTQxLVx0XHRicmVhaztcbi0tXG5uZXQvcGFja2V0L2RpYWcuYz0xMz1zdGF0aWMgaW50IHBkaWFnX3B1dF9pbmZvKGNvbnN0IHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpubHNrYilcbi0tXG5uZXQvcGFja2V0L2RpYWcuYy0yOS1cdFx0cGluZm8ucGRpX2ZsYWdzIHw9IFBESV9PUklHREVWO1xubmV0L3BhY2tldC9kaWFnLmM6MzA6XHRpZiAoUkVBRF9PTkNFKHBvLVx1MDAzZXZuZXRfaGRyX3N6KSlcbm5ldC9wYWNrZXQvZGlhZy5jLTMxLVx0XHRwaW5mby5wZGlfZmxhZ3MgfD0gUERJX1ZORVRIRFI7XG4tLVxubmV0L3BhY2tldC9pbnRlcm5hbC5oPTEwND1zdHJ1Y3QgcGFja2V0X3NvY2sge1xuLS1cbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC0xMTUtXHRpbnRcdFx0XHRpZmluZGV4O1x0LyogYm91bmQgZGV2aWNlXHRcdCovXG5uZXQvcGFja2V0L2ludGVybmFsLmg6MTE2Olx0dThcdFx0XHR2bmV0X2hkcl9zejtcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC0xMTctXHRfX2JlMTZcdFx0XHRudW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjA3CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDc3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQUZfUEFDS0VUIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgZGlmZiBvbmx5IHRvdWNoZXMgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydDsgaXQga2VlcHMgdGhpbmdzIGZvY3VzZWQuIFRoZSBjb2RlIGFkZHMgYF9fY2xlYXJfYml0YCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgdHBhY2tldF9yY3ZgLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIHZpcnRpbyBuZXQgaGVhZGVyIGFuZCB2ZXJzaW9ucyBgVFBBQ0tFVF9WMWAgb3IgYFRQQUNLRVRfVjJgLiBUaGlzIGltcGxpZXMgYSBmaXggZm9yIHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCBjbGVhcmluZyB0aGUgYHJ4X293bmVyX21hcGAgYml0IGluIGNhc2UgdGhlIGhlYWRlciBwYXJzaW5nIGZhaWxzLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcmluZyBidWZmZXIgbWFuYWdlbWVudC4KCk5vdywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHNldHVwPyBBYnNvbHV0ZWx5LiBgQUZfUEFDS0VUYCBzb2NrZXRzIGFyZSBicmVhZCBhbmQgYnV0dGVyIGZvciBhbnkgTGludXggbmV0d29ya2luZyBleHBlcnQsIGFuZCBlc3BlY2lhbGx5IGZvciBzb21lb25lIGxpa2UgbWUgd2hvIGlzIGludm9sdmVkIGluIGZ1enppbmcuIEkga25vdyBzeXprYWxsZXIgaGl0cyB0aGlzIGNvZGUgcGF0aCBhbGwgdGhlIHRpbWUuIFVzZXJzcGFjZSBjcmVhdGVzIHRoZXNlIHNvY2tldHMsIHNldHMgdXAgdGhlIHJpbmcgYnVmZmVyIHVzaW5nIGBQQUNLRVRfUlhfUklOR2Agd2l0aCBlaXRoZXIgYFRQQUNLRVRfVjFgIG9yIGBUUEFDS0VUX1YyYCwgYW5kIGVuYWJsZXMgYFBBQ0tFVF9WTkVUX0hEUmAuIFRoYXQmIzM5O3MgYWxsIHN0YW5kYXJkLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYHRwYWNrZXRfcmN2YCBpcyBkaXJlY3RseSBpbnZvbHZlZCwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKRG9lcyB0aGlzIHRvdWNoIGFueSBjb3JlIHN1YnN5c3RlbXM/IFl1cCwgaXQmIzM5O3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBgYWZfcGFja2V0LmNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbC4KCklzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHRoZSBmdW5jdGlvbiBgdHBhY2tldF9yY3ZgLCBmb2N1c2luZyBvbiByaW5nIGJ1ZmZlciBiZWhhdmlvciBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgKGByeF9vd25lcl9tYXBgKS4gSSBrbm93IHRoYXQgZXJyb3JzIGluIHJpbmcgYnVmZmVyIGhhbmRsaW5nIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBjb25jdXJyZW5jeSBwcm9ibGVtcyBhbmQgZXZlbiBtZW1vcnkgY29ycnVwdGlvbiwgc28gdmVyaWZ5aW5nIHRoaXMgZml4IGlzIGNydWNpYWwuIFRoZSBgRm9jdXNTeW1ib2xzYCBvZiBgdHBhY2tldF9yY3ZgIGFuZCBgcGFja2V0X3NldF9yaW5nYCBjb25maXJtIHRoaXMuCgpGaW5hbGx5LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGBQQUNLRVRgIGlzIGFsbCB0aGF0JiMzOTtzIG5lZWRlZC4gSSBqdXN0IGRvdWJsZS1jaGVja2VkIHRoYXQgYFBBQ0tFVGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBgTkVUYCBpcyB1bml2ZXJzYWwuIFNvLCBgUEFDS0VUYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIGVuYWJsaW5nIHdoYXQgd2UgbmVlZC4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0LiBUaGUgZml4IGlzIHdpdGhpbiBhIGNydWNpYWwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIGlzIHJlYWRpbHkgcmVhY2hhYmxlLCBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcHJldmVudCByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHNvY2tldCByaW5nIGJ1ZmZlciBtYW5hZ2VtZW50LiBJJiMzOTttIGNhbGxpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RwYWNrZXRfcmN2JiMzNDssCiAgICAmIzM0O3BhY2tldF9zZXRfcmluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0cGFja2V0X3JjdigpIGluIG5ldC9wYWNrZXQvYWZfcGFja2V0LmMsIGVuc3VyaW5nIHRoYXQgdGhlIHNsb3QgaW4gcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFDS0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHBhY2tldF9yY3YmIzM0OywKICAgICYjMzQ7cGFja2V0X3NldF9yaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCBpcyBjbGVhcmVkIHdoZW4gdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKSBmYWlscyBmb3IgVFBBQ0tFVF9WMS9WMiByaW5ncy4gVGhpcyBjb2RlIGlzIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9QQUNLRVQgc29ja2V0cyBjb25maWd1cmVkIHdpdGggUEFDS0VUX1JYX1JJTkcgYW5kIFBBQ0tFVF9WTkVUX0hEUi4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgc2xvdCBvd25lcnNoaXAgdHJhY2tpbmcsIHJpbmcgbWFuYWdlbWVudCwgYW5kIHBhY2tldCBkcm9wIGFjY291bnRpbmcgYmVoYXZlIGNvcnJlY3RseSB1bmRlciBtYWxmb3JtZWQgcGFja2V0IGFuZCBlcnJvciBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBgdHBhY2tldF9yY3YoKWAgd2hlcmUgZmFpbHVyZSBpbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKWAgY2xlYW5lZCB1cCBibG9jayBzdGF0ZSBvbmx5IGZvciBgVFBBQ0tFVF9WM2AsIG9taXR0aW5nIGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcClgIGZvciBgVFBBQ0tFVF9WMWAgYW5kIGBUUEFDS0VUX1YyYC5cblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIChpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBqdW1wcyB0byBgZHJvcF9uX2FjY291bnRgKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgKGBzbG90X2lkYCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBleHBsaWNpdGx5IGFzc2lnbmVkIGBwby1cdTAwM2VyeF9yaW5nLmhlYWRgLCBhbmQgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBiaXRtYXBfYWxsb2NgKS5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYWxyZWFkeSBjb3ZlciBhbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggYml0bWFwIGJvdW5kcyBvciBwb2ludGVyIHZhbGlkaXR5LlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OTBjNTQxYTI0MjY3ZWIyNDFjMjk2N2I0NTVlZDNhMDIyZTA0MTA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCA3NmJkZTc5MDZkNDk0Li41MGNhZTMyYWUyNjkyIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTIzODQsNyAmIzQzOzIzODQsOSBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgJiM0MzsgbWFjb2ZmIC0KIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciksCiAJCQkJICAgIHZpb19sZSgpLCB0cnVlLCAwKSkgewotCQlpZiAocG8tJmd0O3RwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMykKJiM0MzsJCWlmIChwby0mZ3Q7dHBfdmVyc2lvbiAmbHQ7PSBUUEFDS0VUX1YyKQomIzQzOwkJCV9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLSZndDtyeF9yaW5nLnJ4X293bmVyX21hcCk7CiYjNDM7CQllbHNlCiAJCQlwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKCZhbXA7cG8tJmd0O3J4X3JpbmcpOwogCQlnb3RvIGRyb3Bfbl9hY2NvdW50OwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBhIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBwYXRjaCB0byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgbmVjZXNzaXRhdGVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNvdmVyYWdlLiBUaGlzIGZlZWxzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZGVmZW5zaXZlIGFuYWx5c2lzLCBhIFFBL3Nhbml0aXplciBldmFsdWF0aW9uIHRhc2s7IGl0JiMzOTtzIGJlbmlnbiwgcHVyZWx5IGRlZmVuc2l2ZSBpbiBuYXR1cmUsIG5vIG9mZmVuc2l2ZSBwYXlsb2FkcyBvciBleHBsb2l0IGFuYWx5c2lzIGFyZSByZXF1aXJlZC4gR29vZC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZGlmZiBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgYFRQQUNLRVRfVjNgIGFuZCB0aGUgY2xlYXJpbmcgb2YgYSBiaXQgd2l0aGluIHRoZSBgcnhfb3duZXJfbWFwYCBvciBhIGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBjYWxsLCBiYXNlZCBvbiB0aGUgYHBvLSZndDt0cF92ZXJzaW9uYC4gSXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgYSBidWcgb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gcGFja2V0IHJlY2VwdGlvbiBpbiBkaWZmZXJlbnQgVFBBQ0tFVCB2ZXJzaW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGB2aXJ0aW9fbmV0X2hkcmAuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzODQuIEkmIzM5O2xsIHVzZSBteSB0b29scyB0byByZWFkIHRoZSBmaWxlIG9yIGdyZXAgZm9yIHRoZSByZWxldmFudCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB0aGUgcG90ZW50aWFsIHJpc2sgc3VyZmFjZXMgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHVzZXItc3VwcGxpZWQgZGF0YSB0aGF0IGNvdWxkIGxlYWQgdG8gS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGByeF9vd25lcl9tYXBgIGlzIGFuZCB3aGF0IGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBkb2VzLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIEtNU0FOIGZ1enppbmcgaXMgbGlrZWx5IHRvIGJlIGJlbmVmaWNpYWwuIElmIGl0JiMzOTtzIGEgY3JpdGljYWwgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgdXNlci1zdXBwbGllZCBkYXRhLCB0aGUgS01TQU4gc2Vzc2lvbiB3aWxsIGJlIHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYwOlx0XHRcdG52YWwgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuIC0gbWFjb2ZmO1xuMjM2MTpcdFx0XHRwcl9lcnJfb25jZShcJiMzNDt0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxuXCYjMzQ7LFxuMjM2MjpcdFx0XHRcdCAgICBzbmFwbGVuLCBudmFsLCBtYWNvZmYpO1xuMjM2MzpcdFx0XHRzbmFwbGVuID0gbnZhbDtcbjIzNjQ6XHRcdFx0aWYgKHVubGlrZWx5KChpbnQpc25hcGxlbiBcdTAwM2MgMCkpIHtcbjIzNjU6XHRcdFx0XHRzbmFwbGVuID0gMDtcbjIzNjY6XHRcdFx0XHRtYWNvZmYgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuO1xuMjM2NzpcdFx0XHRcdHZuZXRfaGRyX3N6ID0gMDtcbjIzNjg6XHRcdFx0fVxuMjM2OTpcdFx0fVxuMjM3MDpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4yMzcxOlx0XHRoLnJhdyA9IHBhY2tldF9jdXJyZW50X3J4X2ZyYW1lKHBvLCBza2IsXG4yMzcyOlx0XHRcdFx0XHRcdFRQX1NUQVRVU19LRVJORUwsIChtYWNvZmYmIzQzO3NuYXBsZW4pKTtcbjIzNzM6XHRcdGlmICghaC5yYXcpXG4yMzc0Olx0XHRcdGdvdG8gZHJvcF9uX2FjY291bnQ7XG4yMzc1Olx0XG4yMzc2Olx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpIHtcbjIzNzc6XHRcdFx0c2xvdF9pZCA9IHBvLVx1MDAzZXJ4X3JpbmcuaGVhZDtcbjIzNzg6XHRcdFx0aWYgKHRlc3RfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcbjIzNzk6XHRcdFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuMjM4MDpcdFx0XHRfX3NldF9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xuMjM4MTpcdFx0fVxuMjM4MjpcdFxuMjM4MzpcdFx0aWYgKHZuZXRfaGRyX3N6IFx1MDAyNlx1MDAyNlxuMjM4NDpcdFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgJiM0MzsgbWFjb2ZmIC1cbjIzODU6XHRcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcbjIzODY6XHRcdFx0XHRcdCAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHtcbjIzODc6XHRcdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKVxuMjM4ODpcdFx0XHRcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbjIzODk6XHRcdFx0ZWxzZVxuMjM5MDpcdFx0XHRcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG4yMzkxOlx0XHRcdGdvdG8gZHJvcF9uX2FjY291bnQ7XG4yMzkyOlx0XHR9XG4yMzkzOlx0XG4yMzk0Olx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpIHtcbjIzOTU6XHRcdFx0cGFja2V0X2luY3JlbWVudF9yeF9oZWFkKHBvLCBcdTAwMjZwby1cdTAwM2VyeF9yaW5nKTtcbjIzOTY6XHRcdC8qXG4yMzk3Olx0XHQgKiBMT1NJTkcgd2lsbCBiZSByZXBvcnRlZCB0aWxsIHlvdSByZWFkIHRoZSBzdGF0cyxcbjIzOTg6XHRcdCAqIGJlY2F1c2UgaXQmIzM5O3MgQ09SIC0gQ2xlYXIgT24gUmVhZC5cbjIzOTk6XHRcdCAqIEFueXdheXMsIG1vdmluZyBpdCBmb3IgVjEvVjIgb25seSBhcyBWMyBkb2VzbiYjMzk7dCBuZWVkIHRoaXNcbjI0MDA6XHRcdCAqIGF0IHBhY2tldCBsZXZlbC5cbjI0MDE6XHRcdCAqL1xuMjQwMjpcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2cG8tXHUwMDNldHBfZHJvcHMpKVxuMjQwMzpcdFx0XHRcdHN0YXR1cyB8PSBUUF9TVEFUVVNfTE9TSU5HO1xuMjQwNDpcdFx0fVxuMjQwNTpcdFxuMjQwNjpcdFx0cG8tXHUwMDNlc3RhdHMuc3RhdHMxLnRwX3BhY2tldHMmIzQzOyYjNDM7O1xuMjQwNzpcdFx0aWYgKGNvcHlfc2tiKSB7XG4yNDA4Olx0XHRcdHN0YXR1cyB8PSBUUF9TVEFUVVNfQ09QWTtcbjI0MDk6XHRcdFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoY29weV9za2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgU291cmNlIE1hdGVyaWFsKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gQmVmb3JlIEkgZXZlbiBhdHRlbXB0IHRvIHN1bW1hcml6ZSBvciB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gc3BlY2lmaWMgc2VjdGlvbnMgb2YgdGhpcyB0ZXh0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSB0ZXh0IHRoYXQgb2NjdXJzICpiZWZvcmUqIGxpbmUgMjM2MCBhbmQgKmFmdGVyKiBsaW5lIDI0MDkuIEJ5IGZvY3VzaW5nIG9uIHRoZXNlIGRlZmluZWQgYm91bmRhcmllcywgSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGxpbmVzIGluIHRoZSBtaWRkbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIGZvciBhIGNvbXBsZXRlIGFuZCBpbmZvcm1lZCBhc3Nlc3NtZW50IG9mIHRoZSBzdWJqZWN0IG1hdHRlci4gSXQmIzM5O3MgYSBjcml0aWNhbCBhbmFseXRpY2FsIHN0ZXAgYmVmb3JlIGRpdmluZyBpbnRvIGEgZGV0YWlsZWQgc3lub3BzaXMsIHJlYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzMwOlx0XHRpZiAobmV0b2ZmIFx1MDAzZSBVU0hSVF9NQVgpIHtcbjIzMzE6XHRcdFx0YXRvbWljX2luYyhcdTAwMjZwby1cdTAwM2V0cF9kcm9wcyk7XG4yMzMyOlx0XHRcdGdvdG8gZHJvcF9uX3Jlc3RvcmU7XG4yMzMzOlx0XHR9XG4yMzM0Olx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpIHtcbjIzMzU6XHRcdFx0aWYgKG1hY29mZiAmIzQzOyBzbmFwbGVuIFx1MDAzZSBwby1cdTAwM2VyeF9yaW5nLmZyYW1lX3NpemUpIHtcbjIzMzY6XHRcdFx0XHRpZiAoUkVBRF9PTkNFKHBvLVx1MDAzZWNvcHlfdGhyZXNoKSBcdTAwMjZcdTAwMjZcbjIzMzc6XHRcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuMjMzODpcdFx0XHRcdFx0aWYgKHNrYl9zaGFyZWQoc2tiKSkge1xuMjMzOTpcdFx0XHRcdFx0XHRjb3B5X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuMjM0MDpcdFx0XHRcdFx0fSBlbHNlIHtcbjIzNDE6XHRcdFx0XHRcdFx0Y29weV9za2IgPSBza2JfZ2V0KHNrYik7XG4yMzQyOlx0XHRcdFx0XHRcdHNrYl9oZWFkID0gc2tiLVx1MDAzZWRhdGE7XG4yMzQzOlx0XHRcdFx0XHR9XG4yMzQ0Olx0XHRcdFx0XHRpZiAoY29weV9za2IpIHtcbjIzNDU6XHRcdFx0XHRcdFx0bWVtc2V0KFx1MDAyNlBBQ0tFVF9TS0JfQ0IoY29weV9za2IpLVx1MDAzZXNhLmxsLCAwLFxuMjM0NjpcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKFBBQ0tFVF9TS0JfQ0IoY29weV9za2IpLVx1MDAzZXNhLmxsKSk7XG4yMzQ3Olx0XHRcdFx0XHRcdHNrYl9zZXRfb3duZXJfcihjb3B5X3NrYiwgc2spO1xuMjM0ODpcdFx0XHRcdFx0fVxuMjM0OTpcdFx0XHRcdH1cbjIzNTA6XHRcdFx0XHRzbmFwbGVuID0gcG8tXHUwMDNlcnhfcmluZy5mcmFtZV9zaXplIC0gbWFjb2ZmO1xuMjM1MTpcdFx0XHRcdGlmICgoaW50KXNuYXBsZW4gXHUwMDNjIDApIHtcbjIzNTI6XHRcdFx0XHRcdHNuYXBsZW4gPSAwO1xuMjM1MzpcdFx0XHRcdFx0dm5ldF9oZHJfc3ogPSAwO1xuMjM1NDpcdFx0XHRcdH1cbjIzNTU6XHRcdFx0fVxuMjM1NjpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShtYWNvZmYgJiM0Mzsgc25hcGxlbiBcdTAwM2VcbjIzNTc6XHRcdFx0XHQgICAgR0VUX1BCRFFDX0ZST01fUkIoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyktXHUwMDNlbWF4X2ZyYW1lX2xlbikpIHtcbjIzNTg6XHRcdFx0dTMyIG52YWw7XG4yMzU5Olx0XG4yMzYwOlx0XHRcdG52YWwgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuIC0gbWFjb2ZmO1xuMjM2MTpcdFx0XHRwcl9lcnJfb25jZShcJiMzNDt0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxuXCYjMzQ7LFxuMjM2MjpcdFx0XHRcdCAgICBzbmFwbGVuLCBudmFsLCBtYWNvZmYpO1xuMjM2MzpcdFx0XHRzbmFwbGVuID0gbnZhbDtcbjIzNjQ6XHRcdFx0aWYgKHVubGlrZWx5KChpbnQpc25hcGxlbiBcdTAwM2MgMCkpIHtcbjIzNjU6XHRcdFx0XHRzbmFwbGVuID0gMDtcbjIzNjY6XHRcdFx0XHRtYWNvZmYgPSBHRVRfUEJEUUNfRlJPTV9SQihcdTAwMjZwby1cdTAwM2VyeF9yaW5nKS1cdTAwM2VtYXhfZnJhbWVfbGVuO1xuMjM2NzpcdFx0XHRcdHZuZXRfaGRyX3N6ID0gMDtcbjIzNjg6XHRcdFx0fVxuMjM2OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGFja2V0IFJlY2VpdmUgSXNzdWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGB0cGFja2V0X3JjdmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMzc2LiBJIHNlZSBhIGNvbmRpdGlvbmFsIGJsb2NrIGhlcmUgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZywgaGFuZGxpbmcgYFRQQUNLRVRfVjJgIGFuZCBlYXJsaWVyIHZlcnNpb25zLiBUaGUgaW5pdGlhbCBjaGVjayBpbnZvbHZlcyBgcG8tJmd0O3J4X3JpbmcuaGVhZGAgYW5kIGByeF9vd25lcl9tYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzbG90IGlzbiYjMzk7dCBhbHJlYWR5IGNsYWltZWQuIElmIGl0IGlzLCBgZHJvcF9uX2FjY291bnRgIGlzIGNhbGxlZCBpbW1lZGlhdGVseS4gSWYgbm90LCB0aGUgYml0IHJlcHJlc2VudGluZyBvd25lcnNoaXAgaXMgc2V0LgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgLiBUaGlzIGxpa2VseSBoYW5kbGVzIHRoZSBWaXJ0SU8gbmV0d29yayBoZWFkZXIgYW5kIGl0cyBleHRyYWN0aW9uIGZyb20gdGhlIFNLQi4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgY29uZGl0aW9uOiBpZiB0aGlzIGhlYWRlciBleHRyYWN0aW9uIGZhaWxzLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBvd25lcnNoaXAgYml0IGluIG9sZGVyIHZlcnNpb25zIChgVFBBQ0tFVF9WMmAgb3IgZWFybGllciksIG9yIGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBmb3IgbmV3ZXIgdmVyc2lvbnMuIFRoaXMgbWFrZXMgc2Vuc2U7IGlmIHdlIGNhbiYjMzk7dCBwcm9wZXJseSBwcm9jZXNzIHRoZSBoZWFkZXIsIHdlIGNhbiYjMzk7dCB1c2UgdGhpcyByaW5nIGJ1ZmZlciwgYW5kIG11c3QgcmVsZWFzZSBpdC4gVGhlIGNvZGUgdGhlbiBjYWxscyBgZHJvcF9uX2FjY291bnRgLgoKTm93LCBsZXQgbWUgZ28gYmFjayBhIG1vbWVudCBhbmQgbG9vayBhdCB0aGUgJiMzNDtiZWZvcmUmIzM0OyB2ZXJzaW9uIG9mIHRoZSBjb2RlLCB3aGljaCBzZWVtcyB0byBpbXBseSB0aGlzIGJsb2NrIHdhcyBhZGRlZC4gUHJldmlvdXNseSwgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCBibG9jayB3YXMgb25seSBkaWZmZXJlbnQgZm9yIGBUUEFDS0VUX1YzYC4gSSBoYXZlIGEgZmVlbGluZyB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgdGhhdCB0aGlzIG5ldyBjaGFuZ2UgYXR0ZW1wdGVkIHRvIGFkZHJlc3MuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBnaXQgaGlzdG9yeSBvZiB0aGlzIGNvbW1pdCwgb3IgYmV0dGVyIHlldCwgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYHJ4X293bmVyX21hcGAgaW4gdGhlIGdpdCBsb2cgdG8gZ2V0IHRoZSBmdWxsIHN0b3J5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgdGhlIHNwZWNpZmljIHByb2JsZW0gaXQgYWltZWQgdG8gcmVzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhfb3duZXJfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzctXHRcdHNsb3RfaWQgPSBwby1cdTAwM2VyeF9yaW5nLmhlYWQ7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNzg6XHRcdGlmICh0ZXN0X2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCkpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzktXHRcdFx0Z290byBkcm9wX25fYWNjb3VudDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM4MDpcdFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4MS1cdH1cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODctXHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM4ODpcdFx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXHRcdGVsc2Vcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MDYtXHRcdF9fcGFja2V0X3NldF9zdGF0dXMocG8sIGgucmF3LCBzdGF0dXMpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTA3Olx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MDgtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NTE1PXN0YXRpYyBpbnQgcGFja2V0X3NldF9yaW5nKHN0cnVjdCBzb2NrICpzaywgdW5pb24gdHBhY2tldF9yZXFfdSAqcmVxX3UsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NTE5LVx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ1MjA6XHR1bnNpZ25lZCBsb25nICpyeF9vd25lcl9tYXAgPSBOVUxMO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NTIxLVx0aW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjA2LVx0XHRcdGlmICghdHhfcmluZykge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA3Olx0XHRcdFx0cnhfb3duZXJfbWFwID0gYml0bWFwX2FsbG9jKHJlcS1cdTAwM2V0cF9mcmFtZV9ucixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYwOC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA5Olx0XHRcdFx0aWYgKCFyeF9vd25lcl9tYXApXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MTAtXHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWVfcGdfdmVjO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0NC1cdFx0aWYgKHBvLVx1MDAzZXRwX3ZlcnNpb24gXHUwMDNjPSBUUEFDS0VUX1YyKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjQ1Olx0XHRcdHN3YXAocmItXHUwMDNlcnhfb3duZXJfbWFwLCByeF9vd25lcl9tYXApO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ2LVx0XHRyYi1cdTAwM2VmcmFtZV9tYXggPSAocmVxLVx1MDAzZXRwX2ZyYW1lX25yIC0gMSk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjgyLVx0aWYgKHBnX3ZlYykge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjgzOlx0XHRiaXRtYXBfZnJlZShyeF9vd25lcl9tYXApO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00Njg0LVx0XHRpZiAodHhfcmluZyBcdTAwMjZcdTAwMjYgY2xvc2luZylcbi0tXG5uZXQvcGFja2V0L2ludGVybmFsLmg9NTQ9c3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciB7XG4tLVxubmV0L3BhY2tldC9pbnRlcm5hbC5oLTY4LVx0dW5pb24ge1xubmV0L3BhY2tldC9pbnRlcm5hbC5oOjY5Olx0XHR1bnNpZ25lZCBsb25nXHRcdFx0KnJ4X293bmVyX21hcDtcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC03MC1cdFx0c3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlXHRwcmJfYmRxYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVFBBQ0tFVCB2MS92MiBQYWNrZXQgUmluZyBCdWZmZXIgTGVhayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9wYWNrZXQvaW50ZXJuYWwuaGAgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBwYWNrZXRfcmluZ19idWZmZXJgIHN0cnVjdC4gVGhlIHVuaW9uIHVzaW5nIGVpdGhlciBgcnhfb3duZXJfbWFwYCBvciBgcHJiX2JkcWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllIOKAkyBjbGFzc2ljIHZlcnNpb25pbmcgdHJpY2tlcnkuIGByeF9vd25lcl9tYXBgIGlzIGZvciBUUEFDS0VUX1YxIGFuZCBUUEFDS0VUX1YyLCB3aGlsZSBgcHJiX2JkcWNgIGlzIGZvciBWMy4gR290IGl0LgoKTm93LCBteSBjb25jZXJuIGlzIHRoaXMgYHJ4X293bmVyX21hcGAgdXNhZ2UuIFRoZSBjb2RlJiMzOTtzIHNldHRpbmcgdGhlIGBzbG90X2lkYCBiaXQgaW4gYHJ4X293bmVyX21hcGAgaWYgdGhlIHBhY2tldCB2ZXJzaW9uIGlzIFYxIG9yIFYyLiBGaW5lLCBzbyBmYXIgc28gZ29vZCwgbGluZSAyMzgwLiBUaGUgcHJvYmxlbSBhcmlzZXMgaWYgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCAqZmFpbHMqLiBJbiB0aGF0IGNhc2UsIGxvb2shIE9yaWdpbmFsbHksIGZvciBWMSBhbmQgVjIsIHRoZSBjb2RlICpuZXZlciogY2xlYXJlZCB0aGUgYml0ISBUaGUgYF9fc2V0X2JpdGAgd2FzIGNhbGxlZCwgYnV0IGlmIHRoZSBoZWFkZXIgcGFyc2luZyBmYWlsZWQsIHRoZSBiaXQgc3RheWVkIHNldC4KClRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgbGVhaywgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uLiBUaGUgc2xvdCBzdGF5cyBtYXJrZWQgYXMgb3duZWQgZm9yZXZlciwgbWVhbmluZyBlaXRoZXIgdGhlIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgY29udGludW91c2x5LCBvciBhIHN0YWxlIHNsb3Qgb3duZXJzaGlwIHN0YXRlIGNvdWxkIGJlIHRyaWdnZXJlZC4KClNvLCB0aGlzIHBhdGNoLi4uIGFoLCBJIHNlZS4gSXQmIzM5O3MgY2xldmVybHkgYWRkcmVzc2luZyB0aGUgaXNzdWUuIFRoZSBkaWZmIHNob3dzIHRoYXQgbm93LCBpZiB0aGUgdmVyc2lvbiBpcyBWMSBvciBWMiwgdGhlIGNvZGUgKmRvZXMqIGNsZWFyIHRoZSBiaXQgd2l0aCBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tJmd0O3J4X3Jpbmcucnhfb3duZXJfbWFwKWAgaWYgdGhlIHZlcnNpb24gaXMgVjEgb3IgVjIgYmVmb3JlIGdvaW5nIHRvIGBkcm9wX25fYWNjb3VudGAuIE90aGVyd2lzZSwgaXQgdXNlcyBgcHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cygmYW1wO3BvLSZndDtyeF9yaW5nKWAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBiaXQgaXMgYWx3YXlzIGNsZWFyZWQgb24gZXJyb3IsIHByZXZlbnRpbmcgdGhlIG93bmVyc2hpcCBsZWFrLgoKVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIGNoZWNrIHRoZSBgc2xvdF9pZGAgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIGluIGB0cGFja2V0X3JjdmAgc3RhcnRpbmcgZnJvbSBsaW5lcyAyMjQ5IHRvIDIzODUgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIG5lZWRzIHRvIGJlIGJ1bGxldHByb29mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNDU6XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG4yMjQ2Olx0XHRyZXR1cm4gMDtcbjIyNDc6XHR9XG4yMjQ4Olx0XG4yMjQ5Olx0c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMjI1MDpcdFx0XHQgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuMjI1MTpcdHtcbjIyNTI6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0NPTlNVTUVEO1xuMjI1MzpcdFx0c3RydWN0IHNvY2sgKnNrID0gTlVMTDtcbjIyNTQ6XHRcdHN0cnVjdCBwYWNrZXRfc29jayAqcG87XG4yMjU1Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDtcbjIyNTY6XHRcdHVuaW9uIHRwYWNrZXRfdWhkciBoO1xuMjI1NzpcdFx0dTggKnNrYl9oZWFkID0gc2tiLVx1MDAzZWRhdGE7XG4yMjU4Olx0XHRpbnQgc2tiX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4yMjU5Olx0XHR1bnNpZ25lZCBpbnQgc25hcGxlbiwgcmVzO1xuMjI2MDpcdFx0dW5zaWduZWQgbG9uZyBzdGF0dXMgPSBUUF9TVEFUVVNfVVNFUjtcbjIyNjE6XHRcdHVuc2lnbmVkIHNob3J0IG1hY29mZiwgaGRybGVuO1xuMjI2MjpcdFx0dW5zaWduZWQgaW50IG5ldG9mZjtcbjIyNjM6XHRcdHN0cnVjdCBza19idWZmICpjb3B5X3NrYiA9IE5VTEw7XG4yMjY0Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbjIyNjU6XHRcdF9fdTMyIHRzX3N0YXR1cztcbjIyNjY6XHRcdHVuc2lnbmVkIGludCBzbG90X2lkID0gMDtcbjIyNjc6XHRcdGludCB2bmV0X2hkcl9zeiA9IDA7XG4yMjY4Olx0XG4yMjY5Olx0XHQvKiBzdHJ1Y3QgdHBhY2tldHsyLDN9X2hkciBpcyBhbGlnbmVkIHRvIGEgbXVsdGlwbGUgb2YgVFBBQ0tFVF9BTElHTk1FTlQuXG4yMjcwOlx0XHQgKiBXZSBtYXkgYWRkIG1lbWJlcnMgdG8gdGhlbSB1bnRpbCBjdXJyZW50IGFsaWduZWQgc2l6ZSB3aXRob3V0IGZvcmNpbmdcbjIyNzE6XHRcdCAqIHVzZXJzcGFjZSB0byBjYWxsIGdldHNvY2tvcHQoLi4uLCBQQUNLRVRfSERSTEVOLCAuLi4pLlxuMjI3MjpcdFx0ICovXG4yMjczOlx0XHRCVUlMRF9CVUdfT04oVFBBQ0tFVF9BTElHTihzaXplb2YoKmguaDIpKSAhPSAzMik7XG4yMjc0Olx0XHRCVUlMRF9CVUdfT04oVFBBQ0tFVF9BTElHTihzaXplb2YoKmguaDMpKSAhPSA0OCk7XG4yMjc1Olx0XG4yMjc2Olx0XHRpZiAoc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSylcbjIyNzc6XHRcdFx0Z290byBkcm9wO1xuMjI3ODpcdFxuMjI3OTpcdFx0c2sgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbjIyODA6XHRcdHBvID0gcGt0X3NrKHNrKTtcbjIyODE6XHRcbjIyODI6XHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgc29ja19uZXQoc2spKSlcbjIyODM6XHRcdFx0Z290byBkcm9wO1xuMjI4NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGBzbG90X2lkYCBpbml0aWFsaXplZCB0byAwLiBJZiB0aGUgcGFja2V0IHR5cGUgaXMgb2xkIChgcG8tJmd0O3RwX3ZlcnNpb24gJmx0Oz0gVFBBQ0tFVF9WMmApLCBgc2xvdF9pZGAgZ2V0cyB1cGRhdGVkIHRvIGBwby0mZ3Q7cnhfcmluZy5oZWFkYCwgYW5kIHdlIHNldCBhIGJpdCBpbiBgcnhfb3duZXJfbWFwYCB1c2luZyBgX19zZXRfYml0YC4gTm93LCBpZiB3ZSBoaXQgYW4gZXJyb3IgbGF0ZXIsIHdlIG5lZWQgdG8gY2xlYXIgdGhhdCBiaXQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyBgc2xvdF9pZGAgdXNlZCB3aXRob3V0IGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgbG9va2luZyBhdCB0aGUgY29kZSwgaW4gdGhlIGVycm9yIHBhdGgsIGlmIHRoZSBwYWNrZXQgdHlwZSBpcyBvbGQsIHdlICpjbGVhciogdGhlIGJpdCB3ZSBwcmV2aW91c2x5ICpzZXQqICh1c2luZyBgX19jbGVhcl9iaXRgKS4gSWYgaXQmIzM5O3MgYFRQQUNLRVRfVjNgLCBhIGRpZmZlcmVudCBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmVzZXQgdGhlIGZpbGwgc3RhdHVzLCBzbyBubyBiaXQgaXMgY2xlYXJlZC4KClNvLCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHdoZXJlIHBvdGVudGlhbCBwcm9ibGVtcyAqY291bGQqIG9jY3VyLiBGaXJzdCwgd2hhdCBkb2VzIHRoaXMgYml0IGluIHRoZSBgcnhfb3duZXJfbWFwYCBldmVuICptZWFuKj8gT2theSwgSSByZWNhbGwgaXQmIzM5O3MgdXNlZCB0byB0cmFjayBvd25lcnNoaXAgb2YgcmluZyBidWZmZXIgc2xvdHMuIEluIHRoZSBlcnJvciBwYXRoLCB3ZSBhcmUgKnJlbGVhc2luZyogb3duZXJzaGlwLiBJZiB0aGUgcGFja2V0IHR5cGUgaXMgb2xkICgmbHQ7PSBWMiksIHRoZW4gd2UgY2xlYXIgdGhlIGJpdCB0byByZWxlYXNlIG93bmVyc2hpcC4KCkkgd2FzIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgS01TQU4gYW5kIEtBU0FOIHdvdWxkIGRldGVjdCBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWFkcyBhbmQgbGVha3MsIHdoaWxlIEtBU0FOIGlzIHRoZSBnby10byBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUuCgpEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBwcm9ibGVtcyBiYXNlZCBvbiB0aG9zZSBLQVNBTiAvIEtNU0FOIGNoZWNrcz8gV2VsbCwgbm90aGluZyYjMzk7cyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBmaWVsZC4gTm8gY29uZGl0aW9uYWwgbG9naWMgc2VlbXMgdG8gYmUgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UmIzM5O3JlIG5vdCBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIGVpdGhlci4gQW5kIHRoZXJlIGFyZSBubyBvYnZpb3VzIGJvdW5kcyBpc3N1ZXMgdGhhdCB3b3VsZCBjYXVzZSByZWFkL3dyaXRlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgY291bGQgYHJ4X293bmVyX21hcGAgYmUgTlVMTD8gTGV0JiMzOTtzIHRyYWNlIGl0IGJhY2sgdG8gYHBhY2tldF9zZXRfcmluZ2AuIEFoLCB5ZXMsIGl0JiMzOTtzIGFsbG9jYXRlZCB3aXRoIGBiaXRtYXBfYWxsb2NgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBfX0dGUF9aRVJPYC4gQW5kIHRoZSBjb2RlICpkb2VzKiBjaGVjayBmb3IgYSBOVUxMIGByeF9vd25lcl9tYXBgIGFmdGVyIHRoZSBhbGxvY2F0aW9uIGFuZCBqdW1wcyB0byBgb3V0X2ZyZWVfcGdfdmVjYCBpZiBpdCBpcyBudWxsLCBzbyBpdCYjMzk7cyBpbXBvc3NpYmxlIGZvciBgcnhfb3duZXJfbWFwYCB0byBiZSBudWxsLgoKQW5kLCBpZiBgc2xvdF9pZGAgaXMgb3V0IG9mIGJvdW5kcywgdGhhdCBzaG91bGQgYWxzbyBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4sIGFzIGl0IHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYml0IGFjY2Vzcy4gQW5kIGBzbG90X2lkYCBzaG91bGQgYmUgYm91bmQgYnkgYHBvLSZndDtyeF9yaW5nLmhlYWRgIGFuZCB0aGUgb3ZlcmFsbCByaW5nIHNpemUuIFNvIG5vLgoKTm93LCB3aGF0JiMzOTtzIHRoZSBhY3R1YWwgYnVnIHRoaXMgcGF0Y2ggZml4ZXM/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBoaXN0b3J5IGFuZCBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTk3Mj1zdGF0aWMgaW50IHByYl9xdWV1ZV9mcm96ZW4oc3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlICpwa2MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NzYtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjk3NzpzdGF0aWMgdm9pZCBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKHN0cnVjdCBwYWNrZXRfcmluZ19idWZmZXIgKnJiKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NzgtXHRfX3JlbGVhc2VzKFx1MDAyNnBrYy1cdTAwM2VibGtfZmlsbF9pbl9wcm9nX2xvY2spXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXHRcdGVsc2Vcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM5MDpcdFx0XHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzkxLVx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxMC1cdH0gZWxzZSBpZiAocG8tXHUwMDNldHBfdmVyc2lvbiA9PSBUUEFDS0VUX1YzKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1MTE6XHRcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZyk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MTItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTU2CgkJCQkJCQlvdXRwdXQ6IDI4MwoJCQkJCQkJdGhvdWdodHM6IDk1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBKdXN0aWZpY2F0aW9uIE5lZWRlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgYWRkcmVzc2luZyBhIGJ1ZyBpbiBgdHBhY2tldF9yY3YoKWAuIFNwZWNpZmljYWxseSwgd2hlbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGZhaWxzLCB0aGVyZSYjMzk7cyBhIGNsZWFudXAgb3ZlcnNpZ2h0LiBUaGUgb3JpZ2luYWwgY29kZSBvbmx5IGNsZWFyZWQgdGhlIGJsb2NrIHN0YXR1cyBmb3IgYFRQQUNLRVRfVjNgIHBhY2tldHMsIG5lZ2xlY3RpbmcgdG8gY2xlYXIgdGhlIG93bmVyc2hpcCBiaXQgaW4gYHBvLSZndDtyeF9yaW5nLnJ4X293bmVyX21hcGAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgIHBhY2tldHMuIFRoaXMgbWVhbnMgc2xvdHMgd2VyZSBnZXR0aW5nIGluY29ycmVjdGx5IG1hcmtlZCBhcyBvd25lZCwgZXZlbiBhZnRlciBhbiBlcnJvci4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIG93bmVyc2hpcCBiaXQgZ2V0cyBjbGVhcmVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHBhY2tldCB2ZXJzaW9uLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyByZXF1aXJlcyBhIEtNU0FOIGNoZWNrLiBMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGlzOgoKMS4gICoqV2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkPyoqIEl0JiMzOTtzIGEgY2xlYW51cCBwYXRoLiBXZSYjMzk7cmUgKnJlbW92aW5nKiBhIHBvdGVudGlhbCBtaXNzZWQgc3RlcCwgbm90IGludHJvZHVjaW5nIG5ldyBjb21wbGV4IGxvZ2ljIG9yIGFsbG9jYXRpb25zLgoKMi4gICoqTWVtb3J5IEFjY2VzczoqKiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiB0aGUgYml0IG9wZXJhdGlvbnMgb3IgaW5kZXhpbmcgaXNzdWVzIGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYgd291bGQgYmUgaW1tZWRpYXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoYXQmIzM5O3MgYSBzdHJvbmcgbGF5ZXIgb2YgcHJvdGVjdGlvbi4KCjMuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgaGVyZSDigJMgYHNsb3RfaWRgLCBgcG8tJmd0O3J4X3Jpbmcucnhfb3duZXJfbWFwYCwgYW5kIGBwby0mZ3Q7dHBfdmVyc2lvbmAg4oCTIGFyZSBhbGwgaW5pdGlhbGl6ZWQuIGBzbG90X2lkYCBpcyBkZXJpdmVkIGZyb20gYHBvLSZndDtyeF9yaW5nLmhlYWRgIHdoaWNoIGlzIGluaXRpYWxpemVkLiBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQgemVyb2VkIHdpdGggYGJpdG1hcF9hbGxvYyhfX0dGUF9aRVJPKWAuIFRoZSBwYXRjaCBpdHNlbGYgaXNuJiMzOTt0IGNyZWF0aW5nIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCYjMzk7cyBmaXhpbmcgYSBzdGF0ZSBjbGVhbnVwLiBGdXJ0aGVybW9yZSwgaW4gdGhlIGVycm9yIHBhdGgsIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIOKAkyB3ZSBhcmUgc2ltcGx5IGp1bXBpbmcgdG8gYGRyb3Bfbl9hY2NvdW50YCwgd2hpY2ggZG9lcyBub3QgdHJhbnNtaXQgaW5mb3JtYXRpb24gYmFjayB0byB0aGUgdXNlci4KCjQuICAqKktNU0FOIHZzIEtBU0FOOioqIFRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBmaW5kIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEdpdmVuIHRoYXQgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciB0aGF0IHRoZSB2YXJpYWJsZXMgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgZG9pbmcgYW55dGhpbmcgbW9yZSBjb21wbGV4IHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCB3b3VsZCByZXF1aXJlIG1vcmUgY2FyZWZ1bCBpbnNwZWN0aW9uIHRoYW4gS0FTQU4gcHJvdmlkZXMuCgpUaGVyZWZvcmUsIGFmdGVyIGFuYWx5emluZyB0aGlzLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgcGF0Y2ggaXMgcmVsYXRpdmVseSBzaW1wbGUsIGFuZCB0aGUgcG90ZW50aWFsIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgYXJlIHZlcnkgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgY2hlY2tzLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvci1oYW5kbGluZyBwYXRoIGluIGB0cGFja2V0X3JjdigpYCB3aGVyZSBmYWlsdXJlIGluIGB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYigpYCBjbGVhbmVkIHVwIGJsb2NrIHN0YXRlIG9ubHkgZm9yIGBUUEFDS0VUX1YzYCwgb21pdHRpbmcgYF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgKGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGp1bXBzIHRvIGBkcm9wX25fYWNjb3VudGApLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHNsb3RfaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGV4cGxpY2l0bHkgYXNzaWduZWQgYHBvLVx1MDAzZXJ4X3JpbmcuaGVhZGAsIGFuZCBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQgemVyby1pbml0aWFsaXplZCB2aWEgYGJpdG1hcF9hbGxvY2ApLlxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBhbHJlYWR5IGNvdmVyIGFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBiaXRtYXAgYm91bmRzIG9yIHBvaW50ZXIgdmFsaWRpdHkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApYCBmb3IgYFRQQUNLRVRfVjFgIGFuZCBgVFBBQ0tFVF9WMmAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSAoaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQganVtcHMgdG8gYGRyb3Bfbl9hY2NvdW50YCksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIChgc2xvdF9pZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgZXhwbGljaXRseSBhc3NpZ25lZCBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIGByeF9vd25lcl9tYXBgIGlzIGFsbG9jYXRlZCB6ZXJvLWluaXRpYWxpemVkIHZpYSBgYml0bWFwX2FsbG9jYCkuXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzoxNS41ODU4MDEwMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEzOTYxMjUwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHBhY2tldF9yY3ZcIixcbiAgICBcInBhY2tldF9zZXRfcmluZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBgdHBhY2tldF9yY3YoKWAgd2hlcmUgZmFpbHVyZSBpbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKWAgY2xlYW5lZCB1cCBibG9jayBzdGF0ZSBvbmx5IGZvciBgVFBBQ0tFVF9WM2AsIG9taXR0aW5nIGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApYCBmb3IgYFRQQUNLRVRfVjFgIGFuZCBgVFBBQ0tFVF9WMmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSAoaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQganVtcHMgdG8gYGRyb3Bfbl9hY2NvdW50YCksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIChgc2xvdF9pZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgZXhwbGljaXRseSBhc3NpZ25lZCBgcG8tXFx1MDAzZXJ4X3JpbmcuaGVhZGAsIGFuZCBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQgemVyby1pbml0aWFsaXplZCB2aWEgYGJpdG1hcF9hbGxvY2ApLlxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYWxyZWFkeSBjb3ZlciBhbnkgbWVtb3J5IHNhZmV0eSByaXNrcyBhc3NvY2lhdGVkIHdpdGggYml0bWFwIGJvdW5kcyBvciBwb2ludGVyIHZhbGlkaXR5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0cGFja2V0X3JjdigpIGluIG5ldC9wYWNrZXQvYWZfcGFja2V0LmMsIGVuc3VyaW5nIHRoYXQgdGhlIHNsb3QgaW4gcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwIGlzIGNsZWFyZWQgd2hlbiB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYigpIGZhaWxzIGZvciBUUEFDS0VUX1YxL1YyIHJpbmdzLiBUaGlzIGNvZGUgaXMgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzIGNvbmZpZ3VyZWQgd2l0aCBQQUNLRVRfUlhfUklORyBhbmQgUEFDS0VUX1ZORVRfSERSLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhhdCBzbG90IG93bmVyc2hpcCB0cmFja2luZywgcmluZyBtYW5hZ2VtZW50LCBhbmQgcGFja2V0IGRyb3AgYWNjb3VudGluZyBiZWhhdmUgY29ycmVjdGx5IHVuZGVyIG1hbGZvcm1lZCBwYWNrZXQgYW5kIGVycm9yIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjE1LjU4NTgwNTgxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MjY2MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODkwYzU0MWEyNDI2N2ViMjQxYzI5NjdiNDU1ZWQzYTAyMmUwNDEwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDozMzoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbmluZGV4IDc2YmRlNzkwNmQ0OTQuLjUwY2FlMzJhZTI2OTIgMTAwNjQ0XFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xcbisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG5AQCAtMjM4NCw3ICsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyArIG1hY29mZiAtXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcXG4gXFx0XFx0XFx0XFx0ICAgIHZpb19sZSgpLCB0cnVlLCAwKSkge1xcbi1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMylcXG4rXFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpXFxuK1xcdFxcdFxcdF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxuK1xcdFxcdGVsc2VcXG4gXFx0XFx0XFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpO1xcbiBcXHRcXHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjE2LjAyNDY2MzEwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc3MjkwNjYzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHBhY2tldF9yY3ZcIixcbiAgICBcInBhY2tldF9zZXRfcmluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OTBjNTQxYTI0MjY3ZWIyNDFjMjk2N2I0NTVlZDNhMDIyZTA0MTA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MzM6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuaW5kZXggNzZiZGU3OTA2ZDQ5NC4uNTBjYWUzMmFlMjY5MiAxMDA2NDRcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbkBAIC0yMzg0LDcgKzIzODQsOSBAQCBzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyArIG1hY29mZiAtXG4gXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciksXG4gXHRcdFx0XHQgICAgdmlvX2xlKCksIHRydWUsIDApKSB7XG4tXHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uID09IFRQQUNLRVRfVjMpXG4rXHRcdGlmIChwby1cdTAwM2V0cF92ZXJzaW9uIFx1MDAzYz0gVFBBQ0tFVF9WMilcbitcdFx0XHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XG4rXHRcdGVsc2VcbiBcdFx0XHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFx1MDAyNnBvLVx1MDAzZXJ4X3JpbmcpO1xuIFx0XHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6MTYuMDI0NjY0OTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk5NTc4NDI1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBiZWluZyBjaGFuZ2VkLiBTbywgbXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0LiBJJ20gZ29pbmcgdG8gZmlyZSB1cCBgZ2l0IGRpZmZgIG9yLCBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50LCBtYXliZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhcm91bmQgbGluZSAyMzg0IG9mIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gQ29udGV4dCBpcyAqZXZlcnl0aGluZyogd2hlbiB5b3UncmUgcmV2aWV3aW5nIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgbmV0d29ya2luZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW1tZWRpYXRlbHkgYXJvdW5kIHRoZSBjaGFuZ2UgdG8gZnVsbHkgZ3JvayB0aGUgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgbG9naWMgZmxvdywgYW5kIHRoZSBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMuIEkgY2FuJ3QganVzdCBsb29rIGF0IHRoZSBsaW5lIGFuZCBzYXkgXCJ0aGF0IGxvb2tzIGdvb2RcIiDigJMgSSBoYXZlIHRvICp1bmRlcnN0YW5kKiBpdC4gTGV0J3Mgc2VlIHdoYXQgd2UgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6MzUuOTgyNTA5ODkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM3MDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbjIzNzE6XFx0XFx0aC5yYXcgPSBwYWNrZXRfY3VycmVudF9yeF9mcmFtZShwbywgc2tiLFxcbjIzNzI6XFx0XFx0XFx0XFx0XFx0XFx0VFBfU1RBVFVTX0tFUk5FTCwgKG1hY29mZitzbmFwbGVuKSk7XFxuMjM3MzpcXHRcXHRpZiAoIWgucmF3KVxcbjIzNzQ6XFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG4yMzc1OlxcdFxcbjIzNzY6XFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpIHtcXG4yMzc3OlxcdFxcdFxcdHNsb3RfaWQgPSBwby1cXHUwMDNlcnhfcmluZy5oZWFkO1xcbjIzNzg6XFx0XFx0XFx0aWYgKHRlc3RfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCkpXFxuMjM3OTpcXHRcXHRcXHRcXHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xcbjIzODA6XFx0XFx0XFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxuMjM4MTpcXHRcXHR9XFxuMjM4MjpcXHRcXG4yMzgzOlxcdFxcdGlmICh2bmV0X2hkcl9zeiBcXHUwMDI2XFx1MDAyNlxcbjIzODQ6XFx0XFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgKyBtYWNvZmYgLVxcbjIzODU6XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpLFxcbjIzODY6XFx0XFx0XFx0XFx0XFx0ICAgIHZpb19sZSgpLCB0cnVlLCAwKSkge1xcbjIzODc6XFx0XFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpXFxuMjM4ODpcXHRcXHRcXHRcXHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbjIzODk6XFx0XFx0XFx0ZWxzZVxcbjIzOTA6XFx0XFx0XFx0XFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpO1xcbjIzOTE6XFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG4yMzkyOlxcdFxcdH1cXG4yMzkzOlxcdFxcbjIzOTQ6XFx0XFx0aWYgKHBvLVxcdTAwM2V0cF92ZXJzaW9uIFxcdTAwM2M9IFRQQUNLRVRfVjIpIHtcXG4yMzk1OlxcdFxcdFxcdHBhY2tldF9pbmNyZW1lbnRfcnhfaGVhZChwbywgXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKTtcXG4yMzk2OlxcdFxcdC8qXFxuMjM5NzpcXHRcXHQgKiBMT1NJTkcgd2lsbCBiZSByZXBvcnRlZCB0aWxsIHlvdSByZWFkIHRoZSBzdGF0cyxcXG4yMzk4OlxcdFxcdCAqIGJlY2F1c2UgaXQncyBDT1IgLSBDbGVhciBPbiBSZWFkLlxcbjIzOTk6XFx0XFx0ICogQW55d2F5cywgbW92aW5nIGl0IGZvciBWMS9WMiBvbmx5IGFzIFYzIGRvZXNuJ3QgbmVlZCB0aGlzXFxuMjQwMDpcXHRcXHQgKiBhdCBwYWNrZXQgbGV2ZWwuXFxuMjQwMTpcXHRcXHQgKi9cXG4yNDAyOlxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2cG8tXFx1MDAzZXRwX2Ryb3BzKSlcXG4yNDAzOlxcdFxcdFxcdFxcdHN0YXR1cyB8PSBUUF9TVEFUVVNfTE9TSU5HO1xcbjI0MDQ6XFx0XFx0fVxcbjI0MDU6XFx0XFxuMjQwNjpcXHRcXHRwby1cXHUwMDNlc3RhdHMuc3RhdHMxLnRwX3BhY2tldHMrKztcXG4yNDA3OlxcdFxcdGlmIChjb3B5X3NrYikge1xcbjI0MDg6XFx0XFx0XFx0c3RhdHVzIHw9IFRQX1NUQVRVU19DT1BZO1xcbjI0MDk6XFx0XFx0XFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoY29weV9za2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzozNS45ODI2NzM1MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MzYzNjE2MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIHRoaXMgcGF0Y2gg4oCTIHdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgYW5kIHdoeSB3YXMgdGhpcyBtb2RpZmljYXRpb24gbmVjZXNzYXJ5IGluIHRoZSBmaXJzdCBwbGFjZT8gVG8gZG8gdGhpcywgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgcGF0Y2ggY29udGV4dCBpdHNlbGY7IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBjb21taXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFuZ2UuIEtub3dpbmcgdGhlIGhpc3Rvcnkgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIFRoaXMgd2lsbCBoZWxwIHdpdGggYSBtZW50YWwgbW9kZWwgb2YgdGhlIHJlYXNvbmluZy5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZmlsZS4gSSBrbm93IHRoZSBjaGFuZ2UgY29uY2VybnMgdGhlIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nIGluIGBhZl9wYWNrZXQuY2AsIHNvIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBnaXQgbG9nYCBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRoZSBsb2cgZm9yIGNoYW5nZXMgcmVsYXRlZCB0byB0aGlzIGFyZWEsIGFuZCBrZXl3b3JkcyBzdWNoIGFzIGByeF9vd25lcl9tYXBgLiBJIGtub3cgdGhpcyBoZWxwcyBrZWVwIHRyYWNrIG9mIHRoZSBvd25lcnNoaXAgb2YgdGhlIHJlY2VpdmluZyBzaWRlLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBwaW5wb2ludCB0aGUgZXhhY3QgY29tbWl0IG9yIGNvbW1pdHMgdGhhdCBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4gVGhpcyB3aWxsIGhvcGVmdWxseSBzaG93IG1lIHRoZSBsb2dpYy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo0NC4zNDYyOTMwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI0OTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeF9vd25lcl9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzc3LVxcdFxcdHNsb3RfaWQgPSBwby1cXHUwMDNlcnhfcmluZy5oZWFkO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM3ODpcXHRcXHRpZiAodGVzdF9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzktXFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODA6XFx0XFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzgxLVxcdH1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4Ny1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODg6XFx0XFx0XFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXFx0XFx0ZWxzZVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTA2LVxcdFxcdF9fcGFja2V0X3NldF9zdGF0dXMocG8sIGgucmF3LCBzdGF0dXMpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUwNzpcXHRcXHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwOC1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ1MTU9c3RhdGljIGludCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCB1bmlvbiB0cGFja2V0X3JlcV91ICpyZXFfdSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDUxOS1cXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ1MjA6XFx0dW5zaWduZWQgbG9uZyAqcnhfb3duZXJfbWFwID0gTlVMTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MjEtXFx0aW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MDYtXFx0XFx0XFx0aWYgKCF0eF9yaW5nKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA3OlxcdFxcdFxcdFxcdHJ4X293bmVyX21hcCA9IGJpdG1hcF9hbGxvYyhyZXEtXFx1MDAzZXRwX2ZyYW1lX25yLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYwOC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA5OlxcdFxcdFxcdFxcdGlmICghcnhfb3duZXJfbWFwKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYxMC1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3BnX3ZlYztcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0NC1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NDU6XFx0XFx0XFx0c3dhcChyYi1cXHUwMDNlcnhfb3duZXJfbWFwLCByeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0Ni1cXHRcXHRyYi1cXHUwMDNlZnJhbWVfbWF4ID0gKHJlcS1cXHUwMDNldHBfZnJhbWVfbnIgLSAxKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY4Mi1cXHRpZiAocGdfdmVjKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjgzOlxcdFxcdGJpdG1hcF9mcmVlKHJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00Njg0LVxcdFxcdGlmICh0eF9yaW5nIFxcdTAwMjZcXHUwMDI2IGNsb3NpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQ0LjM5NDU0NjM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTA3MTkzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQUZfUEFDS0VUIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgdHBhY2tldF9yY3ZgIGZ1bmN0aW9uLCBJIHNlZSBhIHNpZ25pZmljYW50IGNoYW5nZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYmAgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIEFGX1BBQ0tFVC4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhhdCBibG9jayBvZiBjb2RlIHdoZXJlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYHJ4X293bmVyX21hcGAgYW5kIHRoZSBgVFBBQ0tFVGAgdmVyc2lvbnMuXG5cbkluaXRpYWxseSwgaWYgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCBmYWlsZWQgYW5kIHRoZSBwYWNrZXQgdHlwZSB3YXMgYFRQQUNLRVRfVjJgIG9yIGVhcmxpZXIsIGEgYHNsb3RfaWRgIHdhcyBiZWluZyAqc2V0KiBpbiB0aGUgYHJ4X293bmVyX21hcGAsIGJ1dCAqbm90KiBjbGVhcmVkIHVwb24gZHJvcHBpbmcgdGhlIHBhY2tldCAoYGdvdG8gZHJvcF9uX2FjY291bnRgKS4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy4gV2hhdCBoYXBwZW5zIGlzIHRoYXQgYHRlc3RfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgd2lsbCAqYWx3YXlzKiBldmFsdWF0ZSB0byB0cnVlLCB3aGljaCBsZWFkcyB0byB0aGUgcGFja2V0IGJlaW5nIGRyb3BwZWQgYW5kIHRoYXQgc2xvdCBiZWluZyB1bmF2YWlsYWJsZSBmb3IgZnVydGhlciB1c2UsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgZGVuaWFsIG9mIHNlcnZpY2UgaWYgdGhpcyBoYXBwZW5zIHJlcGVhdGVkbHkuIFRoZSBmaXggaXMgYSBzaW1wbGUsIGJ1dCBjcml0aWNhbCwgYml0LWNsZWFyaW5nIG9wZXJhdGlvbjogYF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAuXG5cblRoZSBjb25jZXJuIGlzIGFsd2F5cywgXCJpcyB0aGlzIHJlYWwsIGlzIHRoaXMgZXhwbG9pdGFibGU/XCIuIFRoZSBnb29kIG5ld3MgaXMsIGFic29sdXRlbHkgeWVzISBBRl9QQUNLRVQgc29ja2V0cyBhcmUgaW5jcmVkaWJseSBjb21tb247IHRoZXkgYXJlIGEgc3RhbmRhcmQgc29ja2V0IGZhbWlseSAoQUZfUEFDS0VUKSwgYW5kIHN5emthbGxlciBoZWF2aWx5IGZ1enplZCB0aGlzIGFyZWEuIFVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgY3JlYXRlIEFGX1BBQ0tFVCBzb2NrZXRzIHVzaW5nIGBzb2NrZXQoQUZfUEFDS0VULCBTT0NLX1JBVywgLi4uKWAgb3IgYFNPQ0tfREdSQU1gLCBhbmQgd2UncmUgZGVhbGluZyB3aXRoIFRQQUNLRVQgcmluZyBidWZmZXJzIGFuZCBgUEFDS0VUX1ZORVRfSERSYCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGV2ZW4gd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZSBsaWtlIHZldGggb3IgbG9vcGJhY2suXG5cbk5vdywgSSdsbCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYGFmX3BhY2tldC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGFmZmVjdCB0aGlzIHBhdGgsIGJ1dCB0aGUgZ2VuZXJhbCBhY2Nlc3NpYmlsaXR5IG9mIHRoaXMgY29kZSBpcyBjbGVhci4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYW5kIGVhc2lseSByZWFjaGFibGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo0OS4yODUyNjg1NDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NjMyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BBQ0tFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvTWFrZWZpbGUtNS1cXG5uZXQvcGFja2V0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BBQ0tFVCkgKz0gYWZfcGFja2V0Lm9cXG5uZXQvcGFja2V0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BBQ0tFVF9ESUFHKSArPSBhZl9wYWNrZXRfZGlhZy5vXFxubmV0L3BhY2tldC9NYWtlZmlsZS04LWFmX3BhY2tldF9kaWFnLXkgKz0gZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjMzOjQ5LjMzMTgzODQyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDk5NDM4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFBhY2tldCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJ3MgbmV0d29yayBwYWNrZXQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvcGFja2V0L0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gcGFja2V0IGhhbmRsaW5nIGFyZSBkZWZpbmVkLCBhbmQgaXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHB1dCB0b2dldGhlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkncmUgc3RydWN0dXJlZC4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb25zIGludG8gcGFja2V0IHByb2Nlc3NpbmcgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzM6NTEuNTgxNzg1NjI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQYWNrZXQgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUEFDS0VUXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUGFja2V0IHNvY2tldFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZVxcbiAgMTA6XFx0XFx0ICBkaXJlY3RseSB3aXRoIG5ldHdvcmsgZGV2aWNlcyB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIHByb3RvY29sIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwsIGUuZy4gdGNwZHVtcC4gIElmIHlvdSB3YW50IHRoZW1cXG4gIDEyOlxcdFxcdCAgdG8gd29yaywgY2hvb3NlIFkuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAxNTpcXHRcXHQgIGJlIGNhbGxlZCBhZl9wYWNrZXQuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIFBBQ0tFVF9ESUFHXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBQQUNLRVRcXG4gIDIyOlxcdFxcdGRlZmF1bHQgblxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9QQUNLRVQgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxcbiAgMjU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1MS41ODE4NTU0OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Nzg1NDc4NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBQYWNrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfUEFDS0VUYCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gb2YgaW50ZXJlc3QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlLCBvciBiZSBpbmZsdWVuY2VkIGJ5LCBgQ09ORklHX1BBQ0tFVGAuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIExldCdzIHNlZS4uLiB0aGUgdGV4dCBpbmRpY2F0ZXMgYG5ldC9wYWNrZXQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ2xsIGNoZWNrIHRoYXQgZmlsZSBmb3IgaW5jbHVkZXMgYW5kIHJlZmVyZW5jZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdCBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozMzo1OS40MzY2NDIzMDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc2NTE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L3BhY2tldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTgyPW1lbnUgXFxcIk5ldHdvcmtpbmcgb3B0aW9uc1xcXCJcXG5uZXQvS2NvbmZpZy04My1cXG5uZXQvS2NvbmZpZzo4NDpzb3VyY2UgXFxcIm5ldC9wYWNrZXQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy04NS1zb3VyY2UgXFxcIm5ldC9wc3AvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDEuMTQ0Mjk5NTEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQ0ODIwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGFja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX1BBQ0tFVGAuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGxpdmVzIHVuZGVyIFwiTmV0d29ya2luZyBvcHRpb25zXCIgYW5kIG9ubHkgZGVwZW5kcyBvbiBgTkVUYCwgd2hpY2ggaXMgYmFzaWNhbGx5IHRoZSBiYXNlbGluZSBmb3IgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBUaGF0IG1lYW5zIGVuYWJsaW5nIGBQQUNLRVRgIGlzIHRoZSBrZXkuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjaGFuZ2VkIHdoZW4gYENPTkZJR19QQUNLRVRgIHdhcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmxhZywgYW5kIG15IHRvb2wgb2YgY2hvaWNlIGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgLlxuXG5Pa2F5LCB0aGUgdG9vbCBwb2ludHMgbWUgdG8gYHRwYWNrZXRfcmN2YCB3aXRoaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgdHBhY2tldF9yY3ZgIGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIElmIGl0J3Mgc3RhdGljLCB0aGUgc2NvcGUgbWlnaHQgYmUgbGltaXRlZCwgYW5kIHRoaXMgY291bGQgaW5kaWNhdGUgYSBzcGVjaWZpYyBhcmVhIG9mIGNvbmNlcm4gb3IgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIGBQQUNLRVRgIGZlYXR1cmUuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHRwYWNrZXRfcmN2YCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyBob3cgaXQncyBpbnZva2VkIHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0IGFuZCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZlYXR1cmUgb24gdGhlIG92ZXJhbGwga2VybmVsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDMuNDk4NzgzNTU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYwMDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cGFja2V0X3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTkyPXN0cnVjdCBwYWNrZXRfc29jaztcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzpzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTQtXFx0XFx0ICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTY4Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcHJiX3JldGlyZV9yeF9ibGtfdGltZXJfZXhwaXJlZChzdHJ1Y3QgaHJ0aW1lciAqdClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNjk2LVxcdC8qIFdlIG9ubHkgbmVlZCB0byBwbHVnIHRoZSByYWNlIHdoZW4gdGhlIGJsb2NrIGlzIHBhcnRpYWxseSBmaWxsZWQuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo2OTc6XFx0ICogdHBhY2tldF9yY3Y6XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy02OTgtXFx0ICpcXHRcXHRsb2NrKCk7IGluY3JlbWVudCBCTE9DS19OVU1fUEtUUzsgdW5sb2NrKClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9ODIzPXN0YXRpYyB2b2lkIHByYl90aGF3X3F1ZXVlKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy04MjgtLypcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjgyOTogKiBwcmJfb3Blbl9ibG9jayBpcyBjYWxsZWQgYnkgdHBhY2tldF9yY3Ygb3IgdGltZXIgY2FsbGJhY2suXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy04MzAtICpcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODM1LSAqXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4MzY6ICogT25lIHNpZGUgZWZmZWN0IG9mIE5PVCB1cGRhdGUgaHJ0aW1lciB3aGVuIGNhbGxlZCBieSB0cGFja2V0X3JjdiBpcyB0aGF0XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo4Mzc6ICogYSBuZXdseSBvcGVuZWQgYmxvY2sgdHJpZ2dlcmVkIGJ5IHRwYWNrZXRfcmN2IG1heSBiZSByZXRpcmVkIGVhcmxpZXIgdGhhblxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODM4LSAqIGV4cGVjdGVkLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGltZW91dCBpcyB1cGRhdGVkIGluIHByYl9vcGVuX2Jsb2NrLCB0aGVcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9ODQyPXN0YXRpYyB2b2lkIHByYl9vcGVuX2Jsb2NrKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjMSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtODgzLSAqIDQpIHVzZXItc3BhY2UgaXMgZWl0aGVyIHNsZWVwaW5nIG9yIHByb2Nlc3NpbmcgYmxvY2sgJzAnLlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6ODg0OiAqIDUpIHRwYWNrZXRfcmN2IGlzIGN1cnJlbnRseSBmaWxsaW5nIGJsb2NrICc3Jywgc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTg4NS0gKiAgICBpdCB3aWxsIGNsb3NlIGJsb2NrLTcsbG9vcCBhcm91bmQgYW5kIHRyeSB0byBmaWxsIGJsb2NrICcwJy5cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9OTQxPXN0YXRpYyB2b2lkIHByYl9yZXRpcmVfY3VycmVudF9ibG9jayhzdHJ1Y3QgdHBhY2tldF9rYmRxX2NvcmUgKnBrYyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTQ5LVxcdFxcdCAqIFBsdWcgdGhlIGNhc2Ugd2hlcmUgY29weV9iaXRzKCkgaXMgaW4gcHJvZ3Jlc3Mgb25cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjk1MDpcXHRcXHQgKiBjcHUtMCBhbmQgdHBhY2tldF9yY3YoKSBnb3QgaW52b2tlZCBvbiBjcHUtMSwgZGlkbid0XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NTEtXFx0XFx0ICogaGF2ZSBzcGFjZSB0byBjb3B5IHRoZSBwa3QgaW4gdGhlIGN1cnJlbnQgYmxvY2sgYW5kXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTEyNzE9c3RhdGljIGludCBfX3BhY2tldF9yY3ZfaGFzX3Jvb20oY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTI3Ni1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjEyNzc6XFx0aWYgKHBvLVxcdTAwM2Vwcm90X2hvb2suZnVuYyAhPSB0cGFja2V0X3Jjdikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTI3OC1cXHRcXHRpbnQgcmN2YnVmID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjQ4LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjI0OTpzdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjUwLVxcdFxcdCAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjAtXFx0XFx0bnZhbCA9IEdFVF9QQkRRQ19GUk9NX1JCKFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyktXFx1MDAzZW1heF9mcmFtZV9sZW4gLSBtYWNvZmY7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzYxOlxcdFxcdHByX2Vycl9vbmNlKFxcXCJ0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxcXG5cXFwiLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM2Mi1cXHRcXHRcXHQgICAgc25hcGxlbiwgbnZhbCwgbWFjb2ZmKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDUxNT1zdGF0aWMgaW50IHBhY2tldF9zZXRfcmluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuaW9uIHRwYWNrZXRfcmVxX3UgKnJlcV91LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NjQ5LVxcdFxcdHBvLVxcdTAwM2Vwcm90X2hvb2suZnVuYyA9IChwby1cXHUwMDNlcnhfcmluZy5wZ192ZWMpID9cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NTA6XFx0XFx0XFx0XFx0XFx0XFx0dHBhY2tldF9yY3YgOiBwYWNrZXRfcmN2O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY1MS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cmJfcXVldWUtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowMy41NDQzODcyNDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzgxMjU2MDgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQYWNrZXQgU29ja2V0IFJYIFJpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gaG93IHRoZSBwYWNrZXQgc29ja2V0IHJlY2VpdmUgcmluZyB3b3Jrcy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYHRwYWNrZXRfcmN2YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIFRoYXQncyB0aGUgb25lIHJlZ2lzdGVyZWQgaW4gYHBvLVx1MDAzZXByb3RfaG9vay5mdW5jYCB3aGVuIHRoZSByZWNlaXZlIHJpbmcgaXMgYWN0aXZlIChgcG8tXHUwMDNlcnhfcmluZy5wZ192ZWMgIT0gTlVMTGApLiBJdCdzIGNhbGxlZCB3aGVuIHBhY2tldHMgYXJlIHJlY2VpdmVkLCBlaXRoZXIgdmlhIGBkZXZfcXVldWVfeG1pdF9uaXRgLCBgZGVsaXZlcl9za2JgLCBvciBgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgYSBzdGF0aWMgYW5kIG5vdCB1c2VkIGV2ZXJ5d2hlcmUuIEJlY2F1c2UgaXQncyBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUgKH4zMDAgbGluZXMpLCBpdCdzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGJlIGlubGluZWQgYW5kIHdpbGwgYmUgYSBkaXN0aW5jdCBzeW1ib2wgaW4gYHZtbGludXhgLlxuXG5JIGtub3cgdGhhdCBgcGFja2V0X3NldF9yaW5nYCBpcyB3aGVyZSB0aGUgcmluZyBpcyBhY3R1YWxseSBzZXQgdXAsIGNvbmZpZ3VyZWQsIGFuZCB3aGVyZSBgcnhfb3duZXJfbWFwYCBpcyBhbGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcmVsYXRlZCBjb21wb25lbnRzLlxuXG5Ob3csIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHBhY2tldCBzb2NrZXQgY29kZSB0aGF0IHBsYXkgYSBzaWduaWZpY2FudCByb2xlPyBMZXQncyBjaGVjayBgcGFja2V0X3JlY3Ztc2dgIGFuZCBgcGFja2V0X3NldHNvY2tvcHRgLiBJdCBsb29rcyBsaWtlIGluIGBwYWNrZXRfc2V0c29ja29wdGAsIHRoZSBgUEFDS0VUX1JYX1JJTkdgIHNldHNvY2tvcHQgY2FsbHMgYHBhY2tldF9zZXRfcmluZ2AgLSB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZy4gSXQgbG9va3MgbGlrZSBgUEFDS0VUX1ZORVRfSERSYCBlbmFibGVzIGBwby1cdTAwM2VoYXNfdm5ldF9oZHJgLlxuXG5BbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdm5ldF9oZHJfc3pgIGlzIHNldCB3aXRoaW4gYHRwYWNrZXRfcmN2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDowNy4zNTY5NTEzNDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODIwOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZuZXRfaGRyX3N6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTA5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl92bmV0KHN0cnVjdCBtc2doZHIgKm1zZywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxMTA6XFx0XFx0XFx0ICAgc2l6ZV90ICpsZW4sIGludCB2bmV0X2hkcl9zeilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMTEte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTEzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjExNDpcXHRpZiAoKmxlbiBcXHUwMDNjIHZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjExNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIxMTY6XFx0KmxlbiAtPSB2bmV0X2hkcl9zejtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMTctXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMjAtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTIxOlxcdHJldHVybiBtZW1jcHlfdG9fbXNnKG1zZywgKHZvaWQgKilcXHUwMDI2dm5ldF9oZHIsIHZuZXRfaGRyX3N6KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxMjItfVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI2Ni1cXHR1bnNpZ25lZCBpbnQgc2xvdF9pZCA9IDA7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjY3OlxcdGludCB2bmV0X2hkcl9zeiA9IDA7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjY4LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzI0LVxcdFxcdFxcdFxcdCAgICAgICBwby1cXHUwMDNldHBfcmVzZXJ2ZTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzMjU6XFx0XFx0dm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UocG8tXFx1MDAzZXZuZXRfaGRyX3N6KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzMjY6XFx0XFx0aWYgKHZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjMyNzpcXHRcXHRcXHRuZXRvZmYgKz0gdm5ldF9oZHJfc3o7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzI4LVxcdFxcdG1hY29mZiA9IG5ldG9mZiAtIG1hY2xlbjtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM1Mi1cXHRcXHRcXHRcXHRzbmFwbGVuID0gMDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNTM6XFx0XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM1NC1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNjYtXFx0XFx0XFx0bWFjb2ZmID0gR0VUX1BCRFFDX0ZST01fUkIoXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKS1cXHUwMDNlbWF4X2ZyYW1lX2xlbjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzNjc6XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM2OC1cXHRcXHR9XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODItXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMzgzOlxcdGlmICh2bmV0X2hkcl9zeiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4NC1cXHQgICAgdmlydGlvX25ldF9oZHJfZnJvbV9za2Ioc2tiLCBoLnJhdyArIG1hY29mZiAtXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1Njk9c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NzA6XFx0XFx0XFx0XFx0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqdm5ldF9oZHIsIGludCB2bmV0X2hkcl9zeilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzEte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTczLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjU3NDpcXHRpZiAoKmxlbiBcXHUwMDNjIHZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU3NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NzY6XFx0KmxlbiAtPSB2bmV0X2hkcl9zejtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzctXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1ODUtXFx0LyogbW92ZSBpdGVyIHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZiBtYWMgaGVhZGVyICovXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTg2OlxcdGlmICh2bmV0X2hkcl9zeiAhPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1ODc6XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgdm5ldF9oZHJfc3ogLSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTg4LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzQ1PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzU2LVxcdGJvb2wgbmVlZF93YWl0ID0gIShtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzU3OlxcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc1OC1cXHR1bnNpZ25lZCBjaGFyICphZGRyID0gTlVMTDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgxNS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4MTY6XFx0aWYgKChzaXplX21heCBcXHUwMDNlIGRldi1cXHUwMDNlbXR1ICsgcmVzZXJ2ZSArIFZMQU5fSExFTikgXFx1MDAyNlxcdTAwMjYgIXZuZXRfaGRyX3N6KVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjgxNy1cXHRcXHRzaXplX21heCA9IGRldi1cXHUwMDNlbXR1ICsgcmVzZXJ2ZSArIFZMQU5fSExFTjtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1MC1cXHRcXHR0bGVuID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUxOlxcdFxcdGlmICh2bmV0X2hkcl9zeikge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1MjpcXHRcXHRcXHRkYXRhICs9IHZuZXRfaGRyX3N6O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1MzpcXHRcXHRcXHR0cF9sZW4gLT0gdm5ldF9oZHJfc3o7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODU0LVxcdFxcdFxcdGlmICh0cF9sZW4gXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTctXFx0XFx0XFx0fVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg1ODpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnZuZXRfaGRyLCBkYXRhIC0gdm5ldF9oZHJfc3osIHNpemVvZih2bmV0X2hkcikpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg1OS1cXHRcXHRcXHRpZiAoX19wYWNrZXRfc25kX3ZuZXRfcGFyc2UoXFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4ODMtXFx0XFx0ICAgIHRwX2xlbiBcXHUwMDNlIGRldi1cXHUwMDNlbXR1ICsgcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjg4NDpcXHRcXHQgICAgIXZuZXRfaGRyX3N6IFxcdTAwMjZcXHUwMDI2XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODg1LVxcdFxcdCAgICAhcGFja2V0X2V4dHJhX3ZsYW5fbGVuX2FsbG93ZWQoZGV2LCBza2IpKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTc1PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI5ODctXFx0c3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyOTg4OlxcdGludCB2bmV0X2hkcl9zeiA9IFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk4OS1cXHRpbnQgaGFyZF9oZWFkZXJfbGVuLCBobGVuLCB0bGVuLCBsaW5lYXI7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMzEtXFx0XFx0cmVzZXJ2ZSA9IGhhcmRfaGVhZGVyX2xlbjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwMzI6XFx0aWYgKHZuZXRfaGRyX3N6KSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMDMzOlxcdFxcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFxcdTAwMjZsZW4sIFxcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAzNC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTA0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEwNTpcXHRpZiAodm5ldF9oZHJfc3opIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMDYtXFx0XFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXFx1MDAyNnZuZXRfaGRyLCB2aW9fbGUoKSk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMDgtXFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMDk6XFx0XFx0bGVuICs9IHZuZXRfaGRyX3N6O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExMC1cXHRcXHR2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc2tiLCBcXHUwMDI2dm5ldF9oZHIpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zNDQ2PXN0YXRpYyBpbnQgcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDUxLVxcdGludCBjb3BpZWQsIGVycjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0NTI6XFx0aW50IHZuZXRfaGRyX2xlbiA9IFJFQURfT05DRShwa3Rfc2soc2spLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDUzLVxcdHVuc2lnbmVkIGludCBvcmlnbGVuID0gMDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzgxNz1wYWNrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MDA0LVxcdFxcdH0gZWxzZSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MDA1OlxcdFxcdFxcdFdSSVRFX09OQ0UocG8tXFx1MDAzZXZuZXRfaGRyX3N6LCBoZHJfbGVuKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQwMDYtXFx0XFx0XFx0cmV0ID0gMDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDA4OT1zdGF0aWMgaW50IHBhY2tldF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQxMzYtXFx0Y2FzZSBQQUNLRVRfVk5FVF9IRFI6XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0MTM3OlxcdFxcdHZhbCA9ICEhUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTM4LVxcdFxcdGJyZWFrO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDEzOS1cXHRjYXNlIFBBQ0tFVF9WTkVUX0hEUl9TWjpcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQxNDA6XFx0XFx0dmFsID0gUkVBRF9PTkNFKHBvLVxcdTAwM2V2bmV0X2hkcl9zeik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00MTQxLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3BhY2tldC9kaWFnLmM9MTM9c3RhdGljIGludCBwZGlhZ19wdXRfaW5mbyhjb25zdCBzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IpXFxuLS1cXG5uZXQvcGFja2V0L2RpYWcuYy0yOS1cXHRcXHRwaW5mby5wZGlfZmxhZ3MgfD0gUERJX09SSUdERVY7XFxubmV0L3BhY2tldC9kaWFnLmM6MzA6XFx0aWYgKFJFQURfT05DRShwby1cXHUwMDNldm5ldF9oZHJfc3opKVxcbm5ldC9wYWNrZXQvZGlhZy5jLTMxLVxcdFxcdHBpbmZvLnBkaV9mbGFncyB8PSBQRElfVk5FVEhEUjtcXG4tLVxcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaD0xMDQ9c3RydWN0IHBhY2tldF9zb2NrIHtcXG4tLVxcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaC0xMTUtXFx0aW50XFx0XFx0XFx0aWZpbmRleDtcXHQvKiBib3VuZCBkZXZpY2VcXHRcXHQqL1xcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDoxMTY6XFx0dThcXHRcXHRcXHR2bmV0X2hkcl9zejtcXG5uZXQvcGFja2V0L2ludGVybmFsLmgtMTE3LVxcdF9fYmUxNlxcdFxcdFxcdG51bTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MDcuNDAyNzgwNTkxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNzg4NTM4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEFGX1BBQ0tFVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBkaWZmIG9ubHkgdG91Y2hlcyBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AuIFRoYXQncyBhIGdvb2Qgc3RhcnQ7IGl0IGtlZXBzIHRoaW5ncyBmb2N1c2VkLiBUaGUgY29kZSBhZGRzIGBfX2NsZWFyX2JpdGAgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYHRwYWNrZXRfcmN2YCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSB2aXJ0aW8gbmV0IGhlYWRlciBhbmQgdmVyc2lvbnMgYFRQQUNLRVRfVjFgIG9yIGBUUEFDS0VUX1YyYC4gVGhpcyBpbXBsaWVzIGEgZml4IGZvciBzbG90IG93bmVyc2hpcCB0cmFja2luZywgY2xlYXJpbmcgdGhlIGByeF9vd25lcl9tYXBgIGJpdCBpbiBjYXNlIHRoZSBoZWFkZXIgcGFyc2luZyBmYWlscywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQuXG5cbk5vdywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHNldHVwPyBBYnNvbHV0ZWx5LiBgQUZfUEFDS0VUYCBzb2NrZXRzIGFyZSBicmVhZCBhbmQgYnV0dGVyIGZvciBhbnkgTGludXggbmV0d29ya2luZyBleHBlcnQsIGFuZCBlc3BlY2lhbGx5IGZvciBzb21lb25lIGxpa2UgbWUgd2hvIGlzIGludm9sdmVkIGluIGZ1enppbmcuIEkga25vdyBzeXprYWxsZXIgaGl0cyB0aGlzIGNvZGUgcGF0aCBhbGwgdGhlIHRpbWUuIFVzZXJzcGFjZSBjcmVhdGVzIHRoZXNlIHNvY2tldHMsIHNldHMgdXAgdGhlIHJpbmcgYnVmZmVyIHVzaW5nIGBQQUNLRVRfUlhfUklOR2Agd2l0aCBlaXRoZXIgYFRQQUNLRVRfVjFgIG9yIGBUUEFDS0VUX1YyYCwgYW5kIGVuYWJsZXMgYFBBQ0tFVF9WTkVUX0hEUmAuIFRoYXQncyBhbGwgc3RhbmRhcmQuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHBhY2tldF9yY3ZgIGlzIGRpcmVjdGx5IGludm9sdmVkLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkRvZXMgdGhpcyB0b3VjaCBhbnkgY29yZSBzdWJzeXN0ZW1zPyBZdXAsIGl0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBgYWZfcGFja2V0LmNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbC5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0LiBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGZ1bmN0aW9uIGB0cGFja2V0X3JjdmAsIGZvY3VzaW5nIG9uIHJpbmcgYnVmZmVyIGJlaGF2aW9yIGFuZCBtZW1vcnkgbWFuYWdlbWVudCAoYHJ4X293bmVyX21hcGApLiBJIGtub3cgdGhhdCBlcnJvcnMgaW4gcmluZyBidWZmZXIgaGFuZGxpbmcgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IGNvbmN1cnJlbmN5IHByb2JsZW1zIGFuZCBldmVuIG1lbW9yeSBjb3JydXB0aW9uLCBzbyB2ZXJpZnlpbmcgdGhpcyBmaXggaXMgY3J1Y2lhbC4gVGhlIGBGb2N1c1N5bWJvbHNgIG9mIGB0cGFja2V0X3JjdmAgYW5kIGBwYWNrZXRfc2V0X3JpbmdgIGNvbmZpcm0gdGhpcy5cblxuRmluYWxseSwgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBgUEFDS0VUYCBpcyBhbGwgdGhhdCdzIG5lZWRlZC4gSSBqdXN0IGRvdWJsZS1jaGVja2VkIHRoYXQgYFBBQ0tFVGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBgTkVUYCBpcyB1bml2ZXJzYWwuIFNvLCBgUEFDS0VUYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIGVuYWJsaW5nIHdoYXQgd2UgbmVlZC5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIGhpZ2gtcHJpb3JpdHkgZnV6emluZyB0YXJnZXQuIFRoZSBmaXggaXMgd2l0aGluIGEgY3J1Y2lhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgaXMgcmVhZGlseSByZWFjaGFibGUsIGFuZCBoYXMgdGhlIHBvdGVudGlhbCB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gc29ja2V0IHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQuIEknbSBjYWxsaW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjA3LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxMy42ODE2MzY4NjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA4OTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHBhY2tldF9yY3ZcIixcbiAgICBcInBhY2tldF9zZXRfcmluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRwYWNrZXRfcmN2KCkgaW4gbmV0L3BhY2tldC9hZl9wYWNrZXQuYywgZW5zdXJpbmcgdGhhdCB0aGUgc2xvdCBpbiBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXAgaXMgY2xlYXJlZCB3aGVuIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKCkgZmFpbHMgZm9yIFRQQUNLRVRfVjEvVjIgcmluZ3MuIFRoaXMgY29kZSBpcyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfUEFDS0VUIHNvY2tldHMgY29uZmlndXJlZCB3aXRoIFBBQ0tFVF9SWF9SSU5HIGFuZCBQQUNLRVRfVk5FVF9IRFIuIEZ1enppbmcgY2FuIHZlcmlmeSB0aGF0IHNsb3Qgb3duZXJzaGlwIHRyYWNraW5nLCByaW5nIG1hbmFnZW1lbnQsIGFuZCBwYWNrZXQgZHJvcCBhY2NvdW50aW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgbWFsZm9ybWVkIHBhY2tldCBhbmQgZXJyb3IgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cGFja2V0X3JjdlwiLFxuICAgIFwicGFja2V0X3NldF9yaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdHBhY2tldF9yY3YoKSBpbiBuZXQvcGFja2V0L2FmX3BhY2tldC5jLCBlbnN1cmluZyB0aGF0IHRoZSBzbG90IGluIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCBpcyBjbGVhcmVkIHdoZW4gdmlydGlvX25ldF9oZHJfZnJvbV9za2IoKSBmYWlscyBmb3IgVFBBQ0tFVF9WMS9WMiByaW5ncy4gVGhpcyBjb2RlIGlzIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9QQUNLRVQgc29ja2V0cyBjb25maWd1cmVkIHdpdGggUEFDS0VUX1JYX1JJTkcgYW5kIFBBQ0tFVF9WTkVUX0hEUi4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgc2xvdCBvd25lcnNoaXAgdHJhY2tpbmcsIHJpbmcgbWFuYWdlbWVudCwgYW5kIHBhY2tldCBkcm9wIGFjY291bnRpbmcgYmVoYXZlIGNvcnJlY3RseSB1bmRlciBtYWxmb3JtZWQgcGFja2V0IGFuZCBlcnJvciBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoxMy43NTM3MzI1NDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjI4MTg0MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MTMuNzU0MTQ4MTg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTMyMjc3NjQyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgKGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGp1bXBzIHRvIGBkcm9wX25fYWNjb3VudGApLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHNsb3RfaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGV4cGxpY2l0bHkgYXNzaWduZWQgYHBvLVxcdTAwM2VyeF9yaW5nLmhlYWRgLCBhbmQgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBiaXRtYXBfYWxsb2NgKS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODkwYzU0MWEyNDI2N2ViMjQxYzI5NjdiNDU1ZWQzYTAyMmUwNDEwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjMzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcbmluZGV4IDc2YmRlNzkwNmQ0OTQuLjUwY2FlMzJhZTI2OTIgMTAwNjQ0XG4tLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG4rKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5AQCAtMjM4NCw3ICsyMzg0LDkgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKHNrYiwgaC5yYXcgKyBtYWNvZmYgLVxuIFx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpLFxuIFx0XHRcdFx0ICAgIHZpb19sZSgpLCB0cnVlLCAwKSkge1xuLVx0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiA9PSBUUEFDS0VUX1YzKVxuK1x0XHRpZiAocG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjIpXG4rXHRcdFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xuK1x0XHRlbHNlXG4gXHRcdFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcdTAwMjZwby1cdTAwM2VyeF9yaW5nKTtcbiBcdFx0Z290byBkcm9wX25fYWNjb3VudDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjEzLjc1NDE0OTIxOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDU0NTc2MjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGEgYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBwYXRjaCB0byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgbmVjZXNzaXRhdGVzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNvdmVyYWdlLiBUaGlzIGZlZWxzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZGVmZW5zaXZlIGFuYWx5c2lzLCBhIFFBL3Nhbml0aXplciBldmFsdWF0aW9uIHRhc2s7IGl0J3MgYmVuaWduLCBwdXJlbHkgZGVmZW5zaXZlIGluIG5hdHVyZSwgbm8gb2ZmZW5zaXZlIHBheWxvYWRzIG9yIGV4cGxvaXQgYW5hbHlzaXMgYXJlIHJlcXVpcmVkLiBHb29kLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBhbmFseXplIHRoZSBwYXRjaCBpdHNlbGYgYW5kIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCdzIHNlZS4uLiB0aGUgZGlmZiBzaG93cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgYFRQQUNLRVRfVjNgIGFuZCB0aGUgY2xlYXJpbmcgb2YgYSBiaXQgd2l0aGluIHRoZSBgcnhfb3duZXJfbWFwYCBvciBhIGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBjYWxsLCBiYXNlZCBvbiB0aGUgYHBvLVx1MDAzZXRwX3ZlcnNpb25gLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGJ1ZyBvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBwYWNrZXQgcmVjZXB0aW9uIGluIGRpZmZlcmVudCBUUEFDS0VUIHZlcnNpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggYHZpcnRpb19uZXRfaGRyYC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIzODQuIEknbGwgdXNlIG15IHRvb2xzIHRvIHJlYWQgdGhlIGZpbGUgb3IgZ3JlcCBmb3IgdGhlIHJlbGV2YW50IGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3MgdGhlIHBvdGVudGlhbCByaXNrIHN1cmZhY2VzIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyLXN1cHBsaWVkIGRhdGEgdGhhdCBjb3VsZCBsZWFkIHRvIEtNU0FOLWRldGVjdGFibGUgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IGByeF9vd25lcl9tYXBgIGlzIGFuZCB3aGF0IGBwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzYCBkb2VzLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIHdoZXRoZXIgS01TQU4gZnV6emluZyBpcyBsaWtlbHkgdG8gYmUgYmVuZWZpY2lhbC4gSWYgaXQncyBhIGNyaXRpY2FsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHVzZXItc3VwcGxpZWQgZGF0YSwgdGhlIEtNU0FOIHNlc3Npb24gd2lsbCBiZSB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDoyNC4yOTk5MTQxNjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2MDpcXHRcXHRcXHRudmFsID0gR0VUX1BCRFFDX0ZST01fUkIoXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKS1cXHUwMDNlbWF4X2ZyYW1lX2xlbiAtIG1hY29mZjtcXG4yMzYxOlxcdFxcdFxcdHByX2Vycl9vbmNlKFxcXCJ0cGFja2V0X3JjdjogcGFja2V0IHRvbyBiaWcsIGNsYW1wZWQgZnJvbSAldSB0byAldS4gbWFjb2ZmPSV1XFxcXG5cXFwiLFxcbjIzNjI6XFx0XFx0XFx0XFx0ICAgIHNuYXBsZW4sIG52YWwsIG1hY29mZik7XFxuMjM2MzpcXHRcXHRcXHRzbmFwbGVuID0gbnZhbDtcXG4yMzY0OlxcdFxcdFxcdGlmICh1bmxpa2VseSgoaW50KXNuYXBsZW4gXFx1MDAzYyAwKSkge1xcbjIzNjU6XFx0XFx0XFx0XFx0c25hcGxlbiA9IDA7XFxuMjM2NjpcXHRcXHRcXHRcXHRtYWNvZmYgPSBHRVRfUEJEUUNfRlJPTV9SQihcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpLVxcdTAwM2VtYXhfZnJhbWVfbGVuO1xcbjIzNjc6XFx0XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbjIzNjg6XFx0XFx0XFx0fVxcbjIzNjk6XFx0XFx0fVxcbjIzNzA6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4yMzcxOlxcdFxcdGgucmF3ID0gcGFja2V0X2N1cnJlbnRfcnhfZnJhbWUocG8sIHNrYixcXG4yMzcyOlxcdFxcdFxcdFxcdFxcdFxcdFRQX1NUQVRVU19LRVJORUwsIChtYWNvZmYrc25hcGxlbikpO1xcbjIzNzM6XFx0XFx0aWYgKCFoLnJhdylcXG4yMzc0OlxcdFxcdFxcdGdvdG8gZHJvcF9uX2FjY291bnQ7XFxuMjM3NTpcXHRcXG4yMzc2OlxcdFxcdGlmIChwby1cXHUwMDNldHBfdmVyc2lvbiBcXHUwMDNjPSBUUEFDS0VUX1YyKSB7XFxuMjM3NzpcXHRcXHRcXHRzbG90X2lkID0gcG8tXFx1MDAzZXJ4X3JpbmcuaGVhZDtcXG4yMzc4OlxcdFxcdFxcdGlmICh0ZXN0X2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApKVxcbjIzNzk6XFx0XFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG4yMzgwOlxcdFxcdFxcdF9fc2V0X2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbjIzODE6XFx0XFx0fVxcbjIzODI6XFx0XFxuMjM4MzpcXHRcXHRpZiAodm5ldF9oZHJfc3ogXFx1MDAyNlxcdTAwMjZcXG4yMzg0OlxcdFxcdCAgICB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYihza2IsIGgucmF3ICsgbWFjb2ZmIC1cXG4yMzg1OlxcdFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKSxcXG4yMzg2OlxcdFxcdFxcdFxcdFxcdCAgICB2aW9fbGUoKSwgdHJ1ZSwgMCkpIHtcXG4yMzg3OlxcdFxcdFxcdGlmIChwby1cXHUwMDNldHBfdmVyc2lvbiBcXHUwMDNjPSBUUEFDS0VUX1YyKVxcbjIzODg6XFx0XFx0XFx0XFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcXG4yMzg5OlxcdFxcdFxcdGVsc2VcXG4yMzkwOlxcdFxcdFxcdFxcdHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXFx1MDAyNnBvLVxcdTAwM2VyeF9yaW5nKTtcXG4yMzkxOlxcdFxcdFxcdGdvdG8gZHJvcF9uX2FjY291bnQ7XFxuMjM5MjpcXHRcXHR9XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdGlmIChwby1cXHUwMDNldHBfdmVyc2lvbiBcXHUwMDNjPSBUUEFDS0VUX1YyKSB7XFxuMjM5NTpcXHRcXHRcXHRwYWNrZXRfaW5jcmVtZW50X3J4X2hlYWQocG8sIFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyk7XFxuMjM5NjpcXHRcXHQvKlxcbjIzOTc6XFx0XFx0ICogTE9TSU5HIHdpbGwgYmUgcmVwb3J0ZWQgdGlsbCB5b3UgcmVhZCB0aGUgc3RhdHMsXFxuMjM5ODpcXHRcXHQgKiBiZWNhdXNlIGl0J3MgQ09SIC0gQ2xlYXIgT24gUmVhZC5cXG4yMzk5OlxcdFxcdCAqIEFueXdheXMsIG1vdmluZyBpdCBmb3IgVjEvVjIgb25seSBhcyBWMyBkb2Vzbid0IG5lZWQgdGhpc1xcbjI0MDA6XFx0XFx0ICogYXQgcGFja2V0IGxldmVsLlxcbjI0MDE6XFx0XFx0ICovXFxuMjQwMjpcXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnBvLVxcdTAwM2V0cF9kcm9wcykpXFxuMjQwMzpcXHRcXHRcXHRcXHRzdGF0dXMgfD0gVFBfU1RBVFVTX0xPU0lORztcXG4yNDA0OlxcdFxcdH1cXG4yNDA1OlxcdFxcbjI0MDY6XFx0XFx0cG8tXFx1MDAzZXN0YXRzLnN0YXRzMS50cF9wYWNrZXRzKys7XFxuMjQwNzpcXHRcXHRpZiAoY29weV9za2IpIHtcXG4yNDA4OlxcdFxcdFxcdHN0YXR1cyB8PSBUUF9TVEFUVVNfQ09QWTtcXG4yNDA5OlxcdFxcdFxcdHNrYl9jbGVhcl9kZWxpdmVyeV90aW1lKGNvcHlfc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MjQuMzAwMjQ3NDQzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4Njg0MTUwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHJlcXVlc3QsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFNvdXJjZSBNYXRlcmlhbCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gQmVmb3JlIEkgZXZlbiBhdHRlbXB0IHRvIHN1bW1hcml6ZSBvciB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gc3BlY2lmaWMgc2VjdGlvbnMgb2YgdGhpcyB0ZXh0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBleGFtaW5lIHRoZSB0ZXh0IHRoYXQgb2NjdXJzICpiZWZvcmUqIGxpbmUgMjM2MCBhbmQgKmFmdGVyKiBsaW5lIDI0MDkuIEJ5IGZvY3VzaW5nIG9uIHRoZXNlIGRlZmluZWQgYm91bmRhcmllcywgSSdtIGhvcGluZyB0byBnYWluIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgbGluZXMgaW4gdGhlIG1pZGRsZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyB3aWxsIHByb3ZpZGUgbWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGZyYW1ld29yayBmb3IgYSBjb21wbGV0ZSBhbmQgaW5mb3JtZWQgYXNzZXNzbWVudCBvZiB0aGUgc3ViamVjdCBtYXR0ZXIuIEl0J3MgYSBjcml0aWNhbCBhbmFseXRpY2FsIHN0ZXAgYmVmb3JlIGRpdmluZyBpbnRvIGEgZGV0YWlsZWQgc3lub3BzaXMsIHJlYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6MjYuMTY4NjY2MjI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMzA6XFx0XFx0aWYgKG5ldG9mZiBcXHUwMDNlIFVTSFJUX01BWCkge1xcbjIzMzE6XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2cG8tXFx1MDAzZXRwX2Ryb3BzKTtcXG4yMzMyOlxcdFxcdFxcdGdvdG8gZHJvcF9uX3Jlc3RvcmU7XFxuMjMzMzpcXHRcXHR9XFxuMjMzNDpcXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMikge1xcbjIzMzU6XFx0XFx0XFx0aWYgKG1hY29mZiArIHNuYXBsZW4gXFx1MDAzZSBwby1cXHUwMDNlcnhfcmluZy5mcmFtZV9zaXplKSB7XFxuMjMzNjpcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBvLVxcdTAwM2Vjb3B5X3RocmVzaCkgXFx1MDAyNlxcdTAwMjZcXG4yMzM3OlxcdFxcdFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2Mgc2stXFx1MDAzZXNrX3JjdmJ1Zikge1xcbjIzMzg6XFx0XFx0XFx0XFx0XFx0aWYgKHNrYl9zaGFyZWQoc2tiKSkge1xcbjIzMzk6XFx0XFx0XFx0XFx0XFx0XFx0Y29weV9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4yMzQwOlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0MTpcXHRcXHRcXHRcXHRcXHRcXHRjb3B5X3NrYiA9IHNrYl9nZXQoc2tiKTtcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdFxcdHNrYl9oZWFkID0gc2tiLVxcdTAwM2VkYXRhO1xcbjIzNDM6XFx0XFx0XFx0XFx0XFx0fVxcbjIzNDQ6XFx0XFx0XFx0XFx0XFx0aWYgKGNvcHlfc2tiKSB7XFxuMjM0NTpcXHRcXHRcXHRcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNlBBQ0tFVF9TS0JfQ0IoY29weV9za2IpLVxcdTAwM2VzYS5sbCwgMCxcXG4yMzQ2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoUEFDS0VUX1NLQl9DQihjb3B5X3NrYiktXFx1MDAzZXNhLmxsKSk7XFxuMjM0NzpcXHRcXHRcXHRcXHRcXHRcXHRza2Jfc2V0X293bmVyX3IoY29weV9za2IsIHNrKTtcXG4yMzQ4OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzQ5OlxcdFxcdFxcdFxcdH1cXG4yMzUwOlxcdFxcdFxcdFxcdHNuYXBsZW4gPSBwby1cXHUwMDNlcnhfcmluZy5mcmFtZV9zaXplIC0gbWFjb2ZmO1xcbjIzNTE6XFx0XFx0XFx0XFx0aWYgKChpbnQpc25hcGxlbiBcXHUwMDNjIDApIHtcXG4yMzUyOlxcdFxcdFxcdFxcdFxcdHNuYXBsZW4gPSAwO1xcbjIzNTM6XFx0XFx0XFx0XFx0XFx0dm5ldF9oZHJfc3ogPSAwO1xcbjIzNTQ6XFx0XFx0XFx0XFx0fVxcbjIzNTU6XFx0XFx0XFx0fVxcbjIzNTY6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShtYWNvZmYgKyBzbmFwbGVuIFxcdTAwM2VcXG4yMzU3OlxcdFxcdFxcdFxcdCAgICBHRVRfUEJEUUNfRlJPTV9SQihcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpLVxcdTAwM2VtYXhfZnJhbWVfbGVuKSkge1xcbjIzNTg6XFx0XFx0XFx0dTMyIG52YWw7XFxuMjM1OTpcXHRcXG4yMzYwOlxcdFxcdFxcdG52YWwgPSBHRVRfUEJEUUNfRlJPTV9SQihcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpLVxcdTAwM2VtYXhfZnJhbWVfbGVuIC0gbWFjb2ZmO1xcbjIzNjE6XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcInRwYWNrZXRfcmN2OiBwYWNrZXQgdG9vIGJpZywgY2xhbXBlZCBmcm9tICV1IHRvICV1LiBtYWNvZmY9JXVcXFxcblxcXCIsXFxuMjM2MjpcXHRcXHRcXHRcXHQgICAgc25hcGxlbiwgbnZhbCwgbWFjb2ZmKTtcXG4yMzYzOlxcdFxcdFxcdHNuYXBsZW4gPSBudmFsO1xcbjIzNjQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KChpbnQpc25hcGxlbiBcXHUwMDNjIDApKSB7XFxuMjM2NTpcXHRcXHRcXHRcXHRzbmFwbGVuID0gMDtcXG4yMzY2OlxcdFxcdFxcdFxcdG1hY29mZiA9IEdFVF9QQkRRQ19GUk9NX1JCKFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyktXFx1MDAzZW1heF9mcmFtZV9sZW47XFxuMjM2NzpcXHRcXHRcXHRcXHR2bmV0X2hkcl9zeiA9IDA7XFxuMjM2ODpcXHRcXHRcXHR9XFxuMjM2OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjI2LjE2ODkzMDA1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDYyODg2OTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBSZWNlaXZlIElzc3VlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgdHBhY2tldF9yY3ZgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjM3Ni4gSSBzZWUgYSBjb25kaXRpb25hbCBibG9jayBoZXJlIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcsIGhhbmRsaW5nIGBUUEFDS0VUX1YyYCBhbmQgZWFybGllciB2ZXJzaW9ucy4gVGhlIGluaXRpYWwgY2hlY2sgaW52b2x2ZXMgYHBvLVx1MDAzZXJ4X3JpbmcuaGVhZGAgYW5kIGByeF9vd25lcl9tYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzbG90IGlzbid0IGFscmVhZHkgY2xhaW1lZC4gSWYgaXQgaXMsIGBkcm9wX25fYWNjb3VudGAgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LiBJZiBub3QsIHRoZSBiaXQgcmVwcmVzZW50aW5nIG93bmVyc2hpcCBpcyBzZXQuXG5cblRoZW4sIHRoZXJlJ3MgYSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgLiBUaGlzIGxpa2VseSBoYW5kbGVzIHRoZSBWaXJ0SU8gbmV0d29yayBoZWFkZXIgYW5kIGl0cyBleHRyYWN0aW9uIGZyb20gdGhlIFNLQi4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgYSBjb25kaXRpb246IGlmIHRoaXMgaGVhZGVyIGV4dHJhY3Rpb24gZmFpbHMsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIG93bmVyc2hpcCBiaXQgaW4gb2xkZXIgdmVyc2lvbnMgKGBUUEFDS0VUX1YyYCBvciBlYXJsaWVyKSwgb3IgYHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXNgIGZvciBuZXdlciB2ZXJzaW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgd2UgY2FuJ3QgcHJvcGVybHkgcHJvY2VzcyB0aGUgaGVhZGVyLCB3ZSBjYW4ndCB1c2UgdGhpcyByaW5nIGJ1ZmZlciwgYW5kIG11c3QgcmVsZWFzZSBpdC4gVGhlIGNvZGUgdGhlbiBjYWxscyBgZHJvcF9uX2FjY291bnRgLlxuXG5Ob3csIGxldCBtZSBnbyBiYWNrIGEgbW9tZW50IGFuZCBsb29rIGF0IHRoZSBcImJlZm9yZVwiIHZlcnNpb24gb2YgdGhlIGNvZGUsIHdoaWNoIHNlZW1zIHRvIGltcGx5IHRoaXMgYmxvY2sgd2FzIGFkZGVkLiBQcmV2aW91c2x5LCB0aGUgbG9naWMgd2l0aGluIHRoZSBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGJsb2NrIHdhcyBvbmx5IGRpZmZlcmVudCBmb3IgYFRQQUNLRVRfVjNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyB0aGF0IHRoaXMgbmV3IGNoYW5nZSBhdHRlbXB0ZWQgdG8gYWRkcmVzcy4gSSdtIGdvaW5nIHRvIGxvb2sgaW50byB0aGUgZ2l0IGhpc3Rvcnkgb2YgdGhpcyBjb21taXQsIG9yIGJldHRlciB5ZXQsIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGByeF9vd25lcl9tYXBgIGluIHRoZSBnaXQgbG9nIHRvIGdldCB0aGUgZnVsbCBzdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgYW5kIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGl0IGFpbWVkIHRvIHJlc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDozNDozNi43OTc4MDM5MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjY5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4X293bmVyX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzc3LVxcdFxcdHNsb3RfaWQgPSBwby1cXHUwMDNlcnhfcmluZy5oZWFkO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjM3ODpcXHRcXHRpZiAodGVzdF9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKSlcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzNzktXFx0XFx0XFx0Z290byBkcm9wX25fYWNjb3VudDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODA6XFx0XFx0X19zZXRfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzgxLVxcdH1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM4Ny1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzODg6XFx0XFx0XFx0X19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIzODktXFx0XFx0ZWxzZVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTA2LVxcdFxcdF9fcGFja2V0X3NldF9zdGF0dXMocG8sIGgucmF3LCBzdGF0dXMpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUwNzpcXHRcXHRfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUwOC1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ1MTU9c3RhdGljIGludCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCB1bmlvbiB0cGFja2V0X3JlcV91ICpyZXFfdSxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDUxOS1cXHRzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ1MjA6XFx0dW5zaWduZWQgbG9uZyAqcnhfb3duZXJfbWFwID0gTlVMTDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ1MjEtXFx0aW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTQ2MDYtXFx0XFx0XFx0aWYgKCF0eF9yaW5nKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA3OlxcdFxcdFxcdFxcdHJ4X293bmVyX21hcCA9IGJpdG1hcF9hbGxvYyhyZXEtXFx1MDAzZXRwX2ZyYW1lX25yLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYwOC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjA5OlxcdFxcdFxcdFxcdGlmICghcnhfb3duZXJfbWFwKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDYxMC1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3BnX3ZlYztcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0NC1cXHRcXHRpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gXFx1MDAzYz0gVFBBQ0tFVF9WMilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ2NDU6XFx0XFx0XFx0c3dhcChyYi1cXHUwMDNlcnhfb3duZXJfbWFwLCByeF9vd25lcl9tYXApO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY0Ni1cXHRcXHRyYi1cXHUwMDNlZnJhbWVfbWF4ID0gKHJlcS1cXHUwMDNldHBfZnJhbWVfbnIgLSAxKTtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDY4Mi1cXHRpZiAocGdfdmVjKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NjgzOlxcdFxcdGJpdG1hcF9mcmVlKHJ4X293bmVyX21hcCk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00Njg0LVxcdFxcdGlmICh0eF9yaW5nIFxcdTAwMjZcXHUwMDI2IGNsb3NpbmcpXFxuLS1cXG5uZXQvcGFja2V0L2ludGVybmFsLmg9NTQ9c3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciB7XFxuLS1cXG5uZXQvcGFja2V0L2ludGVybmFsLmgtNjgtXFx0dW5pb24ge1xcbm5ldC9wYWNrZXQvaW50ZXJuYWwuaDo2OTpcXHRcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0KnJ4X293bmVyX21hcDtcXG5uZXQvcGFja2V0L2ludGVybmFsLmgtNzAtXFx0XFx0c3RydWN0IHRwYWNrZXRfa2JkcV9jb3JlXFx0cHJiX2JkcWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjM2Ljg0MzQ3OTM2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTIzODkyNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBUUEFDS0VUIHYxL3YyIFBhY2tldCBSaW5nIEJ1ZmZlciBMZWFrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgbmV0L3BhY2tldC9pbnRlcm5hbC5oYCBhbmQgc3BlY2lmaWNhbGx5IHRoaXMgYHBhY2tldF9yaW5nX2J1ZmZlcmAgc3RydWN0LiBUaGUgdW5pb24gdXNpbmcgZWl0aGVyIGByeF9vd25lcl9tYXBgIG9yIGBwcmJfYmRxY2AgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUg4oCTIGNsYXNzaWMgdmVyc2lvbmluZyB0cmlja2VyeS4gYHJ4X293bmVyX21hcGAgaXMgZm9yIFRQQUNLRVRfVjEgYW5kIFRQQUNLRVRfVjIsIHdoaWxlIGBwcmJfYmRxY2AgaXMgZm9yIFYzLiBHb3QgaXQuXG5cbk5vdywgbXkgY29uY2VybiBpcyB0aGlzIGByeF9vd25lcl9tYXBgIHVzYWdlLiBUaGUgY29kZSdzIHNldHRpbmcgdGhlIGBzbG90X2lkYCBiaXQgaW4gYHJ4X293bmVyX21hcGAgaWYgdGhlIHBhY2tldCB2ZXJzaW9uIGlzIFYxIG9yIFYyLiBGaW5lLCBzbyBmYXIgc28gZ29vZCwgbGluZSAyMzgwLiBUaGUgcHJvYmxlbSBhcmlzZXMgaWYgYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiYCAqZmFpbHMqLiBJbiB0aGF0IGNhc2UsIGxvb2shIE9yaWdpbmFsbHksIGZvciBWMSBhbmQgVjIsIHRoZSBjb2RlICpuZXZlciogY2xlYXJlZCB0aGUgYml0ISBUaGUgYF9fc2V0X2JpdGAgd2FzIGNhbGxlZCwgYnV0IGlmIHRoZSBoZWFkZXIgcGFyc2luZyBmYWlsZWQsIHRoZSBiaXQgc3RheWVkIHNldC5cblxuVGhhdCdzIGEgcG90ZW50aWFsIGxlYWssIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbi4gVGhlIHNsb3Qgc3RheXMgbWFya2VkIGFzIG93bmVkIGZvcmV2ZXIsIG1lYW5pbmcgZWl0aGVyIHRoZSBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkIGNvbnRpbnVvdXNseSwgb3IgYSBzdGFsZSBzbG90IG93bmVyc2hpcCBzdGF0ZSBjb3VsZCBiZSB0cmlnZ2VyZWQuXG5cblNvLCB0aGlzIHBhdGNoLi4uIGFoLCBJIHNlZS4gSXQncyBjbGV2ZXJseSBhZGRyZXNzaW5nIHRoZSBpc3N1ZS4gVGhlIGRpZmYgc2hvd3MgdGhhdCBub3csIGlmIHRoZSB2ZXJzaW9uIGlzIFYxIG9yIFYyLCB0aGUgY29kZSAqZG9lcyogY2xlYXIgdGhlIGJpdCB3aXRoIGBfX2NsZWFyX2JpdChzbG90X2lkLCBwby1cdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcClgIGlmIHRoZSB2ZXJzaW9uIGlzIFYxIG9yIFYyIGJlZm9yZSBnb2luZyB0byBgZHJvcF9uX2FjY291bnRgLiBPdGhlcndpc2UsIGl0IHVzZXMgYHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoXHUwMDI2cG8tXHUwMDNlcnhfcmluZylgLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYml0IGlzIGFsd2F5cyBjbGVhcmVkIG9uIGVycm9yLCBwcmV2ZW50aW5nIHRoZSBvd25lcnNoaXAgbGVhay5cblxuVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIGNoZWNrIHRoZSBgc2xvdF9pZGAgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIGluIGB0cGFja2V0X3JjdmAgc3RhcnRpbmcgZnJvbSBsaW5lcyAyMjQ5IHRvIDIzODUgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaGlzIG5lZWRzIHRvIGJlIGJ1bGxldHByb29mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjYxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjQ2Ljc2NzM3NDUzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjQ1OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxuMjI0NjpcXHRcXHRyZXR1cm4gMDtcXG4yMjQ3OlxcdH1cXG4yMjQ4OlxcdFxcbjIyNDk6XFx0c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjIyNTA6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG4yMjUxOlxcdHtcXG4yMjUyOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0NPTlNVTUVEO1xcbjIyNTM6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gTlVMTDtcXG4yMjU0OlxcdFxcdHN0cnVjdCBwYWNrZXRfc29jayAqcG87XFxuMjI1NTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDtcXG4yMjU2OlxcdFxcdHVuaW9uIHRwYWNrZXRfdWhkciBoO1xcbjIyNTc6XFx0XFx0dTggKnNrYl9oZWFkID0gc2tiLVxcdTAwM2VkYXRhO1xcbjIyNTg6XFx0XFx0aW50IHNrYl9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4yMjU5OlxcdFxcdHVuc2lnbmVkIGludCBzbmFwbGVuLCByZXM7XFxuMjI2MDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXR1cyA9IFRQX1NUQVRVU19VU0VSO1xcbjIyNjE6XFx0XFx0dW5zaWduZWQgc2hvcnQgbWFjb2ZmLCBoZHJsZW47XFxuMjI2MjpcXHRcXHR1bnNpZ25lZCBpbnQgbmV0b2ZmO1xcbjIyNjM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmNvcHlfc2tiID0gTlVMTDtcXG4yMjY0OlxcdFxcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbjIyNjU6XFx0XFx0X191MzIgdHNfc3RhdHVzO1xcbjIyNjY6XFx0XFx0dW5zaWduZWQgaW50IHNsb3RfaWQgPSAwO1xcbjIyNjc6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gMDtcXG4yMjY4OlxcdFxcbjIyNjk6XFx0XFx0Lyogc3RydWN0IHRwYWNrZXR7MiwzfV9oZHIgaXMgYWxpZ25lZCB0byBhIG11bHRpcGxlIG9mIFRQQUNLRVRfQUxJR05NRU5ULlxcbjIyNzA6XFx0XFx0ICogV2UgbWF5IGFkZCBtZW1iZXJzIHRvIHRoZW0gdW50aWwgY3VycmVudCBhbGlnbmVkIHNpemUgd2l0aG91dCBmb3JjaW5nXFxuMjI3MTpcXHRcXHQgKiB1c2Vyc3BhY2UgdG8gY2FsbCBnZXRzb2Nrb3B0KC4uLiwgUEFDS0VUX0hEUkxFTiwgLi4uKS5cXG4yMjcyOlxcdFxcdCAqL1xcbjIyNzM6XFx0XFx0QlVJTERfQlVHX09OKFRQQUNLRVRfQUxJR04oc2l6ZW9mKCpoLmgyKSkgIT0gMzIpO1xcbjIyNzQ6XFx0XFx0QlVJTERfQlVHX09OKFRQQUNLRVRfQUxJR04oc2l6ZW9mKCpoLmgzKSkgIT0gNDgpO1xcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTE9PUEJBQ0spXFxuMjI3NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjI3ODpcXHRcXG4yMjc5OlxcdFxcdHNrID0gcHQtXFx1MDAzZWFmX3BhY2tldF9wcml2O1xcbjIyODA6XFx0XFx0cG8gPSBwa3Rfc2soc2spO1xcbjIyODE6XFx0XFxuMjI4MjpcXHRcXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIHNvY2tfbmV0KHNrKSkpXFxuMjI4MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjI4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NDYuNzY3NjM5MTkzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMDE5MzAxODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGBzbG90X2lkYCBpbml0aWFsaXplZCB0byAwLiBJZiB0aGUgcGFja2V0IHR5cGUgaXMgb2xkIChgcG8tXHUwMDNldHBfdmVyc2lvbiBcdTAwM2M9IFRQQUNLRVRfVjJgKSwgYHNsb3RfaWRgIGdldHMgdXBkYXRlZCB0byBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIHdlIHNldCBhIGJpdCBpbiBgcnhfb3duZXJfbWFwYCB1c2luZyBgX19zZXRfYml0YC4gTm93LCBpZiB3ZSBoaXQgYW4gZXJyb3IgbGF0ZXIsIHdlIG5lZWQgdG8gY2xlYXIgdGhhdCBiaXQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyBgc2xvdF9pZGAgdXNlZCB3aXRob3V0IGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkPyBCdXQgbG9va2luZyBhdCB0aGUgY29kZSwgaW4gdGhlIGVycm9yIHBhdGgsIGlmIHRoZSBwYWNrZXQgdHlwZSBpcyBvbGQsIHdlICpjbGVhciogdGhlIGJpdCB3ZSBwcmV2aW91c2x5ICpzZXQqICh1c2luZyBgX19jbGVhcl9iaXRgKS4gSWYgaXQncyBgVFBBQ0tFVF9WM2AsIGEgZGlmZmVyZW50IGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZXNldCB0aGUgZmlsbCBzdGF0dXMsIHNvIG5vIGJpdCBpcyBjbGVhcmVkLlxuXG5TbywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHdoZXJlIHBvdGVudGlhbCBwcm9ibGVtcyAqY291bGQqIG9jY3VyLiBGaXJzdCwgd2hhdCBkb2VzIHRoaXMgYml0IGluIHRoZSBgcnhfb3duZXJfbWFwYCBldmVuICptZWFuKj8gT2theSwgSSByZWNhbGwgaXQncyB1c2VkIHRvIHRyYWNrIG93bmVyc2hpcCBvZiByaW5nIGJ1ZmZlciBzbG90cy4gSW4gdGhlIGVycm9yIHBhdGgsIHdlIGFyZSAqcmVsZWFzaW5nKiBvd25lcnNoaXAuIElmIHRoZSBwYWNrZXQgdHlwZSBpcyBvbGQgKFx1MDAzYz0gVjIpLCB0aGVuIHdlIGNsZWFyIHRoZSBiaXQgdG8gcmVsZWFzZSBvd25lcnNoaXAuXG5cbkkgd2FzIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIHJlYWRzLiBMZXQncyBzZWUgd2hhdCBLTVNBTiBhbmQgS0FTQU4gd291bGQgZGV0ZWN0IGhlcmUuIEtNU0FOIGlzIGdyZWF0IGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIHJlYWRzIGFuZCBsZWFrcywgd2hpbGUgS0FTQU4gaXMgdGhlIGdvLXRvIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZS5cblxuRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgcHJvYmxlbXMgYmFzZWQgb24gdGhvc2UgS0FTQU4gLyBLTVNBTiBjaGVja3M/IFdlbGwsIG5vdGhpbmcncyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBmaWVsZC4gTm8gY29uZGl0aW9uYWwgbG9naWMgc2VlbXMgdG8gYmUgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UncmUgbm90IGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgZWl0aGVyLiBBbmQgdGhlcmUgYXJlIG5vIG9idmlvdXMgYm91bmRzIGlzc3VlcyB0aGF0IHdvdWxkIGNhdXNlIHJlYWQvd3JpdGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkhvd2V2ZXIsIGNvdWxkIGByeF9vd25lcl9tYXBgIGJlIE5VTEw/IExldCdzIHRyYWNlIGl0IGJhY2sgdG8gYHBhY2tldF9zZXRfcmluZ2AuIEFoLCB5ZXMsIGl0J3MgYWxsb2NhdGVkIHdpdGggYGJpdG1hcF9hbGxvY2AgYW5kIGluaXRpYWxpemVkIHdpdGggYF9fR0ZQX1pFUk9gLiBBbmQgdGhlIGNvZGUgKmRvZXMqIGNoZWNrIGZvciBhIE5VTEwgYHJ4X293bmVyX21hcGAgYWZ0ZXIgdGhlIGFsbG9jYXRpb24gYW5kIGp1bXBzIHRvIGBvdXRfZnJlZV9wZ192ZWNgIGlmIGl0IGlzIG51bGwsIHNvIGl0J3MgaW1wb3NzaWJsZSBmb3IgYHJ4X293bmVyX21hcGAgdG8gYmUgbnVsbC5cblxuQW5kLCBpZiBgc2xvdF9pZGAgaXMgb3V0IG9mIGJvdW5kcywgdGhhdCBzaG91bGQgYWxzbyBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgVUJTQU4sIGFzIGl0IHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYml0IGFjY2Vzcy4gQW5kIGBzbG90X2lkYCBzaG91bGQgYmUgYm91bmQgYnkgYHBvLVx1MDAzZXJ4X3JpbmcuaGVhZGAgYW5kIHRoZSBvdmVyYWxsIHJpbmcgc2l6ZS4gU28gbm8uXG5cbk5vdywgd2hhdCdzIHRoZSBhY3R1YWwgYnVnIHRoaXMgcGF0Y2ggZml4ZXM/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGhpc3RvcnkgYW5kIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjM0OjU3Ljc4Njk0MzE2MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODA2NzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9OTcyPXN0YXRpYyBpbnQgcHJiX3F1ZXVlX2Zyb3plbihzdHJ1Y3QgdHBhY2tldF9rYmRxX2NvcmUgKnBrYylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtOTc2LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6OTc3OnN0YXRpYyB2b2lkIHByYl9jbGVhcl9ibGtfZmlsbF9zdGF0dXMoc3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciAqcmIpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy05NzgtXFx0X19yZWxlYXNlcyhcXHUwMDI2cGtjLVxcdTAwM2VibGtfZmlsbF9pbl9wcm9nX2xvY2spXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMzg5LVxcdFxcdGVsc2VcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIzOTA6XFx0XFx0XFx0cHJiX2NsZWFyX2Jsa19maWxsX3N0YXR1cyhcXHUwMDI2cG8tXFx1MDAzZXJ4X3JpbmcpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjM5MS1cXHRcXHRnb3RvIGRyb3Bfbl9hY2NvdW50O1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTEwLVxcdH0gZWxzZSBpZiAocG8tXFx1MDAzZXRwX3ZlcnNpb24gPT0gVFBBQ0tFVF9WMykge1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUxMTpcXHRcXHRwcmJfY2xlYXJfYmxrX2ZpbGxfc3RhdHVzKFxcdTAwMjZwby1cXHUwMDNlcnhfcmluZyk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTEyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzQ6NTkuNTQ1MDQ0NDE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0MzY4MzQ2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gSnVzdGlmaWNhdGlvbiBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkcmVzc2luZyBhIGJ1ZyBpbiBgdHBhY2tldF9yY3YoKWAuIFNwZWNpZmljYWxseSwgd2hlbiBgdmlydGlvX25ldF9oZHJfZnJvbV9za2JgIGZhaWxzLCB0aGVyZSdzIGEgY2xlYW51cCBvdmVyc2lnaHQuIFRoZSBvcmlnaW5hbCBjb2RlIG9ubHkgY2xlYXJlZCB0aGUgYmxvY2sgc3RhdHVzIGZvciBgVFBBQ0tFVF9WM2AgcGFja2V0cywgbmVnbGVjdGluZyB0byBjbGVhciB0aGUgb3duZXJzaGlwIGJpdCBpbiBgcG8tXHUwMDNlcnhfcmluZy5yeF9vd25lcl9tYXBgIGZvciBgVFBBQ0tFVF9WMWAgYW5kIGBUUEFDS0VUX1YyYCBwYWNrZXRzLiBUaGlzIG1lYW5zIHNsb3RzIHdlcmUgZ2V0dGluZyBpbmNvcnJlY3RseSBtYXJrZWQgYXMgb3duZWQsIGV2ZW4gYWZ0ZXIgYW4gZXJyb3IuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGVuc3VyaW5nIHRoZSBvd25lcnNoaXAgYml0IGdldHMgY2xlYXJlZCByZWdhcmRsZXNzIG9mIHRoZSBwYWNrZXQgdmVyc2lvbi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyByZXF1aXJlcyBhIEtNU0FOIGNoZWNrLiBMZXQncyB0aGluayB0aHJvdWdoIHRoaXM6XG5cbjEuICAqKldoYXQncyBiZWluZyBjaGFuZ2VkPyoqIEl0J3MgYSBjbGVhbnVwIHBhdGguIFdlJ3JlICpyZW1vdmluZyogYSBwb3RlbnRpYWwgbWlzc2VkIHN0ZXAsIG5vdCBpbnRyb2R1Y2luZyBuZXcgY29tcGxleCBsb2dpYyBvciBhbGxvY2F0aW9ucy5cblxuMi4gICoqTWVtb3J5IEFjY2VzczoqKiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiB0aGUgYml0IG9wZXJhdGlvbnMgb3IgaW5kZXhpbmcgaXNzdWVzIGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYgd291bGQgYmUgaW1tZWRpYXRlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoYXQncyBhIHN0cm9uZyBsYXllciBvZiBwcm90ZWN0aW9uLlxuXG4zLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeToqKiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGhlcmUg4oCTIGBzbG90X2lkYCwgYHBvLVx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwYCwgYW5kIGBwby1cdTAwM2V0cF92ZXJzaW9uYCDigJMgYXJlIGFsbCBpbml0aWFsaXplZC4gYHNsb3RfaWRgIGlzIGRlcml2ZWQgZnJvbSBgcG8tXHUwMDNlcnhfcmluZy5oZWFkYCB3aGljaCBpcyBpbml0aWFsaXplZC4gYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm9lZCB3aXRoIGBiaXRtYXBfYWxsb2MoX19HRlBfWkVSTylgLiBUaGUgcGF0Y2ggaXRzZWxmIGlzbid0IGNyZWF0aW5nIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCdzIGZpeGluZyBhIHN0YXRlIGNsZWFudXAuIEZ1cnRoZXJtb3JlLCBpbiB0aGUgZXJyb3IgcGF0aCwgbm8ga2VybmVsIGRhdGEgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ug4oCTIHdlIGFyZSBzaW1wbHkganVtcGluZyB0byBgZHJvcF9uX2FjY291bnRgLCB3aGljaCBkb2VzIG5vdCB0cmFuc21pdCBpbmZvcm1hdGlvbiBiYWNrIHRvIHRoZSB1c2VyLlxuXG40LiAgKipLTVNBTiB2cyBLQVNBTjoqKiBUaGUga2V5IGRpZmZlcmVuY2UgaGVyZSBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgKnNwZWNpZmljYWxseSogZGVzaWduZWQgdG8gZmluZCB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBHaXZlbiB0aGF0IHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciB0aGF0IHRoZSB2YXJpYWJsZXMgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnl0aGluZyB0aGF0IHdvdWxkIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhLCBvciBkb2luZyBhbnl0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHdvdWxkIHJlcXVpcmUgbW9yZSBjYXJlZnVsIGluc3BlY3Rpb24gdGhhbiBLQVNBTiBwcm92aWRlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhbmFseXppbmcgdGhpcywgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIHBhdGNoIGlzIHJlbGF0aXZlbHkgc2ltcGxlLCBhbmQgdGhlIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkIGFyZSB2ZXJ5IHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGNoZWNrcy4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU1NiwiT3V0cHV0VG9rZW5zIjoyODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MzU6MDYuOTgxODg2NjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvci1oYW5kbGluZyBwYXRoIGluIGB0cGFja2V0X3JjdigpYCB3aGVyZSBmYWlsdXJlIGluIGB2aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYigpYCBjbGVhbmVkIHVwIGJsb2NrIHN0YXRlIG9ubHkgZm9yIGBUUEFDS0VUX1YzYCwgb21pdHRpbmcgYF9fY2xlYXJfYml0KHNsb3RfaWQsIHBvLVxcdTAwM2VyeF9yaW5nLnJ4X293bmVyX21hcClgIGZvciBgVFBBQ0tFVF9WMWAgYW5kIGBUUEFDS0VUX1YyYC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIChpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBqdW1wcyB0byBgZHJvcF9uX2FjY291bnRgKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgKGBzbG90X2lkYCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBleHBsaWNpdGx5IGFzc2lnbmVkIGBwby1cXHUwMDNlcnhfcmluZy5oZWFkYCwgYW5kIGByeF9vd25lcl9tYXBgIGlzIGFsbG9jYXRlZCB6ZXJvLWluaXRpYWxpemVkIHZpYSBgYml0bWFwX2FsbG9jYCkuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBhbHJlYWR5IGNvdmVyIGFueSBtZW1vcnkgc2FmZXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBiaXRtYXAgYm91bmRzIG9yIHBvaW50ZXIgdmFsaWRpdHkuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gYHRwYWNrZXRfcmN2KClgIHdoZXJlIGZhaWx1cmUgaW4gYHZpcnRpb19uZXRfaGRyX2Zyb21fc2tiKClgIGNsZWFuZWQgdXAgYmxvY2sgc3RhdGUgb25seSBmb3IgYFRQQUNLRVRfVjNgLCBvbWl0dGluZyBgX19jbGVhcl9iaXQoc2xvdF9pZCwgcG8tXFx1MDAzZXJ4X3Jpbmcucnhfb3duZXJfbWFwKWAgZm9yIGBUUEFDS0VUX1YxYCBhbmQgYFRQQUNLRVRfVjJgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UgKGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGp1bXBzIHRvIGBkcm9wX25fYWNjb3VudGApLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHNsb3RfaWRgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGV4cGxpY2l0bHkgYXNzaWduZWQgYHBvLVxcdTAwM2VyeF9yaW5nLmhlYWRgLCBhbmQgYHJ4X293bmVyX21hcGAgaXMgYWxsb2NhdGVkIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBiaXRtYXBfYWxsb2NgKS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFscmVhZHkgY292ZXIgYW55IG1lbW9yeSBzYWZldHkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGJpdG1hcCBib3VuZHMgb3IgcG9pbnRlciB2YWxpZGl0eS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[1] Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2] Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 14:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 10:35:18 +0000 UTC FinishedAt: 2026-09-13 10:35:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9hw9s/series-workflow9hw9s-convert-artifact-1056713210/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 10:35:28 +0000 UTC FinishedAt: 2026-09-13 10:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 10:35:28 +0000 UTC FinishedAt: 2026-09-13 10:52:30 +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:*2653106b-2b89-4660-85a7-fb956e32c42f,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-workflow9hw9s/series-workflow9hw9s-convert-artifact-1056713210/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": "f49ba21d-97ae-41ca-879f-14673f903c16", "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-workflow9hw9s/series-workflow9hw9s-build-action-3391486632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:35:28 +0000 UTC FinishedAt: 2026-09-13 10:52:20 +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:*2653106b-2b89-4660-85a7-fb956e32c42f,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-workflow9hw9s/series-workflow9hw9s-convert-artifact-1056713210/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": "f49ba21d-97ae-41ca-879f-14673f903c16", "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-workflow9hw9s/series-workflow9hw9s-build-action-3391486632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 10:52:30 +0000 UTC FinishedAt: 2026-09-13 10:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 10:52:30 +0000 UTC FinishedAt: 2026-09-13 10:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 10:52:30 +0000 UTC FinishedAt: 2026-09-13 10:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 10:52:30 +0000 UTC FinishedAt: 2026-09-13 10:52:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9hw9s/series-workflow9hw9s-convert-artifact-3604437589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 10:52:40 +0000 UTC FinishedAt: 2026-09-13 10:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 10:52:40 +0000 UTC FinishedAt: 2026-09-13 10:54:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f49ba21d-97ae-41ca-879f-14673f903c16,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-workflow9hw9s/series-workflow9hw9s-build-action-3391486632/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-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 10:54:33 +0000 UTC FinishedAt: 2026-09-13 10:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 10:54:33 +0000 UTC FinishedAt: 2026-09-13 10:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 10:54:33 +0000 UTC FinishedAt: 2026-09-13 11:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 10:54:33 +0000 UTC FinishedAt: 2026-09-13 11:14:42 +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:*2653106b-2b89-4660-85a7-fb956e32c42f,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-workflow9hw9s/series-workflow9hw9s-convert-artifact-3604437589/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": "a7f47fc8-febd-4422-9998-53810df78b45", "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-workflow9hw9s/series-workflow9hw9s-build-action-885554145/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:54:33 +0000 UTC FinishedAt: 2026-09-13 11:14:32 +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:*2653106b-2b89-4660-85a7-fb956e32c42f,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-workflow9hw9s/series-workflow9hw9s-convert-artifact-3604437589/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": "a7f47fc8-febd-4422-9998-53810df78b45", "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-workflow9hw9s/series-workflow9hw9s-build-action-885554145/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 11:14:42 +0000 UTC FinishedAt: 2026-09-13 11:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 11:14:42 +0000 UTC FinishedAt: 2026-09-13 11:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 11:14:42 +0000 UTC FinishedAt: 2026-09-13 11:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 11:14:42 +0000 UTC FinishedAt: 2026-09-13 11:16:31 +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:*a7f47fc8-febd-4422-9998-53810df78b45,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-workflow9hw9s/series-workflow9hw9s-build-action-885554145/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-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 14:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"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:*f49ba21d-97ae-41ca-879f-14673f903c16,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a7f47fc8-febd-4422-9998-53810df78b45,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-workflow9hw9s/series-workflow9hw9s-build-action-3391486632/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-workflow9hw9s/series-workflow9hw9s-build-action-885554145/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"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-workflow9hw9s/series-workflow9hw9s-convert-artifact-128527930/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 11:17:08 +0000 UTC FinishedAt: 2026-09-13 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9hw9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tpacket_rcv","packet_set_ring"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET"],"series_id":"0b3d2872-082f-4946-b62a-e275c26e6583","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 11:17:08 +0000 UTC FinishedAt: 2026-09-13 14:21:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f49ba21d-97ae-41ca-879f-14673f903c16,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a7f47fc8-febd-4422-9998-53810df78b45,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-workflow9hw9s/series-workflow9hw9s-build-action-3391486632/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-workflow9hw9s/series-workflow9hw9s-build-action-885554145/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-workflow9hw9s/series-workflow9hw9s-convert-artifact-128527930/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,}