Name: series-workflowpn7hx Phase: Succeeded StartedAt: 2026-09-14 12:53:35 +0000 UTC FinishedAt: 2026-09-14 18:20:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[0] Phase: Succeeded StartedAt: 2026-09-14 12:53:35 +0000 UTC FinishedAt: 2026-09-14 13:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 12:53:35 +0000 UTC FinishedAt: 2026-09-14 13:55:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_SIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_SIM" ], "series_id": "e15ecc43-78e5-4c9e-b08c-893a4888b671" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_genl_llc_sdreq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdClgIG9uIHRoZSBleGl0IHBhdGggYW5kIHVwZGF0ZXMgZXJyb3IganVtcCB0YXJnZXRzIHRvIGl0LlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSAoYHNkcmVxX2xpc3RgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgSU5JVF9ITElTVF9IRUFEYCBiZWZvcmUgYW55IGVycm9yIGJyYW5jaGVzKS5cbi0gVGhlIGNoYW5nZXMgc29sZWx5IGludm9sdmUgZXJyb3IgY2xlYW51cCBhbmQgZnJlZWluZyBoZWFwIG1lbW9yeSAoYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCkuIEFueSBwb3RlbnRpYWwgYnVncyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29ycnVwdGVkIGxpc3QgdHJhdmVyc2FsKSBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBTTFVCIGRlYnVnLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWM4NDZhM2Q3YjY0Y2VmM2JkMTczOTU2ZTA1Y2E2ZDVhNzMxMDk2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjMxOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmV0bGluay5jIGIvbmV0L25mYy9uZXRsaW5rLmNcbmluZGV4IDBjNTg4MjRjYjE1MGQuLjIyNGJkZmEyZGQwZGMgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uZXRsaW5rLmNcbkBAIC0xMTgxLDcgJiM0MzsxMTgxLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdFx0aWYgKHJjICE9IDApIHtcbiBcdFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBwdXRfbG9jYWw7XG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9saXN0O1xuIFx0XHR9XG4gXG4gXHRcdGlmICghc2RwX2F0dHJzW05GQ19TRFBfQVRUUl9VUkldKVxuQEAgLTEyMDAsNyAmIzQzOzEyMDAsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRzZHJlcSA9IG5mY19sbGNwX2J1aWxkX3NkcmVxX3Rsdih0aWQsIHVyaSwgdXJpX2xlbik7XG4gXHRcdGlmIChzZHJlcSA9PSBOVUxMKSB7XG4gXHRcdFx0cmMgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gcHV0X2xvY2FsO1xuJiM0MztcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbiBcdFx0fVxuIFxuIFx0XHR0bHZzX2xlbiAmIzQzOz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbkBAIC0xMjE1LDYgJiM0MzsxMjE1LDkgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcbiBcbiYjNDM7ZnJlZV9saXN0OlxuJiM0MztcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpO1xuJiM0MztcbiBwdXRfbG9jYWw6XG4gXHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE1bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWM4NDZhM2Q3YjY0Y2VmM2JkMTczOTU2ZTA1Y2E2ZDVhNzMxMDk2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEzOjMxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uZXRsaW5rLmMgYi9uZXQvbmZjL25ldGxpbmsuYwppbmRleCAwYzU4ODI0Y2IxNTBkLi4yMjRiZGZhMmRkMGRjIDEwMDY0NAotLS0gYS9uZXQvbmZjL25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25ldGxpbmsuYwpAQCAtMTE4MSw3ICYjNDM7MTE4MSw3IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAkJaWYgKHJjICE9IDApIHsKIAkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gcHV0X2xvY2FsOwomIzQzOwkJCWdvdG8gZnJlZV9saXN0OwogCQl9CiAKIAkJaWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pCkBAIC0xMjAwLDcgJiM0MzsxMjAwLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJc2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pOwogCQlpZiAoc2RyZXEgPT0gTlVMTCkgewogCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBwdXRfbG9jYWw7CiYjNDM7CQkJZ290byBmcmVlX2xpc3Q7CiAJCX0KIAogCQl0bHZzX2xlbiAmIzQzOz0gc2RyZXEtJmd0O3Rsdl9sZW47CkBAIC0xMjE1LDYgJiM0MzsxMjE1LDkgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCXJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsICZhbXA7c2RyZXFfbGlzdCwgdGx2c19sZW4pOwogCiYjNDM7ZnJlZV9saXN0OgomIzQzOwluZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCgmYW1wO3NkcmVxX2xpc3QpOwomIzQzOwogcHV0X2xvY2FsOgogCW5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GQyBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBpbiBgbmV0L25mYy9uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZGlmZiBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgYGdvdG9gIHRhcmdldCBmb3IgZXJyb3IgaGFuZGxpbmcgaXMgYmVpbmcgY2hhbmdlZCBmcm9tIGBwdXRfbG9jYWxgIHRvIGBmcmVlX2xpc3RgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVsYXRlZCB0byBmcmVlaW5nIGEgbGlzdCBvZiBTRFAgKFNlcnZpY2UgRGlzY292ZXJ5IFByb3RvY29sKSBUTFZzIChUeXBlLUxlbmd0aC1WYWx1ZSkuCgpOb3csIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMsIEkgc2hvdWxkIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9uZmMvbmV0bGluay5jYCwgYXJvdW5kIGxpbmUgMTE4MS4gSSBuZWVkIHRvIGtub3cgaG93IGBzZHJlcV9saXN0YCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgZW5zdXJlcyB0aGF0IHRoZSBgc2RyZXFfbGlzdGAgaXMgYWx3YXlzIGZyZWVkLCBldmVuIGlmIGFuIGVycm9yIG9jY3VycyBlYXJseSBpbiB0aGUgZnVuY3Rpb24uIEJlZm9yZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNhbGwsIHRoZSBgc2RyZXFfbGlzdGAgd291bGRuJiMzOTt0IGJlIGZyZWVkLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4ga2VybmVsIGNvZGUgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIHB1cnBvc2Ugb2YgdGhlIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3Igc2ltaWxhciBwYXR0ZXJucyBhbmQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0gfHxcbjExNTE6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tORkNfQVRUUl9MTENfU0RQXSlcbjExNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTUzOlx0XG4xMTU0Olx0XHRpZHggPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xuMTE1NTpcdFxuMTE1NjpcdFx0ZGV2ID0gbmZjX2dldF9kZXZpY2UoaWR4KTtcbjExNTc6XHRcdGlmICghZGV2KVxuMTE1ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjExNTk6XHRcbjExNjA6XHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTE2MTpcdFxuMTE2MjpcdFx0aWYgKGRldi1cdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xuMTE2MzpcdFx0XHRyYyA9IC1FTk9MSU5LO1xuMTE2NDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTY1Olx0XHR9XG4xMTY2Olx0XG4xMTY3Olx0XHRsb2NhbCA9IG5mY19sbGNwX2ZpbmRfbG9jYWwoZGV2KTtcbjExNjg6XHRcdGlmICghbG9jYWwpIHtcbjExNjk6XHRcdFx0cmMgPSAtRU5PREVWO1xuMTE3MDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2c2RyZXFfbGlzdCk7XG4xMTc0Olx0XG4xMTc1Olx0XHR0bHZzX2xlbiA9IDA7XG4xMTc2Olx0XG4xMTc3Olx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xuMTE3ODpcdFx0XHRyYyA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzZHBfYXR0cnMsIE5GQ19TRFBfQVRUUl9NQVgsXG4xMTc5Olx0XHRcdFx0XHRcdFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXG4xMTgwOlx0XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbjExODE6XHRcbjExODI6XHRcdFx0aWYgKHJjICE9IDApIHtcbjExODM6XHRcdFx0XHRyYyA9IC1FSU5WQUw7XG4xMTg0Olx0XHRcdFx0Z290byBmcmVlX2xpc3Q7XG4xMTg1Olx0XHRcdH1cbjExODY6XHRcbjExODc6XHRcdFx0aWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pXG4xMTg4Olx0XHRcdFx0Y29udGludWU7XG4xMTg5Olx0XG4xMTkwOlx0XHRcdHVyaV9sZW4gPSBubGFfbGVuKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTkxOlx0XHRcdGlmICh1cmlfbGVuID09IDApXG4xMTkyOlx0XHRcdFx0Y29udGludWU7XG4xMTkzOlx0XG4xMTk0Olx0XHRcdHVyaSA9IG5sYV9kYXRhKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTk1Olx0XHRcdGlmICgqdXJpID09IDApXG4xMTk2Olx0XHRcdFx0Y29udGludWU7XG4xMTk3Olx0XG4xMTk4Olx0XHRcdHRpZCA9IGxvY2FsLVx1MDAzZXNkcmVxX25leHRfdGlkJiM0MzsmIzQzOztcbjExOTk6XHRcbjEyMDA6XHRcdFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xuMTIwMTpcdFx0XHRpZiAoc2RyZXEgPT0gTlVMTCkge1xuMTIwMjpcdFx0XHRcdHJjID0gLUVOT01FTTtcbjEyMDM6XHRcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbjEyMDQ6XHRcdFx0fVxuMTIwNTpcdFxuMTIwNjpcdFx0XHR0bHZzX2xlbiAmIzQzOz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbjEyMDc6XHRcbjEyMDg6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSwgXHUwMDI2c2RyZXFfbGlzdCk7XG4xMjA5Olx0XHR9XG4xMjEwOlx0XG4xMjExOlx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2c2RyZXFfbGlzdCkpIHtcbjEyMTI6XHRcdFx0cmMgPSAtRUlOVkFMO1xuMTIxMzpcdFx0XHRnb3RvIHB1dF9sb2NhbDtcbjEyMTQ6XHRcdH1cbjEyMTU6XHRcbjEyMTY6XHRcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcbjEyMTc6XHRcbjEyMTg6XHRmcmVlX2xpc3Q6XG4xMjE5Olx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KTtcbjEyMjA6XHRcbjEyMjE6XHRwdXRfbG9jYWw6XG4xMjIyOlx0XHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuMTIyMzpcdFxuMTIyNDpcdGV4aXQ6XG4xMjI1Olx0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTIyNjpcdFxuMTIyNzpcdFx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbjEyMjg6XHRcbjEyMjk6XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTY5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTExDIFNEUkVRIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBmdW5jdGlvbiwgcHJlLXBhdGNoLCBpdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgZXhpc3RzLiBTcGVjaWZpY2FsbHksIGlmIGBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWRgIChsaW5lIDExODIpIG9yIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIChsaW5lIDEyMDEpIGVuY291bnRlcnMgYW4gZXJyb3IsIHRoZSBjb2RlIGp1bXBzIGRpcmVjdGx5IHRvIGBwdXRfbG9jYWxgLiBUaGUgcHJvYmxlbT8gQW55IGVsZW1lbnRzIGFscmVhZHkgYXBwZW5kZWQgdG8gYHNkcmVxX2xpc3RgIHdvdWxkIGJlIG9ycGhhbmVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4KCkhhbmcgb24uLi4gdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgSSBuZWVkIHRvIGNvbnNpZGVyLiBMb29rIGF0IHRoZSBwb3N0LWxvb3Agc3RydWN0dXJlOgoKYGBgYwoJcmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgJmFtcDtzZHJlcV9saXN0LCB0bHZzX2xlbik7CgpwdXRfbG9jYWw6CgluZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpOwpgYGAKClRoZSBjYWxsIHRvIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgY29tZXMgKmJlZm9yZSogYHB1dF9sb2NhbGAuIE5vdywgSSYjMzk7bSBxdWVzdGlvbmluZyB3aGV0aGVyIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgYWN0dWFsbHkgY29uc3VtZXMgdGhlIGBzZHJlcV9saXN0YCBvciBub3QuIElzIHRoZSBsaXN0JiMzOTtzIGRhdGEgYmVpbmcgcHJvcGVybHkgaGFuZGxlZCBhZnRlciB0aGUgY2FsbD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlIGxpc3QgaXMgYmVpbmcgZnJlZWQsIG1vdmVkLCBvciBjb3BpZWQgdGhlcmUuIEkgY2Fubm90IHZlcmlmeSB0aGlzIHVubGVzcyBJIGNoZWNrIHRoZSBmdW5jdGlvbiBib2R5LiBUaGUgbGVhaywgb3IgbGFjayBvZiBsZWFrLCBkZXBlbmRzIG9uIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3VyLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2Ugb2YgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCByaWdodCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3NlbmRfc25sX3NkcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTIzOD1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTIzOS1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQwOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwLmgtMjQxLVx0XHRcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTY5PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Mi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5MzppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5NC1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTEyMTUtXG5uZXQvbmZjL25ldGxpbmsuYzoxMjE2Olx0cmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xubmV0L25mYy9uZXRsaW5rLmMtMTIxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjIwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNgOgoKKipBbmFseXppbmcgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCoqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgLiBMZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIHNpdHRpbmcgdGhlcmUgaW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwgZ2l2ZW4gdGhlIG5hbWUsIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgc2VuZGluZyBvZiBhICYjMzQ7U2VydmljZSBOYW1lIExvb2t1cCAoU05MKSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSkmIzM0OyBtZXNzYWdlIHdpdGhpbiB0aGUgTExDUCAoTGluayBMYXllciBDb250cm9sIFByb3RvY29sKSBjb250ZXh0LiBMTENQLCBhcyBJIGtub3cgaXQsIGlzIHRoYXQgY3J1Y2lhbCBsYXllciBzaXR0aW5nIGFib3ZlIE5GQyBhbmQgb2ZmZXJpbmcgY29ubmVjdGlvbi1vcmllbnRlZCBjb21tdW5pY2F0aW9uLgoKVGhlcmVmb3JlLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBmb2xsb3dpbmcgcG9pbnRzLCBhcyB0aGlzIGtpbmQgb2YgcmVxdWVzdCBpcyB0aGUga2V5IHRvIHNlcnZpY2UgZGlzY292ZXJ5OgoqICAgKipQdXJwb3NlOioqIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgYWJvdXQgc2VhcmNoaW5nIGZvciBhdmFpbGFibGUgTkZDIHNlcnZpY2VzIG9uIGEgcmVtb3RlIGRldmljZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBTZXJ2aWNlIE5hbWUgTG9va3VwIHByb2Nlc3MuCiogICAqKkxMQ1AgQ29udGV4dDoqKiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmZhY2VzIGRpcmVjdGx5IHdpdGggdGhlIExMQ1AgcHJvdG9jb2wgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgZm9ybWF0cyBhbmQgdHJhbnNtaXRzIHRoZSBTRFJFUSBtZXNzYWdlIGF0IHRoZSBMTENQIGxldmVsLiBQcm9iYWJseSB1c2luZyBzcGVjaWZpYyBMTENQIHByaW1pdGl2ZXMvQVBJcywgbm90IHJhdyBORkMgc2lnbmFsaW5nLgoqICAgKipEYXRhIFN0cnVjdHVyZToqKiBJJiMzOTttIGd1ZXNzaW5nIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGFuIFNEUkVRLCBob2xkaW5nIHRoZSBzZXJ2aWNlIG5hbWUgdG8gYmUgbG9va2VkIHVwIChvciBwZXJoYXBzIGEgd2lsZGNhcmQgaW5kaWNhdGluZyBhIGJyb2FkIHNlYXJjaCkuIFRoZSBmdW5jdGlvbiBtaWdodCBwb3B1bGF0ZSB0aGlzIHN0cnVjdHVyZSBhbmQgdGhlbiBwYXNzIGl0IHRvIHRoZSBsb3dlciBsYXllcnMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFNlbmRpbmcgYSByZXF1ZXN0IGlzIG9uZSB0aGluZywgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBlcnJvcnMgYW5kIHRpbWVvdXRzIGlzIGFub3RoZXIuIEkmIzM5O2xsIGJlIGN1cmlvdXMgdG8gc2VlIGhvdyBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGhhbmRsZXMgdGhpbmdzIGlmIHRoZSBjb21tdW5pY2F0aW9uIGZhaWxzLCBvciBpZiB0aGVyZSYjMzk7cyBubyByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlLiBBcmUgdGhlcmUgcmV0cnkgbWVjaGFuaXNtcz8gVGltZW91dHM/IEVycm9yIGNvZGVzIHBhc3NlZCBiYWNrPwoqICAgKipBc3luY2hyb25vdXMgTmF0dXJlOioqIExMQ1AgYW5kIE5GQyBhcmUgb2Z0ZW4gYXN5bmNocm9ub3VzLiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGtpY2sgb2ZmIHRoZSBTRFJFUSB0cmFuc21pc3Npb24gYW5kIHRoZW4gcmV0dXJuLCB3aXRoIGEgY2FsbGJhY2sgb3IgY29tcGxldGlvbiBoYW5kbGVyIGJlaW5nIHVzZWQgdG8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgbGF0ZXIuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIHByb3RlY3Qgc2hhcmVkIHJlc291cmNlcywgaWYgYW55LgoqICAgKipJbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmdW5jdGlvbnM6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gb3RoZXIgTExDUCBmdW5jdGlvbnMgb3IgTkZDIHN0YWNrIGNvbXBvbmVudHM/IERvZXMgaXQgY2FsbCBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIGBsbGNwX2NvbW1hbmRzLmNgIG9yIGVsc2V3aGVyZSB0byBjb25zdHJ1Y3QgdGhlIFNEUkVRPyBEb2VzIGl0IGNhbGwgYSBmdW5jdGlvbiB0byByZWNlaXZlIHRoZSBTRFJFUz8KCkxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGlzIGZ1bmN0aW9uLiBJIGFtIHJlYWR5IHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3BfY29tbWFuZHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0XHRyZXR1cm4gMDtcbiA1OTE6XHR9XG4gNTkyOlx0XG4gNTkzOlx0aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gNTk0Olx0XHRcdFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKVxuIDU5NTpcdHtcbiA1OTY6XHRcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHJlcTtcbiA1OTc6XHRcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuIDU5ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1OTk6XHRcbiA2MDA6XHRcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xuIDYwMTpcdFx0aWYgKElTX0VSUihza2IpKVxuIDYwMjpcdFx0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuIDYwMzpcdFxuIDYwNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV9sb2NrKTtcbiA2MDU6XHRcbiA2MDY6XHRcdGlmIChobGlzdF9lbXB0eShcdTAwMjZsb2NhbC1cdTAwM2VwZW5kaW5nX3NkcmVxcykpXG4gNjA3Olx0XHRcdG1vZF90aW1lcihcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV90aW1lcixcbiA2MDg6XHRcdFx0XHQgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcygzICogbG9jYWwtXHUwMDNlcmVtb3RlX2x0bykpO1xuIDYwOTpcdFxuIDYxMDpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZHJlcSwgbiwgdGx2X2xpc3QsIG5vZGUpIHtcbiA2MTE6XHRcdFx0cHJfZGVidWcoXCYjMzQ7dGlkICVkIGZvciAlc1xcblwmIzM0Oywgc2RyZXEtXHUwMDNldGlkLCBzZHJlcS1cdTAwM2V1cmkpO1xuIDYxMjpcdFxuIDYxMzpcdFx0XHRza2JfcHV0X2RhdGEoc2tiLCBzZHJlcS1cdTAwM2V0bHYsIHNkcmVxLVx1MDAzZXRsdl9sZW4pO1xuIDYxNDpcdFxuIDYxNTpcdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSk7XG4gNjE2Olx0XG4gNjE3Olx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnNkcmVxLVx1MDAzZW5vZGUsIFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcbiA2MTg6XHRcdH1cbiA2MTk6XHRcbiA2MjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV9sb2NrKTtcbiA2MjE6XHRcbiA2MjI6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmxvY2FsLVx1MDAzZXR4X3F1ZXVlLCBza2IpO1xuIDYyMzpcdFxuIDYyNDpcdFx0cmV0dXJuIDA7XG4gNjI1Olx0fVxuIDYyNjpcdFxuIDYyNzpcdGludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbilcbiA2Mjg6XHR7XG4gNjI5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSkgVHJhbnNtaXNzaW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBmdW5jdGlvbi4gSG1tLCB0aGUgZmlyc3Qgc3RlcCBpcyBhbGxvY2F0aW5nIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApIHVzaW5nIGBuZmNfbGxjcF9hbGxvY2F0ZV9zbmxgLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIGFuIGVycm9yIHBvaW50ZXIsIGBQVFJfRVJSKHNrYilgLiBJbXBvcnRhbnRseSwgaW4gdGhpcyBmYWlsdXJlIHNjZW5hcmlvLCB0aGUgYHNkcmVxX2xpc3RgIGlzbiYjMzk7dCB0b3VjaGVkLCByZW1haW5pbmcgYXMgaXQgd2FzLiBIb3dldmVyLCBpZiB0aGUgYWxsb2NhdGlvbiAqc3VjY2VlZHMqLCB0aGUgY29kZSBtb3ZlcyB0aGUgZWxlbWVudHMgZnJvbSBgc2RyZXFfbGlzdGAgdG8gYGxvY2FsLSZndDtwZW5kaW5nX3NkcmVxc2AuIFRoaXMgbWVhbnMgYHNkcmVxX2xpc3RgIGlzIG5vdyBlbXB0eS4gR29vZC4gVGhlIGBzZHJlcV9sb2NrYCBtdXRleCBpcyBhbHNvIGFjcXVpcmVkLCBhbmQgdGhlIGBzZHJlcV90aW1lcmAgaXMgc3RhcnRlZCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgcGVuZGluZyBTRFJFUXMsIGFuZCBlYWNoIFNEUkVRIGlzIHByb2Nlc3NlZC4KCk5vdywgbG9va2luZyBhdCBgbmZjX2dlbmxfbGxjX3NkcmVxYCwgaXQgY2FsbHMgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCB3aXRoIGBzZHJlcV9saXN0YC4gVGhlbiwgYWZ0ZXIgdGhlIGNhbGwsIGl0IGhpdHMgYGZyZWVfbGlzdDpgIGFuZCBjYWxscyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtzZHJlcV9saXN0KWAuCgpIb2xkIG9uLiBXZSBqdXN0IGVzdGFibGlzaGVkIHRoYXQgdGhlIGBzZHJlcV9saXN0YCBpcyAqZW1wdHkqIGFmdGVyIGEgKnN1Y2Nlc3NmdWwqIHRyYW5zbWlzc2lvbi4gU28sIHdoYXQgaXMgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBkb2luZz8gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgbGllcywgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgY2xlYW51cCBtaWdodCBiZS4gSXQmIzM5O3MgaW1wZXJhdGl2ZSB0aGF0IEkgdmVyaWZ5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBvciBtZW1vcnkgY29ycnVwdGlvbi4gSSBtdXN0IGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgdGhlIGxpc3QgaXMgdHJ1bHkgZnJlZWQsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgU0RSRVEgbGlmZWN5Y2xlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3AuaD0yMzI9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xubmV0L25mYy9sbGNwLmgtMjM0LXZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE4MS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTcxLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV90aW1lb3V0X3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZsb2NhbC1cdTAwM2VwZW5kaW5nX3NkcmVxcyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3My19XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy00MjMtXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzZHJlc19saXN0KTtcbm5ldC9uZmMvbmV0bGluay5jLTQyNS1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYz0xMTM3PXN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XG5uZXQvbmZjL25ldGxpbmsuYzoxMjE5Olx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7XG5uZXQvbmZjL25ldGxpbmsuYy0xMjIwLVxuLS1cbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL25mYy5oOjU5OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpO1xubmV0L25mYy9uZmMuaC02MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBmdW5jdGlvbi4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AgYW5kIGhhdmUgYSBsb29rLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgZmFpcmx5IHN0YW5kYXJkIG1lbW9yeSBkZWFsbG9jYXRpb24gcm91dGluZSwgcHJlc3VtYWJseSBjbGVhbmluZyB1cCBhIGxpbmtlZCBsaXN0IG9yIGFuIGFycmF5IG9mIHNvbWUgc29ydCByZWxhdGVkIHRvIFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIFRMVnMgKFR5cGUtTGVuZ3RoLVZhbHVlKS4gS25vd2luZyB0aGUgY29udGV4dCBpcyBhbHdheXMga2V5IHdpdGggdGhlc2UgTkZDIGltcGxlbWVudGF0aW9ucywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIGJvdW5kYXJ5IGNoZWNrcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIExldCYjMzk7cyBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgdGhlIGNsZWFudXAsIGVzcGVjaWFsbHkgaW4gcG90ZW50aWFsbHkgZXJyb3ItcHJvbmUgc2NlbmFyaW9zLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eSBncml0dHkgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb21tYW5kcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzQ6XHR2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxuIDE3NTpcdHtcbiAxNzY6XHRcdGtmcmVlKHNkcC1cdTAwM2V0bHYpO1xuIDE3NzpcdFx0a2ZyZWUoc2RwKTtcbiAxNzg6XHR9XG4gMTc5Olx0XG4gMTgwOlx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbiAxODE6XHR7XG4gMTgyOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xuIDE4MzpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gMTg0Olx0XG4gMTg1Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcCwgbiwgaGVhZCwgbm9kZSkge1xuIDE4NjpcdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RwLVx1MDAzZW5vZGUpO1xuIDE4NzpcdFxuIDE4ODpcdFx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHYoc2RwKTtcbiAxODk6XHRcdH1cbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0aW50IG5mY19sbGNwX3BhcnNlX2diX3RsdihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIDE5MzpcdFx0XHRcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pXG4gMTk0Olx0e1xuIDE5NTpcdFx0Y29uc3QgdTggKnRsdiA9IHRsdl9hcnJheTtcbiAxOTY6XHRcdHU4IHR5cGUsIGxlbmd0aDtcbiAxOTc6XHRcdHUxNiBvZmZzZXQgPSAwO1xuIDE5ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTExDUCBTRFAgUmVxdWVzdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtzZHJlcV9saXN0KWAgZnVuY3Rpb24uIEl0JiMzOTtzIHN1cHBvc2VkIHRvIGNsZWFuIHVwIHRoZSBgc2RyZXFfbGlzdGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZhaWxzLCB3aGV0aGVyIGR1ZSB0byBhbiBhbGxvY2F0aW9uIGVycm9yIG9yIHNvbWV0aGluZyB3aXRoaW4gdGhlIGxvb3AgaXRzZWxmICh0aGF0IGBnb3RvIGZyZWVfbGlzdGApLCBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgYW55IHJlbWFpbmluZyBpdGVtcyBpbiBgc2RyZXFfbGlzdGAuICBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQsIG9mIGNvdXJzZSwgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCAqc3VjY2VlZHMqLCB0aGUgYHNkcmVxX2xpc3RgIHNob3VsZCBiZSBlbXB0eSwgc28gdGhlIGBmcmVlX3NkcGAgY2FsbCBpcywgZWZmZWN0aXZlbHksIGEgbm8tb3AuIFN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkJ1dCB0aGVuLCBob2xkIG9uLi4uIGxpbmUgMTIxMS4gIEl0IGNoZWNrcyBpZiBgaGxpc3RfZW1wdHkoJmFtcDtzZHJlcV9saXN0KWAgYW5kLCBpZiBzbywgcmV0dXJucyBhbiBgRUlOVkFMYCAqYW5kKiBqdW1wcyB0byBgcHV0X2xvY2FsYC4gSG1tLCBzbyBpZiBgc2RyZXFfbGlzdGAgaXMgZW1wdHksIGdvaW5nIHRvIGBwdXRfbG9jYWxgIG9yIGBmcmVlX2xpc3RgIGlzIHRoZSBzYW1lIHRoaW5nLCBiZWNhdXNlIGl0JiMzOTtzIGFscmVhZHkgZW1wdHkhIEl0JiMzOTtzIGEgcmVkdW5kYW50IGNoZWNrLCB3aGljaCAqY291bGQqIGJlIGEgYnVnIGJ1dCBwcm9iYWJseSBpc24mIzM5O3QgYSAqc2VyaW91cyogb25lLiBJdCBkb2VzIHJhaXNlIGEgcXVlc3Rpb24gdGhvdWdoLgoKTm93LCBsZXQmIzM5O3MgYmFjayB1cC4gV2hlcmUgZG9lcyBgbmZjX2dlbmxfbGxjX3NkcmVxYCBldmVuIGdldCBjYWxsZWQ/ICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBDYW4gSSB0cmlnZ2VyIGl0IGVhc2lseSBpbiBhIHN5emthbGxlciBzZXR1cCBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChRRU1VL0dDRSk/IFdhaXQsIHRoYXQmIzM5O3MgcmlnaHQuLi4gTkZDIGhhcyB2aXJ0dWFsIGRldmljZXMsIGFuZCBJIGJlbGlldmUgbmV0bGluayBjb21tYW5kcy4gQ2FuIG5ldGxpbmsgTkZDIGNvbW1hbmRzIGJlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2U/IFRoYXQmIzM5O3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQuIEJldHRlciBsb29rIGF0IGBuZXQvbmZjL25ldGxpbmsuY2AgYW5kIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZjX2dlbmxfbGxjX3NkcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYz0xMDY4PXN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NldF9wYXJhbXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xMTM2LVxubmV0L25mYy9uZXRsaW5rLmM6MTEzNzpzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L25mYy9uZXRsaW5rLmMtMTEzOC17XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIG5mY19nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3NjMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC9uZmMvbmV0bGluay5jOjE3NjQ6XHRcdC5kb2l0ID0gbmZjX2dlbmxfbGxjX3NkcmVxLFxubmV0L25mYy9uZXRsaW5rLmMtMTc2NS1cdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIGludG8gTkZDIEdlbmVyaWMgTmV0bGluayBhbmQgU3l6a2FsbGVyKioKCk9rYXksIHNvIGBuZmNfZ2VubF9sbGNfc2RyZXFgIC0gdGhhdCYjMzk7cyB0aGUgaGFuZGxlciBmb3IgdGhlIGBORkNfQ01EX0xMQ19TRFJFUWAgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSB3b25kZXIgaWYgU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlIE5GQyBuZXRsaW5rIGludGVyZmFjZT8gVGhhdCYjMzk7cyBhIGdvb2QgcXVlc3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHN1cHBvcnQgZnJvbSBTeXprYWxsZXIgYWxyZWFkeSwgb3IgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyB2aXJ0dWFsIE5GQyBkZXZpY2VzLiBPciwgcGVyaGFwcywgZ2VuZXJpYyBuZXRsaW5rIGNhbiBiZSBzZW50IGV2ZW4gd2l0aG91dCBhbnkgYWN0dWFsIGhhcmR3YXJlIG9yIHRocm91Z2ggc29tZSB2aXJ0dWFsIHNldHVwPwoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRldmljZSBkcml2ZXJzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL25mY2AgYW5kIGBuZXQvbmZjYCBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIGFueSBraW5kIG9mIE5GQyBzaW11bGF0b3IsIHZpcnR1YWwgZGV2aWNlLCBvciBldmVuIGEgVVNCIGRvbmdsZSBleGlzdC4gRmluZGluZyBhIHZpcnR1YWwgZGV2aWNlIHdvdWxkIGJlIGlkZWFsIGZvciByZXByb2R1Y2libGUgZnV6emluZy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgbGVhZCBtZSB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19zaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjQ1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTkZDIGRyaXZlciBzaXR1YXRpb24gd2l0aGluIHRoaXMgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiB0aGUgYGRyaXZlcnMvbmZjYCBkaXJlY3RvcnkuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYXZhaWxhYmxlIGJ1aWxkaW5nIGJsb2NrcyBhcmUsIGhvdyBtYW55IGRpZmZlcmVudCBjaGlwc2V0cyBhcmUgc3VwcG9ydGVkLCBhbmQgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgc29mdHdhcmUgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmlsZXM6IGxpa2VseSB0aGUgY29yZSBORkMgZHJpdmVyIGVudHJ5IHBvaW50cywgZGV2aWNlLXNwZWNpZmljIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgKHRob3NlIHdpbGwgYmUgdGhlIG9uZXMgd2l0aCB0aGUgY2hpcCBuYW1lcyBpbiB0aGVpciBmaWxlIG5hbWVzKSwgYW55IHJlbGV2YW50IGZyYW1ld29yayBjb2RlLCBhbmQgcG90ZW50aWFsbHkgYW55IGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gaW5mZXIgd2hhdCBraW5kIG9mIGFyY2hpdGVjdHVyZSBoYXMgYmVlbiB1c2VkLCB3aGV0aGVyIGl0IHVzZXMgYSB0eXBpY2FsIGxheWVyZWQgbW9kZWwgKE5GQyBjb3JlLCBjb250cm9sbGVyIGRyaXZlcnMsIHNwZWNpZmljIGNoaXAgZHJpdmVycyksIG9yIGlmIHRoZXkmIzM5O3ZlIHRha2VuIGEgbW9yZSBtb25vbGl0aGljIGFwcHJvYWNoLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgY29tbW9uYWxpdGllcyBiZXR3ZWVuIGNoaXAgZHJpdmVycywgYW5kIHBlcmhhcHMgd2hpY2ggaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZC4gVWx0aW1hdGVseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHVuZGVyc3RhbmRpbmcgc28gSSBjYW4gZGl2ZSBkZWVwZXIgaW50byBhbnl0aGluZyB0aGF0IGNhdGNoZXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O21laV9waHkuYyYjMzQ7LAogICAgJiMzNDttZWlfcGh5LmgmIzM0OywKICAgICYjMzQ7bmZjc2ltLmMmIzM0OywKICAgICYjMzQ7cG9ydDEwMC5jJiMzNDssCiAgICAmIzM0O3RyZjc5NzBhLmMmIzM0OywKICAgICYjMzQ7dmlydHVhbF9uY2lkZXYuYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDtmZHAmIzM0OywKICAgICYjMzQ7bWljcm9yZWFkJiMzNDssCiAgICAmIzM0O25mY21ydmwmIzM0OywKICAgICYjMzQ7bnhwLW5jaSYjMzQ7LAogICAgJiMzNDtwbjUzMyYjMzQ7LAogICAgJiMzNDtwbjU0NCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41JiMzNDssCiAgICAmIzM0O3N0LW5jaSYjMzQ7LAogICAgJiMzNDtzdDIxbmZjYSYjMzQ7LAogICAgJiMzNDtzdDk1aGYmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GQyBTdWJzeXN0ZW0gZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBORkMgc3Vic3lzdGVtIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRvIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuIEkgc2VlIGEgZmV3IGtleSBwaWVjZXM6IGBuZmNzaW0uY2AsIGB2aXJ0dWFsX25jaWRldi5jYCwgYW5kIFVTQiBkcml2ZXJzIGxpa2UgYHBvcnQxMDAuY2AgYW5kIGBwbjUzMy91c2IuY2AuIGB2aXJ0dWFsX25jaWRldi5jYCBpcyBhIHZpcnR1YWwgTkNJIGRldmljZSwgYW5kIGBuZmNzaW0uY2AgaXMgYW4gTkZDIHNpbXVsYXRvciwgaW50ZXJlc3RpbmcuIFRoZW4gdGhlcmUmIzM5O3Mgc3l6a2FsbGVyIHdpdGggcHNldWRvLXN5c2NhbGxzIGZvciBORkMgbmV0bGluaywgcmF3LWdhZGdldCBVU0IgTkZDLCBldGMuIFRoYXQgZ2l2ZXMgbWUgYSBoZWFkIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLgoKTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgZmlndXJpbmcgb3V0IGlmIEkgY2FuIHRyaWdnZXIgYG5mY19nZW5sX2xsY19zZHJlcWAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHNhdGlzZmllZC4gRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIGdlbmVyaWMgbmV0bGluayBzb2NrZXQgc2VuZGluZyBgTkZDX0NNRF9MTENfU0RSRVFgIGRpcmVjdGx5IHJlYWNoZXMgdGhpcyBmdW5jdGlvbi4gT2theSwgdGhhdCYjMzk7cyBwcm9taXNpbmcuCgpOb3csIHRvIGFjdHVhbGx5IGdldCBpbnRvIHRoYXQgbG9vcCwgYG5mY19nZXRfZGV2aWNlKGlkeClgIG5lZWRzIHRvIHJldHVybiBhIHZhbGlkIE5GQyBkZXZpY2UuIFRoZSBkZXZpY2UmIzM5O3MgYGRlcF9saW5rX3VwYCBmbGFnIG5lZWRzIHRvIGJlIHRydWUsIGFuZCBgbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpYCBoYXMgdG8gcmV0dXJuIGEgYGxvY2FsYCBwb2ludGVyLiBUaGUgYGlkeGAgY29tZXMgZnJvbSB0aGUgbmV0bGluayBtZXNzYWdlLCBhbmQgYG5mY19nZXRfZGV2aWNlYCBtdXN0IGZpbmQgc29tZXRoaW5nIGJhc2VkIG9uIHRoYXQgaW5kZXguCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyBob3cgZG9lcyBgZGVwX2xpbmtfdXBgIGdldCBzZXQgdG8gdHJ1ZT8gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlci4gSSBuZWVkIHRvIGdyZXAgZm9yIGBkZXBfbGlua191cGAgaW4gYm90aCBgbmV0L25mY2AgYW5kIGBkcml2ZXJzL25mY2AgdG8gZmlndXJlIG91dCB3aGF0IHNldHMgdGhpcyBmbGFnLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBfbGlua191cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0PTY0PWVudHJ5IHBvaW50czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdC03Mi1cdFx0XHQgICB1MzIgaW1fcHJvdG9jb2xzLCB1MzIgdG1fcHJvdG9jb2xzKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9uZmMvbmZjLWhjaS5yc3Q6NzM6XHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdC03NC1cdFx0XHQgICB1OCBjb21tX21vZGUsIHU4ICpnYiwgc2l6ZV90IGdiX2xlbik7XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdC05Ny0gIG1lY2hhbmlzbSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgSENJIHN0YW5kYXJkLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdDo5ODotIGRlcF9saW5rX3VwKCkgaXMgY2FsbGVkIGFmdGVyIGEgcDJwIHRhcmdldCBoYXMgYmVlbiBkZXRlY3RlZCwgdG8gZmluaXNoXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTk5LSAgdGhlIHAycCBjb25uZWN0aW9uIHNldHVwIHdpdGggaGFyZHdhcmUgcGFyYW1ldGVycyB0aGF0IG5lZWQgdG8gYmUgcGFzc2VkIGJhY2tcbi0tXG5kcml2ZXJzL25mYy9taWNyb3JlYWQvbWljcm9yZWFkLmM9MjI0PXN0YXRpYyBpbnQgbWljcm9yZWFkX3N0YXJ0X3BvbGwoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LFxuLS1cbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy0yOTktXG5kcml2ZXJzL25mYy9taWNyb3JlYWQvbWljcm9yZWFkLmM6MzAwOnN0YXRpYyBpbnQgbWljcm9yZWFkX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldixcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy0zMDEtXHRcdFx0XHRzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LCB1OCBjb21tX21vZGUsXG4tLVxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jPTY1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIG1pY3JvcmVhZF9oY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy02NTktXHQuc3RhcnRfcG9sbCA9IG1pY3JvcmVhZF9zdGFydF9wb2xsLFxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jOjY2MDpcdC5kZXBfbGlua191cCA9IG1pY3JvcmVhZF9kZXBfbGlua191cCxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy02NjEtXHQuZGVwX2xpbmtfZG93biA9IG1pY3JvcmVhZF9kZXBfbGlua19kb3duLFxuLS1cbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM9MTg3OD1zdGF0aWMgdm9pZCBwbjUzM19kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldixcbi0tXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTE5MDctXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jOjE5MDg6c3RhdGljIGludCBwbjUzM19pbl9kZXBfbGlua191cF9jb21wbGV0ZShzdHJ1Y3QgcG41MzMgKmRldiwgdm9pZCAqYXJnLFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0xOTA5LVx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXG4tLVxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYz0xOTcxPXN0YXRpYyBpbnQgcG41MzNfcmZfZmllbGQoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHU4IHJmKTtcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MTk3MjpzdGF0aWMgaW50IHBuNTMzX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0xOTczLVx0XHRcdCAgICAgdTggY29tbV9tb2RlLCB1OCAqZ2IsIHNpemVfdCBnYl9sZW4pXG4tLVxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yMDQzLVx0cmMgPSBwbjUzM19zZW5kX2NtZF9hc3luYyhkZXYsIFBONTMzX0NNRF9JTl9KVU1QX0ZPUl9ERVAsIHNrYixcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MjA0NDpcdFx0XHRcdCAgcG41MzNfaW5fZGVwX2xpbmtfdXBfY29tcGxldGUsIGFyZyk7XG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTIwNDUtXG4tLVxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYz0yNjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBwbjUzM19uZmNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMjY0Mi1cdC5kZXZfZG93biA9IHBuNTMzX2Rldl9kb3duLFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYzoyNjQzOlx0LmRlcF9saW5rX3VwID0gcG41MzNfZGVwX2xpbmtfdXAsXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTI2NDQtXHQuZGVwX2xpbmtfZG93biA9IHBuNTMzX2RlcF9saW5rX2Rvd24sXG4tLVxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYz0zMzI9c3RhdGljIGludCBwbjU0NF9oY2lfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXG4tLVxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy00NDItXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jOjQ0MzpzdGF0aWMgaW50IHBuNTQ0X2hjaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jLTQ0NC1cdFx0XHRcdHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsIHU4IGNvbW1fbW9kZSxcbi0tXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jPTg4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIHBuNTQ0X2hjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy04ODgtXHQuc3RhcnRfcG9sbCA9IHBuNTQ0X2hjaV9zdGFydF9wb2xsLFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYzo4ODk6XHQuZGVwX2xpbmtfdXAgPSBwbjU0NF9oY2lfZGVwX2xpbmtfdXAsXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jLTg5MC1cdC5kZXBfbGlua19kb3duID0gcG41NDRfaGNpX2RlcF9saW5rX2Rvd24sXG4tLVxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jPTU2OD1zdGF0aWMgaW50IHN0MjFuZmNhX2dldF9pc28xNTY5M19pbnZlbnRvcnkoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LFxuLS1cbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy01OTUtXG5kcml2ZXJzL25mYy9zdDIxbmZjYS9jb3JlLmM6NTk2OnN0YXRpYyBpbnQgc3QyMW5mY2FfaGNpX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldixcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy01OTctXHRcdFx0XHQgICAgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxuLS1cbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYz05MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfaGNpX29wcyBzdDIxbmZjYV9oY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy05MjEtXHQuc3RvcF9wb2xsID0gc3QyMW5mY2FfaGNpX3N0b3BfcG9sbCxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYzo5MjI6XHQuZGVwX2xpbmtfdXAgPSBzdDIxbmZjYV9oY2lfZGVwX2xpbmtfdXAsXG5kcml2ZXJzL25mYy9zdDIxbmZjYS9jb3JlLmMtOTIzLVx0LmRlcF9saW5rX2Rvd24gPSBzdDIxbmZjYV9oY2lfZGVwX2xpbmtfZG93bixcbi0tXG5pbmNsdWRlL25ldC9uZmMvaGNpLmg9MTU9c3RydWN0IG5mY19oY2lfb3BzIHtcbi0tXG5pbmNsdWRlL25ldC9uZmMvaGNpLmgtMjgtXHR2b2lkICgqc3RvcF9wb2xsKSAoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KTtcbmluY2x1ZGUvbmV0L25mYy9oY2kuaDoyOTpcdGludCAoKmRlcF9saW5rX3VwKShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG5pbmNsdWRlL25ldC9uZmMvaGNpLmgtMzAtXHRcdFx0ICAgdTggY29tbV9tb2RlLCB1OCAqZ2IsIHNpemVfdCBnYl9sZW4pO1xuLS1cbmluY2x1ZGUvbmV0L25mYy9uZmMuaD00OD1zdHJ1Y3QgbmZjX29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTUzLVx0dm9pZCAoKnN0b3BfcG9sbCkoc3RydWN0IG5mY19kZXYgKmRldik7XG5pbmNsdWRlL25ldC9uZmMvbmZjLmg6NTQ6XHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbmluY2x1ZGUvbmV0L25mYy9uZmMuaC01NS1cdFx0XHQgICB1OCBjb21tX21vZGUsIHU4ICpnYiwgc2l6ZV90IGdiX2xlbik7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25mYy5oPTE2Nz1zdHJ1Y3QgbmZjX2RldiB7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTE3OC1cdHN0cnVjdCBuZmNfdGFyZ2V0ICphY3RpdmVfdGFyZ2V0O1xuaW5jbHVkZS9uZXQvbmZjL25mYy5oOjE3OTpcdGJvb2wgZGVwX2xpbmtfdXA7XG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtMTgwLVx0c3RydWN0IG5mY19nZW5sX2RhdGEgZ2VubF9kYXRhO1xuLS1cbm5ldC9uZmMvY29yZS5jPTI2OD1zdGF0aWMgc3RydWN0IG5mY190YXJnZXQgKm5mY19maW5kX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeClcbi0tXG5uZXQvbmZjL2NvcmUuYy0yNzktXG5uZXQvbmZjL2NvcmUuYzoyODA6aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2luZGV4LCB1OCBjb21tX21vZGUpXG5uZXQvbmZjL2NvcmUuYy0yODEte1xuLS1cbm5ldC9uZmMvY29yZS5jLTI4OC1cbm5ldC9uZmMvY29yZS5jOjI4OTpcdGlmICghZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXBfbGlua191cClcbm5ldC9uZmMvY29yZS5jLTI5MC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZmMvY29yZS5jLTI5OC1cbm5ldC9uZmMvY29yZS5jOjI5OTpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gdHJ1ZSkge1xubmV0L25mYy9jb3JlLmMtMzAwLVx0XHRyYyA9IC1FQUxSRUFEWTtcbi0tXG5uZXQvbmZjL2NvcmUuYy0zMTUtXG5uZXQvbmZjL2NvcmUuYzozMTY6XHRyYyA9IGRldi1cdTAwM2VvcHMtXHUwMDNlZGVwX2xpbmtfdXAoZGV2LCB0YXJnZXQsIGNvbW1fbW9kZSwgZ2IsIGdiX2xlbik7XG5uZXQvbmZjL2NvcmUuYy0zMTctXHRpZiAoIXJjKSB7XG4tLVxubmV0L25mYy9jb3JlLmM9MzI3PWludCBuZmNfZGVwX2xpbmtfZG93bihzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuLS1cbm5ldC9uZmMvY29yZS5jLTM0Mi1cbm5ldC9uZmMvY29yZS5jOjM0MzpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvY29yZS5jLTM0NC1cdFx0cmMgPSAtRUFMUkVBRFk7XG4tLVxubmV0L25mYy9jb3JlLmMtMzQ5LVx0aWYgKCFyYykge1xubmV0L25mYy9jb3JlLmM6MzUwOlx0XHRkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPSBmYWxzZTtcbm5ldC9uZmMvY29yZS5jLTM1MS1cdFx0ZGV2LVx1MDAzZWFjdGl2ZV90YXJnZXQgPSBOVUxMO1xuLS1cbm5ldC9uZmMvY29yZS5jPTM2Mz1pbnQgbmZjX2RlcF9saW5rX2lzX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxuLS1cbm5ldC9uZmMvY29yZS5jLTM2NS17XG5uZXQvbmZjL2NvcmUuYzozNjY6XHRkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPSB0cnVlO1xubmV0L25mYy9jb3JlLmMtMzY3LVxuLS1cbm5ldC9uZmMvY29yZS5jLTM4Mi1cbm5ldC9uZmMvY29yZS5jOjM4MzpcdHJldHVybiBuZmNfZ2VubF9kZXBfbGlua191cF9ldmVudChkZXYsIHRhcmdldF9pZHgsIGNvbW1fbW9kZSwgcmZfbW9kZSk7XG5uZXQvbmZjL2NvcmUuYy0zODQtfVxuLS1cbm5ldC9uZmMvY29yZS5jPTY1NT1pbnQgbmZjX3RtX2RhdGFfcmVjZWl2ZWQoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2NvcmUuYy02NTctXHQvKiBPbmx5IExMQ1AgdGFyZ2V0IG1vZGUgZm9yIG5vdyAqL1xubmV0L25mYy9jb3JlLmM6NjU4Olx0aWYgKGRldi1cdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xubmV0L25mYy9jb3JlLmMtNjU5LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbmZjL2NvcmUuYz02OTY9aW50IG5mY190bV9kZWFjdGl2YXRlZChzdHJ1Y3QgbmZjX2RldiAqZGV2KVxubmV0L25mYy9jb3JlLmMtNjk3LXtcbm5ldC9uZmMvY29yZS5jOjY5ODpcdGRldi1cdTAwM2VkZXBfbGlua191cCA9IGZhbHNlO1xubmV0L25mYy9jb3JlLmMtNjk5LVx0ZGV2LVx1MDAzZXJmX21vZGUgPSBORkNfUkZfTk9ORTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTU4Nj1zdGF0aWMgaW50IGRpZ2l0YWxfZGV2X2Rvd24oc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01OTQtXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjU5NTpzdGF0aWMgaW50IGRpZ2l0YWxfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTU5Ni1cdFx0XHQgICAgICAgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgZGlnaXRhbF9uZmNfb3BzID0ge1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNzQ4LVx0LnN0b3BfcG9sbCA9IGRpZ2l0YWxfc3RvcF9wb2xsLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo3NDk6XHQuZGVwX2xpbmtfdXAgPSBkaWdpdGFsX2RlcF9saW5rX3VwLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy03NTAtXHQuZGVwX2xpbmtfZG93biA9IGRpZ2l0YWxfZGVwX2xpbmtfZG93bixcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NjUyPXN0YXRpYyB2b2lkIGhjaV9zdG9wX3BvbGwoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTY2Mi1cbm5ldC9uZmMvaGNpL2NvcmUuYzo2NjM6c3RhdGljIGludCBoY2lfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjY0LVx0XHRcdFx0X191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy02NjctXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjY4Olx0aWYgKCFoZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXBfbGlua191cClcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjktXHRcdHJldHVybiAwO1xubmV0L25mYy9oY2kvY29yZS5jLTY3MC1cbm5ldC9uZmMvaGNpL2NvcmUuYzo2NzE6XHRyZXR1cm4gaGRldi1cdTAwM2VvcHMtXHUwMDNlZGVwX2xpbmtfdXAoaGRldiwgdGFyZ2V0LCBjb21tX21vZGUsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjcyLVx0XHRcdFx0ICAgICAgZ2IsIGdiX2xlbik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgaGNpX25mY19vcHMgPSB7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTk0NS1cdC5zdG9wX3BvbGwgPSBoY2lfc3RvcF9wb2xsLFxubmV0L25mYy9oY2kvY29yZS5jOjk0NjpcdC5kZXBfbGlua191cCA9IGhjaV9kZXBfbGlua191cCxcbm5ldC9uZmMvaGNpL2NvcmUuYy05NDctXHQuZGVwX2xpbmtfZG93biA9IGhjaV9kZXBfbGlua19kb3duLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmM9NjYxPXN0YXRpYyBpbnQgbGxjcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKl9hZGRyLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA1LVx0ZGV2aWNlX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWRldik7XG5uZXQvbmZjL2xsY3Bfc29jay5jOjcwNjpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA3LVx0XHRyZXQgPSAtRU5PTElOSztcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmM9OTcwPXN0YXRpYyB2b2lkIG5jaV9kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldixcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtOTk1LVxubmV0L25mYy9uY2kvY29yZS5jOjk5NjpzdGF0aWMgaW50IG5jaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbm5ldC9uZmMvbmNpL2NvcmUuYy05OTctXHRcdFx0ICAgX191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBuY2lfbmZjX29wcyA9IHtcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1My1cdC5zdG9wX3BvbGwgPSBuY2lfc3RvcF9wb2xsLFxubmV0L25mYy9uY2kvY29yZS5jOjExNTQ6XHQuZGVwX2xpbmtfdXAgPSBuY2lfZGVwX2xpbmtfdXAsXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1NS1cdC5kZXBfbGlua19kb3duID0gbmNpX2RlcF9saW5rX2Rvd24sXG4tLVxubmV0L25mYy9uY2kvbnRmLmM9NzA5PXN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tLVxubmV0L25mYy9uY2kvbnRmLmMtODY1LVxubmV0L25mYy9uY2kvbnRmLmM6ODY2Olx0XHQvKiBzdG9yZSBnZW5lcmFsIGJ5dGVzIHRvIGJlIHJlcG9ydGVkIGxhdGVyIGluIGRlcF9saW5rX3VwICovXG5uZXQvbmZjL25jaS9udGYuYy04NjctXHRcdGlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDX0RFUCkge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jPTY0MD1zdGF0aWMgaW50IG5mY19nZW5sX2R1bXBfZGV2aWNlc19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy02NTEtXG5uZXQvbmZjL25ldGxpbmsuYzo2NTI6aW50IG5mY19nZW5sX2RlcF9saW5rX3VwX2V2ZW50KHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxubmV0L25mYy9uZXRsaW5rLmMtNjUzLVx0XHRcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtNjc4LVxubmV0L25mYy9uZXRsaW5rLmM6Njc5Olx0ZGV2LVx1MDAzZWRlcF9saW5rX3VwID0gdHJ1ZTtcbm5ldC9uZmMvbmV0bGluay5jLTY4MC1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYz05MTE9c3RhdGljIGludCBuZmNfZ2VubF9kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTkzNS1cbm5ldC9uZmMvbmV0bGluay5jOjkzNjpzdGF0aWMgaW50IG5mY19nZW5sX2RlcF9saW5rX3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvbmZjL25ldGxpbmsuYy05Mzcte1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTk2My1cbm5ldC9uZmMvbmV0bGluay5jOjk2NDpcdHJjID0gbmZjX2RlcF9saW5rX3VwKGRldiwgdGd0X2lkeCwgY29tbSk7XG5uZXQvbmZjL25ldGxpbmsuYy05NjUtXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTA2OD1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZXRfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTExMS1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0xMQ19QQVJBTV9MVE9dKSB7XG5uZXQvbmZjL25ldGxpbmsuYzoxMTEyOlx0XHRpZiAoZGV2LVx1MDAzZWRlcF9saW5rX3VwKSB7XG5uZXQvbmZjL25ldGxpbmsuYy0xMTEzLVx0XHRcdHJjID0gLUVJTlBST0dSRVNTO1xuLS1cbm5ldC9uZmMvbmV0bGluay5jPTExMzc9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xMTYxLVxubmV0L25mYy9uZXRsaW5rLmM6MTE2MjpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvbmV0bGluay5jLTExNjMtXHRcdHJjID0gLUVOT0xJTks7XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIG5mY19nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3MzMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC9uZmMvbmV0bGluay5jOjE3MzQ6XHRcdC5kb2l0ID0gbmZjX2dlbmxfZGVwX2xpbmtfdXAsXG5uZXQvbmZjL25ldGxpbmsuYy0xNzM1LVx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4tLVxubmV0L25mYy9uZmMuaD04Mj1pbnQgbmZjX2dlbmxfZGV2aWNlX3JlbW92ZWQoc3RydWN0IG5mY19kZXYgKmRldik7XG5uZXQvbmZjL25mYy5oLTgzLVxubmV0L25mYy9uZmMuaDo4NDppbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXG5uZXQvbmZjL25mYy5oLTg1LVx0XHRcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpO1xuLS1cbm5ldC9uZmMvbmZjLmg9MTM1PWludCBuZmNfc3RvcF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xubmV0L25mYy9uZmMuaC0xMzYtXG5uZXQvbmZjL25mYy5oOjEzNzppbnQgbmZjX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGludCB0YXJnZXRfaWR4LCB1OCBjb21tX21vZGUpO1xubmV0L25mYy9uZmMuaC0xMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIHRoZSBORkMgTmV0bGluayBDb21tYW5kIEhhbmRsZXIgYW5kIFZpcnR1YWwgRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIGBuZmNfZ2VubF9kZXBfbGlua191cGAgaXMgYWN0dWFsbHkgYW5vdGhlciBpbXBsZW1lbnRhdGlvbiBvZiBhIGdlbmVyaWMgbmV0bGluayBjb21tYW5kLCBzcGVjaWZpY2FsbHkgYE5GQ19DTURfREVQX0xJTktfVVBgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgbGluay11cCBldmVudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0bGluayBmcmFtZXdvcmsuIEl0JiMzOTtzIG5vdCBqdXN0IHNvbWUgaXNvbGF0ZWQgZnVuY3Rpb247IGl0JiMzOTtzIHBhcnQgb2YgYSBsYXJnZXIsIHdlbGwtZGVmaW5lZCBuZXRsaW5rIGNvbW1hbmQgc3RydWN0dXJlLgoKQW5kLCBldmVuIG1vcmUgaW50ZXJlc3RpbmcsIGB2aXJ0dWFsX25jaWRldi5jYCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyB2aXJ0dWFsIE5GQyBkZXZpY2UuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB3ZSYjMzk7cmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIHRocm91Z2gsIHNheSwgYC9kZXYvbmNpYC4gVGhpcyBpbXBsaWVzIGl0JiMzOTtzIHdoZXJlIHRoZSB2aXJ0dWFsIGRldmljZSYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQgYW5kIGl0cyBjYXBhYmlsaXRpZXMgZW11bGF0ZWQuIE5vdyBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgdmlydHVhbCBkZXZpY2UgaXMgY29uc3RydWN0ZWQuIExldCYjMzk7cyBkaWcgaW50byBgdmlydHVhbF9uY2lkZXYuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0OiNpbmNsdWRlIFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFx1MDAzZVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNS1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIzLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyNDpzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2IHtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjU6XHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjYtXHRzdHJ1Y3QgbXV0ZXggbXR4O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzMte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozNDpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTM1LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjQwOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfY2xvc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQxLXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy00My1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTUyLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1MzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NTU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTc1LVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NzpcdC5vcGVuID0gdmlydHVhbF9uY2lfb3BlbixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XHQuY2xvc2UgPSB2aXJ0dWFsX25jaV9jbG9zZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzk6XHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODAtfTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg2LVx0c2l6ZV90IGFjdHVhbF9sZW47XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMTc6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExOC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMjgtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEyOTpcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXHUwMDNlbmRldiwgc2tiKTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMwLVx0cmV0dXJuIGNvdW50O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMyLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzM6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzQte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzUtXHRpbnQgcmV0ID0gMDtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTM2Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldjtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM3LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQwLVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTQxOlx0dmRldi1cdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZ2aXJ0dWFsX25jaV9vcHMsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0Mi1cdFx0VklSVFVBTF9ORkNfUFJPVE9DT0xTLCAwLCAwKTtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1MC1cdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gdmRldjtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTUxOlx0bmNpX3NldF9kcnZkYXRhKHZkZXYtXHUwMDNlbmRldiwgdmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1Mi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTUzOlx0cmV0ID0gbmNpX3JlZ2lzdGVyX2RldmljZSh2ZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNTQtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE1NTpcdFx0bmNpX2ZyZWVfZGV2aWNlKHZkZXYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1Ni1cdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjY6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2Ny1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY4Olx0bmNpX3VucmVnaXN0ZXJfZGV2aWNlKHZkZXYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2OTpcdG5jaV9mcmVlX2RldmljZSh2ZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzAtXHRtdXRleF9kZXN0cm95KFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc2OnN0YXRpYyBsb25nIHZpcnR1YWxfbmNpZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3OC17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3OTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTgwLVx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXHQubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwMzpcdC5uYW1lID0gXCYjMzQ7dmlydHVhbF9uY2lcJiMzNDssXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcdC5mb3BzID0gXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVx0Lm1vZGUgPSAwNjAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkZDIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGAvZGV2L3ZpcnR1YWxfbmNpYCBpcyB0aGUga2V5IOKAkyB0aGF0JiMzOTtzIG15IGVudHJ5IHBvaW50LCBpdCBsb29rcyBsaWtlLCBmb3IgYW4gTkNJIGRldmljZSwgd2hpY2ggaXMgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gIEl0JiMzOTtzIGFsc28gd29ydGggbm90aW5nIHRoZSBwcmVzZW5jZSBvZiB0aGUgcG41MzMgVVNCIGdhZGdldC9yYXctZ2FkZ2V0OyB0aGF0JiMzOTtzIGFub3RoZXIgcGllY2Ugb2YgdGhlIHB1enpsZS4gIEFuZCwgc3l6a2FsbGVyIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYm90aCBuZXRsaW5rIGFuZCBORkMgLSBleGNlbGxlbnQ7IHRoYXQgdGVsbHMgbWUgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGJlLgoKTm93LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIE5GQywgTExDUCwgYW5kIHNvIG9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLCBzdGFydGluZyB3aXRoIGBuZXQvbmZjL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBORkMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORkNcbiAgIDc6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgIDg6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgOTpcdFx0ZGVmYXVsdCBuXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTkZDIChOZWFyIGZpZWxkXG4gIDEyOlx0XHQgIGNvbW11bmljYXRpb24pIGRldmljZXMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTU6XHRcdCAgYmUgY2FsbGVkIG5mYy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTkZDX0RJR0lUQUxcbiAgMTg6XHRcdGRlcGVuZHMgb24gTkZDXG4gIDE5Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDIwOlx0XHRzZWxlY3QgQ1JDX0lUVV9UXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtORkMgRGlnaXRhbCBQcm90b2NvbCBzdGFjayBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZWZhdWx0IG5cbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cbiAgMjU6XHRcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XG4gIDI2Olx0XHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxuICAyNzpcdFxuICAyODpcdFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI5Olx0XHQgIGJlIGNhbGxlZCBuZmNfZGlnaXRhbC5cbiAgMzA6XHRcbiAgMzE6XHRzb3VyY2UgXCYjMzQ7bmV0L25mYy9uY2kvS2NvbmZpZ1wmIzM0O1xuICAzMjpcdHNvdXJjZSBcJiMzNDtuZXQvbmZjL2hjaS9LY29uZmlnXCYjMzQ7XG4gIDMzOlx0XG4gIDM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIE5GQyBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBORkMgY29tcG9uZW50cywgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGBuZXQvbmZjL01ha2VmaWxlYC4gVGhpcyBmaWxlIGlzIHRoZSBjZW50cmFsIHBvaW50IG9mIGNvbnRyb2wsIHJpZ2h0PyBJdCYjMzk7cyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgYXJlIGFsbCBvcmNoZXN0cmF0ZWQgZm9yIHRoZXNlIE5GQy1yZWxhdGVkIG1vZHVsZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZXNlIHRoaW5ncywgYW55IHNwZWNpZmljIG1vZHVsZXMgaXQmIzM5O3MgY3JlYXRpbmcsIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBhcmUgYW55IHVudXN1YWwgYnVpbGQgZmxhZ3Mgb3IgY3VzdG9tIHJ1bGVzIHRoYXQgbWlnaHQgaW5kaWNhdGUgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggTkZDIHN1YnN5c3RlbS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX05GQykgJiM0Mzs9IG5mYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX05GQ19OQ0kpICYjNDM7PSBuY2kvXG4gICA4Olx0b2JqLSQoQ09ORklHX05GQ19IQ0kpICYjNDM7PSBoY2kvXG4gICA5Olx0b2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSAmIzQzOz0gbmZjX2RpZ2l0YWwub1xuICAxMDpcdFxuICAxMTpcdG5mYy1vYmpzIDo9IGNvcmUubyBuZXRsaW5rLm8gYWZfbmZjLm8gcmF3c29jay5vIGxsY3BfY29yZS5vIGxsY3BfY29tbWFuZHMubyBcXFxuICAxMjpcdFx0XHRsbGNwX3NvY2sub1xuICAxMzpcdFxuICAxNDpcdG5mY19kaWdpdGFsLW9ianMgOj0gZGlnaXRhbF9jb3JlLm8gZGlnaXRhbF90ZWNobm9sb2d5Lm8gZGlnaXRhbF9kZXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgbmV0bGluay5vYCBnZXRzIGNvbXBpbGVkIHdoZW4gTkZDIGlzIHR1cm5lZCBvbiDigJMgZWl0aGVyIGJ1aWx0IGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZSwgYW5kIHN5emthbGxlciB1c2VzIGl0IGFzIGEgYnVpbHQtaW4gbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlcGVuZGVuY3kgbW9yZSBkZWVwbHkuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJREVWYC4gVGhpcyBjb3VsZCBwcm92aWRlIGluc2lnaHQgaW50byBleGFjdGx5ICp3aHkqIGBuZXRsaW5rLm9gIGlzIGJlaW5nIGluY2x1ZGVkIGluIGEgc3BlY2lmaWMgYnVpbGQsIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjb25maWd1cmF0aW9uIGZsYWdzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB2aXJ0dWFsIE5GQyBkZXZpY2VzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBhbmQgcG90ZW50aWFsIGJ1Z3Mgb2Z0ZW4gbGllLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VklSVFVBTF9OQ0lERVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGB2aXJ0dWFsX25jaWRldmAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBORkMgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBvZiBjb3Vyc2UsIGlzIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgY29uZmlndXJhdGlvbiBzeW1ib2wuIEhvcGVmdWxseSwgaXQmIzM5O3MgZGVmaW5lZCBkaXJlY3RseSB0aGVyZSwgb3IgYXQgbGVhc3QgaW5jbHVkZWQgZnJvbSBhIGZpbGUgd2l0aGluIHRoZSBORkMgZGlyZWN0b3J5LiBGcm9tIGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBvdXQgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgTkZDIGZlYXR1cmVzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgcXVpY2sgbG9va3VwLCBidXQgeW91IG5ldmVyIGtub3cuIEl0IG1pZ2h0IGJlIGEgYml0IGJ1cmllZCwgb3IgaXQgY291bGQgYmUgZGVmaW5lZCBpbiBhIG1vcmUgZ2VuZXJpYyBjb25maWcgZmlsZSBzb21ld2hlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnR1YWxfbmNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcdCYjNDM7PSB2aXJ0dWFsX25jaWRldi5vXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMy1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjQ6c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTI1LVx0c3RydWN0IG5jaV9kZXYgKm5kZXY7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MzI6c3RhdGljIGludCB2aXJ0dWFsX25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMy17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjM0Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzUtXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zOS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDA6c3RhdGljIGludCB2aXJ0dWFsX25jaV9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNDEte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo0MjpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQzLVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjUzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfc2VuZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTQte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1NTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU2LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNzUtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyB2aXJ0dWFsX25jaV9vcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc3Olx0Lm9wZW4gPSB2aXJ0dWFsX25jaV9vcGVuLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3ODpcdC5jbG9zZSA9IHZpcnR1YWxfbmNpX2Nsb3NlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3OTpcdC5zZW5kID0gdmlydHVhbF9uY2lfc2VuZFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MC19O1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODI6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODMtXHRcdFx0XHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODQte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo4NTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODYtXHRzaXplX3QgYWN0dWFsX2xlbjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTQtXHRcdFx0XHQgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExNi17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExNzpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE4LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTMzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM1LVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzNjpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXY7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNy1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0MTpcdHZkZXYtXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXHUwMDI2dmlydHVhbF9uY2lfb3BzLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDItXHRcdFZJUlRVQUxfTkZDX1BST1RPQ09MUywgMCwgMCk7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjY6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2Ny1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc2OnN0YXRpYyBsb25nIHZpcnR1YWxfbmNpZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3OC17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3OTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTgwLVx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXHQubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwMzpcdC5uYW1lID0gXCYjMzQ7dmlydHVhbF9uY2lcJiMzNDssXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcdC5mb3BzID0gXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVx0Lm1vZGUgPSAwNjAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5GQyBWaXJ0dWFsIE5DSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhhdCBLY29uZmlnIHRvIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYE5GQ19WSVJUVUFMX05DSWAuIEkga25vdyB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBwcmV0dHkgd2VsbCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBpZiBpdCYjMzk7cyB0cmlzdGF0ZSBvciBib29sZWFuLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiB3aGF0IGVuYWJsaW5nIGl0IGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgYWxzbyBiZSBtZW50YWxseSBub3RpbmcgYW55IHJlbGF0ZWQgb3B0aW9ucyBpbiB0aGUgdmljaW5pdHksIGJlY2F1c2UgdGhlIEtjb25maWcgb2Z0ZW4gZ3JvdXBzIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlICpjb250ZXh0KiBvZiB0aGlzIHZpcnR1YWwgTkNJIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBORkMgc3Vic3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyB2aXJ0dWFsIE5DSSByZWxhdGVzIHRvIGVtdWxhdGluZyBhbiBOQ0kgaW50ZXJmYWNlLCBwcm9iYWJseSBmb3IgdGVzdGluZyBvciBzaW11bGF0aW9uIHB1cnBvc2VzLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgd2hhdCBJJiMzOTttIHNlZWtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfVklSVFVBTF9OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxuLS1cbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBORkMgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUyLiBJJiMzOTttIGJldHRpbmcgdGhhdCBhcmVhIGxpa2VseSBob2xkcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBORkMgc3Vic3lzdGVtLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBtb2R1bGFyaXR5LCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGRlc2lnbiBkZWNpc2lvbnMgZW5jb2RlZCBpbiB0aGlzIEtjb25maWcgZmlsZSwgYXMgdGhpcyBpcyB3aGVyZSB0aGUgTkZDIG9wdGlvbnMgYXJlIGxpa2VseSB0byBiZSBkZWNsYXJlZCBhbmQgc3RydWN0dXJlZC4gRnJvbSBoZXJlLCBJIHdpbGwgYmVnaW4gdG8gdHJhY2UgaG93IHRoZSBvcHRpb25zIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBhcmUgdGllZCB0byBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBORkMgc3RhY2sgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU29ueSBQb3J0LTEwMCBjaGlwIGJhc2VkIFVTQiBkZXZpY2VzIHN1Y2ggYXMgdGhlXG4gIDQ4Olx0XHQgIFJDLVMzODAgZG9uZ2xlLlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBORkNfVklSVFVBTF9OQ0lcbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxuICA1NzpcdFx0ICBJdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgTkNJIG1vZHVsZSBhbmQgYXBwbGljYXRpb25zLlxuICA1ODpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHZpcnR1YWwgTkNJIGRldmljZSBhbmRcbiAgNTk6XHRcdCAgbW9kdWxlLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MjpcdFxuICA2MzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9mZHAvS2NvbmZpZ1wmIzM0O1xuICA2NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9wbjU0NC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTE2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIE5GQ3NpbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhhdCBgbmZjc2ltYCB0b29sLCBzaGFsbCB3ZT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCBvZmZlcnMuIEkga25vdyBJIHVzZWQgaXQgYmVmb3JlIGZvciBbaW5zZXJ0IHJlbGV2YW50IHRlY2huaWNhbCB1c2FnZSwgZS5nLiwgc2ltdWxhdGluZyBORkMgdGFnIGludGVyYWN0aW9ucywgdGVzdGluZyByZWFkZXIgaW1wbGVtZW50YXRpb25zLCBkZWJ1Z2dpbmcgY29tbXVuaWNhdGlvbiBwcm90b2NvbHNdLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0RvZXMgaXQgc3RpbGwgb2ZmZXIgdGhlIGZlYXR1cmVzIEkgbmVlZCBmb3IgW3NwZWNpZmljIHByb2plY3Qgb3IgdGFza10/JiMzNDsgSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBpcyBzdGlsbCBpbnR1aXRpdmUgb3IgaWYgdGhlcmUgaGF2ZSBiZWVuIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCBtaWdodCBpbXBhY3QgbXkgd29ya2Zsb3cuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaWYgYG5mY3NpbWAgc3RpbGwgYWxpZ25zIHdpdGggbXkgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZHMgYW55IHVuZXhwZWN0ZWQgcm9hZGJsb2Nrcy4gSSBhbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBpZiBpdCBzdXBwb3J0cyB0aGUgcmVjZW50IGFkdmFuY2VtZW50cyBpbiBORkMgdGVjaG5vbG9neSB3aGljaCBJIGFtIGN1cnJlbnRseSBpbnZvbHZlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvbmZjc2ltLmMtMTUtXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoxNjojZGVmaW5lIE5GQ1NJTV9FUlIoZCwgZm10LCBhcmdzLi4uKSBuZmNfZXJyKFx1MDAyNmQtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBcXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTctXHRcdFx0XHRcdCAgICBcJiMzNDslczogXCYjMzQ7IGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOC1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjE5OiNkZWZpbmUgTkZDU0lNX0RCRyhkLCBmbXQsIGFyZ3MuLi4pIGRldl9kYmcoXHUwMDI2ZC1cdTAwM2VuZmNfZGlnaXRhbF9kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yMC1cdFx0XHRcdFx0ICAgIFwmIzM0OyVzOiBcJiMzNDsgZm10LCBfX2Z1bmNfXywgIyMgYXJncylcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIxLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjI6I2RlZmluZSBORkNTSU1fVkVSU0lPTiBcJiMzNDswLjJcJiMzNDtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIzLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjQ6I2RlZmluZSBORkNTSU1fTU9ERV9OT05FXHQwXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNTojZGVmaW5lIE5GQ1NJTV9NT0RFX0lOSVRJQVRPUlx0MVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjY6I2RlZmluZSBORkNTSU1fTU9ERV9UQVJHRVRcdDJcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI3LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mjg6I2RlZmluZSBORkNTSU1fQ0FQQUJJTElUSUVTIChORkNfRElHSVRBTF9EUlZfQ0FQU19JTl9DUkMgICB8IFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yOS1cdFx0XHQgICAgIE5GQ19ESUdJVEFMX0RSVl9DQVBTX1RHX0NSQylcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0xMDQ9c3RhdGljIHZvaWQgbmZjc2ltX2xpbmtfcmVjdl9jYW5jZWwoc3RydWN0IG5mY3NpbV9saW5rICpsaW5rKVxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTEwNy1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjEwODpcdGxpbmstXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX05PTkU7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xMDktXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTE1PXN0YXRpYyB2b2lkIG5mY3NpbV9saW5rX3NodXRkb3duKHN0cnVjdCBuZmNzaW1fbGluayAqbGluaylcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xMTktXHRsaW5rLVx1MDAzZXNodXRkb3duID0gMTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjEyMDpcdGxpbmstXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX05PTkU7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xMjEtXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTgyPXN0YXRpYyB2b2lkIG5mY3NpbV9yZWN2X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOTAtXHRpZiAoIWRldi1cdTAwM2V1cCkge1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTkxOlx0XHRORkNTSU1fRVJSKGRldiwgXCYjMzQ7RGV2aWNlIGlzIGRvd25cXG5cJiMzNDspO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTkyLVxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jPTIwMT1zdGF0aWMgaW50IG5mY3NpbV9zZW5kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjA3LVx0aWYgKCFkZXYtXHUwMDNldXApIHtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjIwODpcdFx0TkZDU0lNX0VSUihkZXYsIFwmIzM0O0RldmljZSBpcyBkb3duXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIwOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjE4LVx0aWYgKGRldi1cdTAwM2Vkcm9wZnJhbWUpIHtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjIxOTpcdFx0TkZDU0lNX0RCRyhkZXYsIFwmIzM0O2Ryb3BwaW5nIGZyYW1lIChvdXQgb2YgJWQpXFxuXCYjMzQ7LCBkZXYtXHUwMDNlZHJvcGZyYW1lKTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIyMC1cdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jPTI1Nj1zdGF0aWMgaW50IG5mY3NpbV9pbl9jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNjMtXHRcdGRldi1cdTAwM2V1cCA9IHRydWU7XG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNjQ6XHRcdGRldi1cdTAwM2Vtb2RlID0gTkZDU0lNX01PREVfSU5JVElBVE9SO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjY1LVx0XHRkZXYtXHUwMDNlcmZfdGVjaCA9IHBhcmFtO1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI3MS1cdGRlZmF1bHQ6XG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNzI6XHRcdE5GQ1NJTV9FUlIoZGV2LCBcJiMzNDtJbnZhbGlkIGNvbmZpZ3VyYXRpb24gdHlwZTogJWRcXG5cJiMzNDssIHR5cGUpO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjczLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0yODY9c3RhdGljIGludCBuZmNzaW1fdGdfY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjkzLVx0XHRkZXYtXHUwMDNldXAgPSB0cnVlO1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mjk0Olx0XHRkZXYtXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX1RBUkdFVDtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5NS1cdFx0ZGV2LVx1MDAzZXJmX3RlY2ggPSBwYXJhbTtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zMDEtXHRkZWZhdWx0OlxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzAyOlx0XHRORkNTSU1fRVJSKGRldiwgXCYjMzQ7SW52YWxpZCBjb25maWd1cmF0aW9uIHR5cGU6ICVkXFxuXCYjMzQ7LCB0eXBlKTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMwMy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MzQ2PXN0YXRpYyB2b2lkIG5mY3NpbV9kZWJ1Z2ZzX2luaXRfZGV2KHN0cnVjdCBuZmNzaW0gKmRldilcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNTMtXHRpZiAoIW5mY3NpbV9kZWJ1Z2ZzX3Jvb3QpIHtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM1NDpcdFx0TkZDU0lNX0VSUihkZXYsIFwmIzM0O25mY3NpbSBkZWJ1Z2ZzIG5vdCBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNTUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNjAtXHRpZiAobiBcdTAwM2U9IHNpemVvZihkZXZuYW1lKSkge1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzYxOlx0XHRORkNTSU1fRVJSKGRldiwgXCYjMzQ7Q291bGQgbm90IGNvbXB1dGUgZGV2IG5hbWUgZm9yIGRldiAlZFxcblwmIzM0OywgaWR4KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM2Mi1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jPTM3MD1zdGF0aWMgc3RydWN0IG5mY3NpbSAqbmZjc2ltX2RldmljZV9uZXcoc3RydWN0IG5mY3NpbV9saW5rICpsaW5rX2luLFxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4NS1cdFx0XHRcdFx0XHQgICAgTkZDX1BST1RPX05GQ19ERVBfTUFTSyxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM4NjpcdFx0XHRcdFx0XHQgICAgTkZDU0lNX0NBUEFCSUxJVElFUyxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4Ny1cdFx0XHRcdFx0XHQgICAgMCwgMCk7XG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9NDMxPXN0YXRpYyBpbnQgX19pbml0IG5mY3NpbV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDU4LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDU5Olx0cHJfaW5mbyhcJiMzNDtuZmNzaW0gXCYjMzQ7IE5GQ1NJTV9WRVJTSU9OIFwmIzM0OyBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy00NjAtXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9NDkxPW1vZHVsZV9leGl0KG5mY3NpbV9leGl0KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQ5Mi1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjQ5MzpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TkZDU2ltIGRyaXZlciB2ZXIgXCYjMzQ7IE5GQ1NJTV9WRVJTSU9OKTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjQ5NDpNT0RVTEVfVkVSU0lPTihORkNTSU1fVkVSU0lPTik7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy00OTUtTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTkZDIFNpbXVsYXRvciBEcml2ZXIgQWN0aXZhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX05GQ19TSU1gLi4uIHRoYXQmIzM5O3MgKmFub3RoZXIqIHNpbXVsYXRvciBkcml2ZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYG5mY3NpbS5jYCBtb2R1bGUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2ltdWxhdG9yIGlzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIE5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hlbiBpdCB3b3VsZCBiZSB1c2VkIGluIGEgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNzaW1cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX05GQ19NRUlfUEhZKVx0JiM0Mzs9IG1laV9waHkub1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX05GQ19TSU0pXHRcdCYjNDM7PSBuZmNzaW0ub1xuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX05GQ19QT1JUMTAwKVx0JiM0Mzs9IHBvcnQxMDAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIE5GQ19TSU0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGBORkNfU0lNYCBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IG5lc3RsZWQgd2l0aGluIHRoZSBORkMgZHJpdmVyIHN0cnVjdHVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHVzdWFsIHBsYWNlIGZvciB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgc28gSSYjMzk7bGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEhvcGVmdWxseSwgaXQmIzM5O3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GQ19TSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTIxPWNvbmZpZyBORkNfTUVJX1BIWVxuLS1cbmRyaXZlcnMvbmZjL0tjb25maWctMzAtXG5kcml2ZXJzL25mYy9LY29uZmlnOjMxOmNvbmZpZyBORkNfU0lNXG5kcml2ZXJzL25mYy9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTkZDIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTkZDIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxLiBLbm93aW5nIHRoaXMgc2VjdGlvbiBpcyBjcml0aWNhbDsgaXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGZlYXR1cmUgZW5hYmxlL2Rpc2FibGUgZGlyZWN0aXZlcyBhcmUgZGVmaW5lZC4gVGltZSB0byBmaWd1cmUgb3V0IHdoYXQgbW9kdWxlcyBhbmQgZmVhdHVyZXMgYXJlIGJlaW5nIGNvbnNpZGVyZWQgaGVyZSBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBjb21wb25lbnRzIGFyZSBtb2R1bGFyLCBidWlsdC1pbiwgb3IgcG90ZW50aWFsbHkgZXhjbHVkZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzdHJlYW1saW5lZCBhbmQgb3B0aW1pemVkIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE5GQ19TSU1cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxuICAzNjpcdFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXG4gIDM3Olx0XHQgIGFsbCBwYWNrZXRzIHNlbnQgZnJvbSBvbmUgZGV2aWNlIGlzIHNlbnQgYmFjayB0byB0aGUgb3RoZXIsIGFjdGluZyBhc1xuICAzODpcdFx0ICBsb29wYmFjayBkZXZpY2VzLlxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORkNfUE9SVDEwMFxuICA0MzpcdFx0dHJpc3RhdGUgXCYjMzQ7U29ueSBORkMgUG9ydC0xMDAgU2VyaWVzIFVTQiBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBVU0JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5NTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE5GQyBOZXRsaW5rIFNlcnZpY2UgRGlzY292ZXJ5IFJlcXVlc3QgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgbmV0L25mYy9uZXRsaW5rLmNgIGZvY3VzZXMgb24gZml4aW5nIGEgbWVtb3J5IGxlYWsgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBORkMgZGV2aWNlcywgZW1wbG95aW5nIHRoZSBORkMtREVQIHByb3RvY29sLiBMTENQIGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZXNlIHZpcnR1YWwgZGV2aWNlcywgYW5kIHBhY2tldHMgYXJlIGxvb3BlZCBiYWNrLiBTeXprYWxsZXIgc3VwcG9ydHMgTkZDIGFuZCByZWxhdGVkIG5ldGxpbmsgbWVjaGFuaXNtcywgaW5jbHVkaW5nIHNpbXVsYXRlZCBkZXZpY2VzLCB3aGljaCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQuIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGl0ZXJhdGVzIHRocm91Z2ggU0RQIGF0dHJpYnV0ZXMgcmVjZWl2ZWQgdmlhIG5ldGxpbmsuICBDcnVjaWFsbHksIGl0IGJ1aWxkcyBTRFAgVExWcyAoVHlwZS1MZW5ndGgtVmFsdWUpIHVzaW5nIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIGFuZCBhZGRzIHRoZW0gdG8gYSBsaXN0LCBgc2RyZXFfbGlzdGAuIFByZXZpb3VzbHksIGlmIGFuIGVycm9yIG9jY3VycmVkICphZnRlciogZWxlbWVudHMgd2VyZSBhZGRlZCB0byBgc2RyZXFfbGlzdGAgd2l0aGluIHRoZSBsb29wIG9yIGFmdGVyIGEgc3Vic2VxdWVudCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNhbGwsIHRoZSBmdW5jdGlvbiB3b3VsZCBzaW1wbHkgYGdvdG8gcHV0X2xvY2FsYCB3aGljaCBsZWFrZWQgdGhlIG1lbW9yeSBvZiB0aGUgYHNkcmVxX2xpc3RgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZ290byBmcmVlX2xpc3RgIHRvIGNvcnJlY3RseSBmcmVlIHRoZSBgc2RyZXFfbGlzdGAgd2hpY2ggcHJldmVudHMgdGhpcyBsZWFrLgoKTm93LCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNvbWVzIGludG8gcGxheS4gSWYgaXQgKnN1Y2NlZWRzKiwgaXQgbW92ZXMgdGhlIGVsZW1lbnRzIGZyb20gYHNkcmVxX2xpc3RgIHRvIGEgZGlmZmVyZW50IGxpc3QgYW5kICp0aGVuKiB0aGUgY29kZSBmYWxscyB0aHJvdWdoIHRvIGBmcmVlX2xpc3RgLCBlZmZlY3RpdmVseSBmcmVlaW5nIHRoZSAqZW1wdHkqIGBzZHJlcV9saXN0YCwgd2hpY2ggaXMgYSBuby1vcC4gSWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBmYWlscywgdGhlIGBzZHJlcV9saXN0YCB3b3VsZCBiZSBjb3JyZWN0bHkgZnJlZWQuCgpUaGlzIHBhdGNoIGxvb2tzIHNvdW5kIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhay4gTW9yZW92ZXIsIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgZnV6emFibGUuIE5GQyBuZXRsaW5rIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGFjY2Vzc2VkIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cywgYW5kIFN5emthbGxlciBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBFbmFibGluZyB0aGUgYE5GQ2AgY29uZmlnIG9wdGlvbiBpcyBlbm91Z2guIFRoZSBmdW5jdGlvbiBgbmZjX2dlbmxfbGxjX3NkcmVxYCBpcyBub3QgaW5saW5lZCBhbmQgd2lsbCBiZSB2aXNpYmxlIHRvIHN5bWJvbCBjb3ZlcmFnZSwgYXMgaXQgaXMgcGFydCBvZiB0aGUgYG5mY19nZW5sX29wc2AgYXJyYXkuIFRodXMsIGZ1enppbmcgYG5mY19nZW5sX2xsY19zZHJlcWAgaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYS4gVGhlIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTkZDIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBORkMgbmV0bGluayBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9uZmMvbmV0bGluay5jYCwgYW5kIEkmIzM5O20gbm90IHNlZWluZyBhbnkgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGVyZS4gSW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IgcHJvYmFibHkgaXNuJiMzOTt0IGNvbmRpdGlvbmFsIGJhc2VkIG9uIHByZXByb2Nlc3NvciBmbGFncywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5IHdpdGhpbiB0aGlzIGZpbGUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHNpbXVsYXRlZCBkZXZpY2VzIOKAkyBlc3BlY2lhbGx5IGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCDigJMgYXJlIGNvbmZpZ3VyZWQgdG8gYnJpbmcgdXAgdGhlIERFUCBsaW5rLiBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgYERFUGAgbGlua3Mgd291bGQgYmVjb21lIHJlYWNoYWJsZS4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGU/IEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYENPTkZJR19ORkNfU0lNYCwgYENPTkZJR19ORkNfRElHSVRBTGAsIG9yIG1heWJlIGV2ZW4gYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLgoKRmlyc3QsIGEgcmVhbGl0eSBjaGVjazogd2hhdCBleGFjdGx5ICpkb2VzKiBgQ09ORklHX05GQ2AgZGVwZW5kIG9uLCBmdW5kYW1lbnRhbGx5PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvbmZjL0tjb25maWdgIGZpbGUuIEFoLCB0aGUgYG1lbnVjb25maWcgTkZDYCBibG9jay4gSSBzZWUgaXQgZGVwZW5kcyBvbiBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBSRktJTExgLCB3aGljaCBpcyBhIGJpdCBvZGQgYnV0IGZ1bmN0aW9uYWxseSBtYWtlcyBzZW5zZS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBiZWNhdXNlIGl0JiMzOTtzIHVuZGVyIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBpcyBsaWtlbHkgdXRpbGl6aW5nIG5ldGxpbmsuIFNvIGBORkNgIGlzIGVzc2VudGlhbGx5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGUgc2ltdWxhdGVkIGRldmljZSBvcHRpb25zLiBgTkZDX0RJR0lUQUxgLCBgTkZDX1NJTWAgKG9yIGBORkNfVklSVFVBTF9OQ0lgKSBhcmUgdGhlIGxpa2VseSBjdWxwcml0cyBmb3IgdmlydHVhbCBORkMgZGV2aWNlIHN1cHBvcnQsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGRlcGVuZGVuY2llcy4gRG9lcyBgTkZDX1NJTWAgZGVwZW5kIG9uIGBORkNfRElHSVRBTGA/IExldCYjMzk7cyBjb25maXJtIHdpdGggdGhlIEtjb25maWc6CgpZZXAsIGFuZCBpdCBpcyBhICpoYXJkKiBkZXBlbmRlbmN5LiBUaGUgS2NvbmZpZyBzbmlwcGV0IGNvbmZpcm1zIGl0IGRpcmVjdGx5LiBPa2F5LCBsZXQmIzM5O3Mgc2VlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGhpZXJhcmNoeTogYE5GQ19TSU1gIGRlcGVuZHMgb24gYE5GQ19ESUdJVEFMYCwgYW5kIGBORkNfRElHSVRBTGAgZGVwZW5kcyBvbiBgTkZDYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCB3aGF0IGFib3V0IGBORkNfVklSVFVBTF9OQ0lgPyBMb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoYXQsIGl0IGRlcGVuZHMgb24gYE5GQ19OQ0lgLgoKTGV0JiMzOTtzIG5vdyBpbnZlc3RpZ2F0ZSBgTkZDX05DSWAuIEl0IHNlZW1zIEkmIzM5O2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9uZmMvbmNpL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZDX05DSVxuICAgMzpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05DSSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRkZWZhdWx0IG5cbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXG4gICA4Olx0XHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTkNJIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXG4gIDExOlx0XHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChuY2kpLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBORkNfTkNJX1NQSVxuICAxNDpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbiAgMTU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O05DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXG4gIDIwOlx0XHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjcxNQoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gTXkgdGFzayBpcyB0byBpZGVudGlmeSB0aGUgcHJlY2lzZSBgQ09ORklHX2Agb3B0aW9ucyBuZWVkZWQgdG8gZW5zdXJlIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGBuZmNfZ2VubF9sbGNfc2RyZXFgIHdpdGhpbiBgbmV0L25mYy9uZXRsaW5rLmNgLCBjb21waWxlcyBjb3JyZWN0bHkgYW5kIGlzIHJlYWNoYWJsZS4gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgdGhvcm91Z2huZXNzOiBubyBhc3N1bXB0aW9ucywgS2NvbmZpZyBpbnNwZWN0aW9uLCBhbmQgY29uc2lkZXJpbmcgZGVwZW5kZW5jaWVzLgoKRmlyc3QsIEkgc2VlIHRoYXQgYE5GQ2AgaXMgdGhlIGtleS4gVGhlIGNvZGUgY29tcGlsZXMgd2l0aGluIHRoZSBgTkZDYCBjb25maWd1cmF0aW9uIHNwYWNlLCBzbyBgTkZDYCBpcyBkZWZpbml0ZWx5IGVzc2VudGlhbC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYE5FVGAgaXNuJiMzOTt0IGEgcmVxdWlyZWQgcGFyZW50IHN1YnN5c3RlbSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBORkNgIGFuZCBwb3NzaWJseSBgTkZDX1NJTWAgYXMgdGhleSBtYXkgYmUgYmVuZWZpY2lhbCBhbmQgYXJlIGFsc28gZ29vZCBwcmFjdGljZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBhbGwgdGhlIGRldGFpbHMgYmVmb3JlIEkgc3VibWl0IG15IGZpbmRpbmdzIHdpdGggYHNldC1yZXN1bHRzYC4KCiogICBgV29ydGhGdXp6aW5nYDogQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLCBtZWFuaW5nIGl0JiMzOTtzIGhpZ2hseSBzdXNjZXB0aWJsZSB0byBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBpbmNvcnJlY3Qgc3RhdGVzLgoqICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmZjX2dlbmxfbGxjX3NkcmVxYCwgc28gdGhhdCYjMzk7cyBzcG90IG9uLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJJiMzOTt2ZSBnb3QgdGhpczogYFsmIzM0O05GQyYjMzQ7XWAuIEFuZCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgaW5jbHVkZSBgWyYjMzQ7TkZDJiMzNDssICYjMzQ7TkZDX1NJTSYjMzQ7XWAgdG8gbWF4aW1pemUgcmVhY2hhYmlsaXR5LgoqICAgYFJlYXNvbmluZ2A6IEhlcmUmIzM5O3MgdGhlIGNvcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG5mY19nZW5sX2xsY19zZHJlcSgpYC4gSXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBieSBlbnN1cmluZyB0aGUgcHJvcGVyIGZyZWVpbmcgb2YgU0RQIFRMViBsaXN0IGVudHJpZXMsIGJvdGggaW4gZXJyb3IgY2FzZXMgYW5kIGFmdGVyIHNlbmRpbmcgdGhlIFNOTCBTRFJFUSBtZXNzYWdlLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rLCBhbmQgaXQgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuCgpFdmVyeXRoaW5nIGlzIG1ldGljdWxvdXNseSBjaGVja2VkIGFuZCB2ZXJpZmllZC4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gbmV0L25mYy9uZXRsaW5rLmMgKG5mY19nZW5sX2xsY19zZHJlcSkuIEluIHRoZSBldmVudCBvZiBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgZmFpbHVyZSwgVExWIGFsbG9jYXRpb24gZmFpbHVyZSwgb3Igc2VuZCBmYWlsdXJlLCBwcmV2aW91c2x5IGFsbG9jYXRlZCBUTFYgZW50cmllcyBpbiBgc2RyZXFfbGlzdGAgd2VyZSBub3QgY2xlYW5lZCB1cCBiZWZvcmUgcmV0dXJuaW5nLiBUaGUgZml4IGludHJvZHVjZXMgYSBjYWxsIHRvIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KWAgb24gdGhlIGV4aXQgcGF0aCBhbmQgdXBkYXRlcyBlcnJvciBqdW1wIHRhcmdldHMgdG8gaXQuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhIChgc2RyZXFfbGlzdGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBJTklUX0hMSVNUX0hFQURgIGJlZm9yZSBhbnkgZXJyb3IgYnJhbmNoZXMpLlxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYzg0NmEzZDdiNjRjZWYzYmQxNzM5NTZlMDVjYTZkNWE3MzEwOTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTM6MzE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmZjL25ldGxpbmsuYyBiL25ldC9uZmMvbmV0bGluay5jCmluZGV4IDBjNTg4MjRjYjE1MGQuLjIyNGJkZmEyZGQwZGMgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmV0bGluay5jCkBAIC0xMTgxLDcgJiM0MzsxMTgxLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCQlpZiAocmMgIT0gMCkgewogCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBwdXRfbG9jYWw7CiYjNDM7CQkJZ290byBmcmVlX2xpc3Q7CiAJCX0KIAogCQlpZiAoIXNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSkKQEAgLTEyMDAsNyAmIzQzOzEyMDAsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlzZHJlcSA9IG5mY19sbGNwX2J1aWxkX3NkcmVxX3Rsdih0aWQsIHVyaSwgdXJpX2xlbik7CiAJCWlmIChzZHJlcSA9PSBOVUxMKSB7CiAJCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIHB1dF9sb2NhbDsKJiM0MzsJCQlnb3RvIGZyZWVfbGlzdDsKIAkJfQogCiAJCXRsdnNfbGVuICYjNDM7PSBzZHJlcS0mZ3Q7dGx2X2xlbjsKQEAgLTEyMTUsNiAmIzQzOzEyMTUsOSBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJcmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgJmFtcDtzZHJlcV9saXN0LCB0bHZzX2xlbik7CiAKJiM0MztmcmVlX2xpc3Q6CiYjNDM7CW5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KCZhbXA7c2RyZXFfbGlzdCk7CiYjNDM7CiBwdXRfbG9jYWw6CiAJbmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBjb2RlIGNoYW5nZXMgd2FycmFudCB0aGUgZXhwZW5zZSBvZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiAqKktNU0FOIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gY2FuIGRldGVjdC4qKiBBbnl0aGluZyBLQVNBTiwgTG9ja0RlcCwgb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgd291bGQgZmluZCBpcyBhIG5vLWdvIGZvciBLTVNBTi4gVGhhdCYjMzk7cyB0aGUgZ3VpZGluZyBwcmluY2lwbGUuCgpTbywgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBjcml0aWNhbCBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMsIHBhcnRpY3VsYXJseSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdGAgYW5kIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIGFyb3VuZCBsaW5lIDExODEgaW4gYG5ldC9uZmMvbmV0bGluay5jYC4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29kZSBmcm9tIGxpbmVzIDExNTAtMTI0MC4gSSB3aWxsIGxvb2sgZm9yIGFueSByZWQgZmxhZ3MsIGFueSBoaW50IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gYSB3YXkgdGhhdCAqb25seSogS01TQU4gY291bGQgdW5jb3Zlci4gVGhpcyBpcyB0aGUgY3J1eCBvZiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0gfHxcbjExNTE6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tORkNfQVRUUl9MTENfU0RQXSlcbjExNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTUzOlx0XG4xMTU0Olx0XHRpZHggPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xuMTE1NTpcdFxuMTE1NjpcdFx0ZGV2ID0gbmZjX2dldF9kZXZpY2UoaWR4KTtcbjExNTc6XHRcdGlmICghZGV2KVxuMTE1ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjExNTk6XHRcbjExNjA6XHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTE2MTpcdFxuMTE2MjpcdFx0aWYgKGRldi1cdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xuMTE2MzpcdFx0XHRyYyA9IC1FTk9MSU5LO1xuMTE2NDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTY1Olx0XHR9XG4xMTY2Olx0XG4xMTY3Olx0XHRsb2NhbCA9IG5mY19sbGNwX2ZpbmRfbG9jYWwoZGV2KTtcbjExNjg6XHRcdGlmICghbG9jYWwpIHtcbjExNjk6XHRcdFx0cmMgPSAtRU5PREVWO1xuMTE3MDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2c2RyZXFfbGlzdCk7XG4xMTc0Olx0XG4xMTc1Olx0XHR0bHZzX2xlbiA9IDA7XG4xMTc2Olx0XG4xMTc3Olx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xuMTE3ODpcdFx0XHRyYyA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzZHBfYXR0cnMsIE5GQ19TRFBfQVRUUl9NQVgsXG4xMTc5Olx0XHRcdFx0XHRcdFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXG4xMTgwOlx0XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbjExODE6XHRcbjExODI6XHRcdFx0aWYgKHJjICE9IDApIHtcbjExODM6XHRcdFx0XHRyYyA9IC1FSU5WQUw7XG4xMTg0Olx0XHRcdFx0Z290byBmcmVlX2xpc3Q7XG4xMTg1Olx0XHRcdH1cbjExODY6XHRcbjExODc6XHRcdFx0aWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pXG4xMTg4Olx0XHRcdFx0Y29udGludWU7XG4xMTg5Olx0XG4xMTkwOlx0XHRcdHVyaV9sZW4gPSBubGFfbGVuKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTkxOlx0XHRcdGlmICh1cmlfbGVuID09IDApXG4xMTkyOlx0XHRcdFx0Y29udGludWU7XG4xMTkzOlx0XG4xMTk0Olx0XHRcdHVyaSA9IG5sYV9kYXRhKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTk1Olx0XHRcdGlmICgqdXJpID09IDApXG4xMTk2Olx0XHRcdFx0Y29udGludWU7XG4xMTk3Olx0XG4xMTk4Olx0XHRcdHRpZCA9IGxvY2FsLVx1MDAzZXNkcmVxX25leHRfdGlkJiM0MzsmIzQzOztcbjExOTk6XHRcbjEyMDA6XHRcdFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xuMTIwMTpcdFx0XHRpZiAoc2RyZXEgPT0gTlVMTCkge1xuMTIwMjpcdFx0XHRcdHJjID0gLUVOT01FTTtcbjEyMDM6XHRcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbjEyMDQ6XHRcdFx0fVxuMTIwNTpcdFxuMTIwNjpcdFx0XHR0bHZzX2xlbiAmIzQzOz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbjEyMDc6XHRcbjEyMDg6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSwgXHUwMDI2c2RyZXFfbGlzdCk7XG4xMjA5Olx0XHR9XG4xMjEwOlx0XG4xMjExOlx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2c2RyZXFfbGlzdCkpIHtcbjEyMTI6XHRcdFx0cmMgPSAtRUlOVkFMO1xuMTIxMzpcdFx0XHRnb3RvIHB1dF9sb2NhbDtcbjEyMTQ6XHRcdH1cbjEyMTU6XHRcbjEyMTY6XHRcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcbjEyMTc6XHRcbjEyMTg6XHRmcmVlX2xpc3Q6XG4xMjE5Olx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KTtcbjEyMjA6XHRcbjEyMjE6XHRwdXRfbG9jYWw6XG4xMjIyOlx0XHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuMTIyMzpcdFxuMTIyNDpcdGV4aXQ6XG4xMjI1Olx0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTIyNjpcdFxuMTIyNzpcdFx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbjEyMjg6XHRcbjEyMjk6XHRcdHJldHVybiByYztcbjEyMzA6XHR9XG4xMjMxOlx0XG4xMjMyOlx0c3RhdGljIGludCBuZmNfZ2VubF9md19kb3dubG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTIzMzpcdHtcbjEyMzQ6XHRcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4xMjM1Olx0XHRpbnQgcmM7XG4xMjM2Olx0XHR1MzIgaWR4O1xuMTIzNzpcdFx0Y2hhciBmaXJtd2FyZV9uYW1lW05GQ19GSVJNV0FSRV9OQU1FX01BWFNJWkUgJiM0MzsgMV07XG4xMjM4Olx0XG4xMjM5Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkZDX0FUVFJfREVWSUNFX0lOREVYXSB8fCAhaW5mby1cdTAwM2VhdHRyc1tORkNfQVRUUl9GSVJNV0FSRV9OQU1FXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGFuZCBgc2RyZXFfbGlzdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW50ZXJuYWxseSB3aXRoIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYHNkcmVxX2xpc3RgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBoYW5kbGluZyBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0cyB3aXRoaW4gdGhlIExMQ1AgcHJvdG9jb2wsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNEIChTZXJ2aWNlIERpc2NvdmVyeSkgcmVxdWVzdCBsaXN0LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgcmlnaHQgdG8gdGhlIGNyaXRpY2FsIHBvaW50cyBpbnZvbHZpbmcgYHNkcmVxX2xpc3RgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3NlbmRfc25sX3NkcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTIzOD1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTIzOS1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQwOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwLmgtMjQxLVx0XHRcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTY5PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Mi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5MzppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5NC1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTEyMTUtXG5uZXQvbmZjL25ldGxpbmsuYzoxMjE2Olx0cmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xubmV0L25mYy9uZXRsaW5rLmMtMTIxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTExDUCBDb21tYW5kcyBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgaG93IExMQ1AgY29tbWFuZHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBORkMgc3RhY2suIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIGxvY2F0aW9uIGluIG1pbmQgLSBsZXQmIzM5O3MgemVybyBpbiBvbiBgbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU5My4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIHByb2Nlc3NpbmcgbG9naWMga2lja3MgaW4sIG9yIGF0IGxlYXN0IHRoZSBicmFuY2hpbmcgdGhhdCBkZWNpZGVzIGhvdyB0aGluZ3MgZ2V0IHByb2Nlc3NlZC4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgaW4gbW9yZSBkZXRhaWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgY29tbWFuZCBkaXNwYXRjaCwgdGhlIHBhcnNpbmcgb2YgaW5jb21pbmcgTExDUCBmcmFtZXMsIG9yIHBlcmhhcHMgdGhlIGhhbmRsaW5nIG9mIGNlcnRhaW4gY29udHJvbCBtZXNzYWdlcy4gTGluZSA1OTMgaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBvcGVyYXRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb21tYW5kcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODU6XHRcdFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2KHNkcCk7XG4gNTg2Olx0XHR9XG4gNTg3Olx0XG4gNTg4Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZsb2NhbC1cdTAwM2V0eF9xdWV1ZSwgc2tiKTtcbiA1ODk6XHRcbiA1OTA6XHRcdHJldHVybiAwO1xuIDU5MTpcdH1cbiA1OTI6XHRcbiA1OTM6XHRpbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbiA1OTQ6XHRcdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXG4gNTk1Olx0e1xuIDU5NjpcdFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xuIDU5NzpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gNTk4Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDU5OTpcdFxuIDYwMDpcdFx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XG4gNjAxOlx0XHRpZiAoSVNfRVJSKHNrYikpXG4gNjAyOlx0XHRcdHJldHVybiBQVFJfRVJSKHNrYik7XG4gNjAzOlx0XG4gNjA0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXNkcmVxX2xvY2spO1xuIDYwNTpcdFxuIDYwNjpcdFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKSlcbiA2MDc6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmxvY2FsLVx1MDAzZXNkcmVxX3RpbWVyLFxuIDYwODpcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDMgKiBsb2NhbC1cdTAwM2VyZW1vdGVfbHRvKSk7XG4gNjA5Olx0XG4gNjEwOlx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcmVxLCBuLCB0bHZfbGlzdCwgbm9kZSkge1xuIDYxMTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDt0aWQgJWQgZm9yICVzXFxuXCYjMzQ7LCBzZHJlcS1cdTAwM2V0aWQsIHNkcmVxLVx1MDAzZXVyaSk7XG4gNjEyOlx0XG4gNjEzOlx0XHRcdHNrYl9wdXRfZGF0YShza2IsIHNkcmVxLVx1MDAzZXRsdiwgc2RyZXEtXHUwMDNldGx2X2xlbik7XG4gNjE0Olx0XG4gNjE1Olx0XHRcdGhsaXN0X2RlbChcdTAwMjZzZHJlcS1cdTAwM2Vub2RlKTtcbiA2MTY6XHRcbiA2MTc6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSwgXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xuIDYxODpcdFx0fVxuIDYxOTpcdFxuIDYyMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXNkcmVxX2xvY2spO1xuIDYyMTpcdFxuIDYyMjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bG9jYWwtXHUwMDNldHhfcXVldWUsIHNrYik7XG4gNjIzOlx0XG4gNjI0Olx0XHRyZXR1cm4gMDtcbiA2MjU6XHR9XG4gNjI2Olx0XG4gNjI3Olx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxuIDYyODpcdHtcbiA2Mjk6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNjMwOlx0XHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuIDYzMTpcdFx0dTE2IHNpemUgPSAxOyAvKiBSZWFzb24gY29kZSAqL1xuIDYzMjpcdFxuIDYzMzpcdFx0cHJfZGVidWcoXCYjMzQ7U2VuZGluZyBETSByZWFzb24gMHgleFxcblwmIzM0OywgcmVhc29uKTtcbiA2MzQ6XHRcbiA2MzU6XHRcdGlmIChsb2NhbCA9PSBOVUxMKVxuIDYzNjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA2Mzc6XHRcbiA2Mzg6XHRcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiA2Mzk6XHRcdGlmIChkZXYgPT0gTlVMTClcbiA2NDA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNjQxOlx0XG4gNjQyOlx0XHRzaXplICYjNDM7PSBMTENQX0hFQURFUl9TSVpFO1xuIDY0MzpcdFx0c2l6ZSAmIzQzOz0gZGV2LVx1MDAzZXR4X2hlYWRyb29tICYjNDM7IGRldi1cdTAwM2V0eF90YWlscm9vbSAmIzQzOyBORkNfSEVBREVSX1NJWkU7XG4gNjQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgTGVha3MgaW4gTkZDIExMQ1AgU2VydmljZSBEaXNjb3ZlcnkgUmVxdWVzdCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIGlmIGBuZmNfbGxjcF9hbGxvY2F0ZV9zbmwobG9jYWwsIHRsdnNfbGVuKWAgZmFpbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHJldHVybmluZyBhbiBgRVJSX1BUUihza2IpYC4gQ3J1Y2lhbGx5LCBpdCByZXR1cm5zICpiZWZvcmUqIGNvbnN1bWluZyB0aGUgYHRsdl9saXN0YC4gVGhhdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGxlYWsuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgd2hlcmUgdGhpcyBpcyBjYWxsZWQ6IGBuZmNfZ2VubF9sbGNfc2RyZXFgLiBUaGUgb3JpZ2luYWwgY29kZSBsb29rZWQgbGlrZSB0aGlzOgoKYGBgYwoJcmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgJmFtcDtzZHJlcV9saXN0LCB0bHZzX2xlbik7CgpwdXRfbG9jYWw6CgluZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpOwpgYGAKClRoZSBvbGQgZmxvdyB1c2VkIHRvIGhhdmUgYSBsb29wIHRoYXQgY2hlY2tlZDogYElmIHJjICE9IDAgb3Igc2RyZXEgPT0gTlVMTGA6IGBnb3RvIHB1dF9sb2NhbDtgLiBUaGF0JiMzOTtzIGEgcHJvYmxlbSwgYmVjYXVzZSBpZiB0aGVyZSYjMzk7cyBhbiBlcnJvciBpbiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIChsaWtlIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUgSSBtZW50aW9uZWQpLCBvciBpZiB0aGUgcmV0dXJuIGNvZGUgaXMgbm9uLXplcm8sIHRoZSBjb2RlIGp1bXBzIHRvIGBwdXRfbG9jYWxgICp3aXRob3V0KiBmcmVlaW5nIHRoZSBgc2RyZXFfbGlzdGAuICBBbm90aGVyIGxlYWshCgpCdXQuLi4gd2hhdCBpZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGFjdHVhbGx5ICpzdWNjZWVkcyo/IExldCYjMzk7cyB0cmFjZSBpdC4gSW5zaWRlIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIEkgc2VlIHRoaXMgY3JpdGljYWwgc25pcHBldDoKCmBgYGMKCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcmVxLCBuLCB0bHZfbGlzdCwgbm9kZSkgewoJCQlwcl9kZWJ1ZygmIzM0O3RpZCAlZCBmb3IgJXNcbiYjMzQ7LCBzZHJlcS0mZ3Q7dGlkLCBzZHJlcS0mZ3Q7dXJpKTsKCgkJCXNrYl9wdXRfZGF0YShza2IsIHNkcmVxLSZndDt0bHYsIHNkcmVxLSZndDt0bHZfbGVuKTsKCgkJCWhsaXN0X2RlbCgmYW1wO3NkcmVxLSZndDtub2RlKTsKCgkJCWhsaXN0X2FkZF9oZWFkKCZhbXA7c2RyZXEtJmd0O25vZGUsICZhbXA7bG9jYWwtJmd0O3BlbmRpbmdfc2RyZXFzKTsKCQl9CmBgYAoKQWhhISAgRWFjaCBlbnRyeSBpbiBgdGx2X2xpc3RgIGlzICptb3ZlZCogdG8gYGxvY2FsLSZndDtwZW5kaW5nX3NkcmVxc2AuICBTbywgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCAqc3VjY2VlZHMqLCB0aGUgb3JpZ2luYWwgYHRsdl9saXN0YCAod2hpY2ggaXMgYCZhbXA7c2RyZXFfbGlzdGApIGlzIG5vdyAqZW1wdHkqISAoYGhsaXN0X2VtcHR5KCZhbXA7c2RyZXFfbGlzdCkgPT0gdHJ1ZWApLiBTbywgbm8gbGVhayEgIFRoYXQmIzM5O3MgZ29vZC4KClNvLCB0aGUgY3JpdGljYWwgY2FzZXMgYXJlIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmVzIGFuZCB0aG9zZSBub24temVybyByZXR1cm4gY29kZXMgKmJlZm9yZSogdGhlIGxpc3QgaXMgZW1wdGllZC4gTm93IEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGxpc3QgaXMgdWx0aW1hdGVseSBjbGVhbmVkIHVwLCBsZXQmIzM5O3MgZmluZCB3aGVyZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGlzIHVzZWQgYW5kIHNlZSBpZiBpdCBpcyBhcHByb3ByaWF0ZWx5IGNhbGxlZC4gSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGdyZXBwaW5nIG5vdyB0byBiZSBzdXJlIG9mIHRoZSBmaW5hbCBjbGVhbnVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3AuaD0yMzI9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xubmV0L25mYy9sbGNwLmgtMjM0LXZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE4MS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTcxLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV90aW1lb3V0X3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZsb2NhbC1cdTAwM2VwZW5kaW5nX3NkcmVxcyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3My19XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy00MjMtXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzZHJlc19saXN0KTtcbm5ldC9uZmMvbmV0bGluay5jLTQyNS1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYz0xMTM3PXN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XG5uZXQvbmZjL25ldGxpbmsuYzoxMjE5Olx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7XG5uZXQvbmZjL25ldGxpbmsuYy0xMjIwLVxuLS1cbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL25mYy5oOjU5OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpO1xubmV0L25mYy9uZmMuaC02MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBsbGNwX2NvbW1hbmRzLmMgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AgYW5kIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBTRFAgVExWIGxpc3RzLCBhbmQgdGhpcyBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGZyZWUgb3BlcmF0aW9uLCBidXQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGFueSBzdWJ0bGV0aWVzIG9yIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvbW1hbmRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFxuIDE3MTpcdFx0cmV0dXJuIHNkcmVxO1xuIDE3MjpcdH1cbiAxNzM6XHRcbiAxNzQ6XHR2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxuIDE3NTpcdHtcbiAxNzY6XHRcdGtmcmVlKHNkcC1cdTAwM2V0bHYpO1xuIDE3NzpcdFx0a2ZyZWUoc2RwKTtcbiAxNzg6XHR9XG4gMTc5Olx0XG4gMTgwOlx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbiAxODE6XHR7XG4gMTgyOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xuIDE4MzpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gMTg0Olx0XG4gMTg1Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcCwgbiwgaGVhZCwgbm9kZSkge1xuIDE4NjpcdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RwLVx1MDAzZW5vZGUpO1xuIDE4NzpcdFxuIDE4ODpcdFx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHYoc2RwKTtcbiAxODk6XHRcdH1cbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0aW50IG5mY19sbGNwX3BhcnNlX2diX3RsdihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIDE5MzpcdFx0XHRcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pXG4gMTk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjYzCgkJCQkJCQlvdXRwdXQ6IDMxMwoJCQkJCQkJdGhvdWdodHM6IDE1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTWVtb3J5IExlYWsgRml4IGluIE5GQyBOZXRsaW5rIEludGVyZmFjZTogS01TQU4gUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBmdW5jdGlvbiBqdXN0IGl0ZXJhdGVzIHRocm91Z2ggYSBsaXN0LCBkZWxldGVzIGVhY2ggZWxlbWVudCwgYW5kIGZyZWVzIHRoZSBhc3NvY2lhdGVkIG1lbW9yeS4gSWYgdGhlIGxpc3QgaXMgZW1wdHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIHRoZSBsb29wIGRvZXNuJiMzOTt0IGV2ZW4gcnVuLiAgQW5kLCBjcnVjaWFsbHksIGFueSByZW1haW5pbmcgZWxlbWVudHMgaW4gYHNkcmVxX2xpc3RgIGFyZSBhbHNvIGZyZWVkIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb3Igc2VuZGluZyBvZiB0aGUgU0RSRVEuCgpTbywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBtZW1vcnkgbGVhayBpbiBgbmZjX2dlbmxfbGxjX3NkcmVxKClgLiBJdCBsb29rcyBsaWtlIHdoZW4gYG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCgpYCBmYWlscywgb3IgYWxsb2NhdGlvbiBmYWlscyBpbiBgbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KClgLCBvciBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoKWAgaXRzZWxmIGZhaWxzLCB0aGUgY29kZSBwcmV2aW91c2x5IGp1bXBlZCB0byBgcHV0X2xvY2FsYCB3aXRob3V0IGNsZWFuaW5nIHVwIHRoZSBhbGxvY2F0ZWQgVExWcy4gTm93LCB0aGUgcGF0Y2ggY29ycmVjdGx5IGFkZHMgYSBgZnJlZV9saXN0OmAgbGFiZWwgdG8gY2FsbCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtzZHJlcV9saXN0KTtgIGJlZm9yZSBgcHV0X2xvY2FsYCBmb3IgYSBjb25zaXN0ZW50IGNsZWFudXAuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLTVNBTi4gQXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBoZXJlPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFdlJiMzOTtyZSBub3Qgc2VuZGluZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgYW55IG9mIHRob3NlIG1ldGhvZHMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIFRoZSBgc2RyZXFfbGlzdGAgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX0hMSVNUX0hFQUQoJmFtcDtzZHJlcV9saXN0KTtgIGF0IGxpbmUgMTE3MyBiZWZvcmUgYW55IHVzZSBvciBicmFuY2guCjMuICAqKkFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOby4gVGhpcyBwYXRjaCAqb25seSogZnJlZXMgbWVtb3J5LiBObyBuZXcgYWxsb2NhdGlvbnMgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGluaXRpYWxpemVkIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyLgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcz8qKiBEZWZpbml0ZWx5IG5vdC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggY2xlYW5pbmcgdXAgYWxsb2NhdGVkIG1lbW9yeS4KClNvLCBubywgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBBbGwgdGhlIHBhdGNoIGRvZXMgaXMgZnJlZSBtZW1vcnksIGFuZCB0aGF0JiMzOTtzIGl0IQoKQmFzaWNhbGx5LCBpdCYjMzk7cyBhIG1lbW9yeSBsZWFrIGZpeC4gSWYgYW55IGJ1Z3MgZXhpc3QgaGVyZSwgdGhleSYjMzk7ZCBiZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIGxpa2UgZG91YmxlIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGludmFsaWQgbGlzdCBvcGVyYXRpb25zLiBLQVNBTi9TTFVCIGRlYnVnIGlzIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgY2F0Y2hpbmcgdGhvc2UuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gSXQgZG9lc24mIzM5O3QgYXBwbHkgaGVyZS4KCioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4qKgoKVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBuZXRsaW5rIGludGVyZmFjZSYjMzk7cyBgbmZjX2dlbmxfbGxjX3NkcmVxKClgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBhbGxvY2F0ZWQgVExWIG9iamVjdHMgd2l0aGluIHRoZSBgc2RyZXFfbGlzdGAgd2VyZSBsZWFrZWQgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIChmYWlsZWQgYXR0cmlidXRlIHBhcnNpbmcsIGFsbG9jYXRpb24gZXJyb3JzLCBvciBmYWlsdXJlIG9mIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcSgpYCkuIFRoZSBmaXggcm91dGVzIGVycm9yIHBhdGhzIHRocm91Z2ggYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KCZhbXA7c2RyZXFfbGlzdClgIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBvYmplY3RzLgoKVGhlIGNoYW5nZXMgaW52b2x2ZSBzdHJpY3RseSBmcmVlaW5nIGhlYXAtYWxsb2NhdGVkIG9iamVjdHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgaW52YWxpZCBsaXN0IG9wZXJhdGlvbnMpLCB3aGljaCBhcmUgc3BlY2lmaWNhbGx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZyBmZWF0dXJlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgY29weSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHNkcmVxX2xpc3RgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBwb3RlbnRpYWwgYGdvdG8gZnJlZV9saXN0YCB1c2FnZS4gVGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCwgYW5kIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUuIFRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIG9mIHRoaXMgcGF0Y2ggYXJlIGJldHRlciBzdWl0ZWQgdG8gS0FTQU4gdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gbmV0L25mYy9uZXRsaW5rLmMgKG5mY19nZW5sX2xsY19zZHJlcSkuIEluIHRoZSBldmVudCBvZiBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgZmFpbHVyZSwgVExWIGFsbG9jYXRpb24gZmFpbHVyZSwgb3Igc2VuZCBmYWlsdXJlLCBwcmV2aW91c2x5IGFsbG9jYXRlZCBUTFYgZW50cmllcyBpbiBgc2RyZXFfbGlzdGAgd2VyZSBub3QgY2xlYW5lZCB1cCBiZWZvcmUgcmV0dXJuaW5nLiBUaGUgZml4IGludHJvZHVjZXMgYSBjYWxsIHRvIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KWAgb24gdGhlIGV4aXQgcGF0aCBhbmQgdXBkYXRlcyBlcnJvciBqdW1wIHRhcmdldHMgdG8gaXQuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhIChgc2RyZXFfbGlzdGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBJTklUX0hMSVNUX0hFQURgIGJlZm9yZSBhbnkgZXJyb3IgYnJhbmNoZXMpLlxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayBpbiBuZXQvbmZjL25ldGxpbmsuYyAobmZjX2dlbmxfbGxjX3NkcmVxKS4gSW4gdGhlIGV2ZW50IG9mIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyBmYWlsdXJlLCBUTFYgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciBzZW5kIGZhaWx1cmUsIHByZXZpb3VzbHkgYWxsb2NhdGVkIFRMViBlbnRyaWVzIGluIGBzZHJlcV9saXN0YCB3ZXJlIG5vdCBjbGVhbmVkIHVwIGJlZm9yZSByZXR1cm5pbmcuIFRoZSBmaXggaW50cm9kdWNlcyBhIGNhbGwgdG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXG4tIFRoZSBjaGFuZ2VzIHNvbGVseSBpbnZvbHZlIGVycm9yIGNsZWFudXAgYW5kIGZyZWVpbmcgaGVhcCBtZW1vcnkgKGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdGApLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSwgdXNlLWFmdGVyLWZyZWUsIG9yIGNvcnJ1cHRlZCBsaXN0IHRyYXZlcnNhbCkgYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIG1vbml0b3JlZCBieSBLQVNBTiBhbmQgU0xVQiBkZWJ1Zy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzE6MjQuMjA4MDQ1MzcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTE5MTkwNDE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfZ2VubF9sbGNfc2RyZXFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXFxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozMToyNC4yMDgwNTA2MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDU4MDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjODQ2YTNkN2I2NGNlZjNiZDE3Mzk1NmUwNWNhNmQ1YTczMTA5NjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6MzE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uZXRsaW5rLmMgYi9uZXQvbmZjL25ldGxpbmsuY1xcbmluZGV4IDBjNTg4MjRjYjE1MGQuLjIyNGJkZmEyZGQwZGMgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9uZXRsaW5rLmNcXG4rKysgYi9uZXQvbmZjL25ldGxpbmsuY1xcbkBAIC0xMTgxLDcgKzExODEsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0XFx0aWYgKHJjICE9IDApIHtcXG4gXFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIHB1dF9sb2NhbDtcXG4rXFx0XFx0XFx0Z290byBmcmVlX2xpc3Q7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICghc2RwX2F0dHJzW05GQ19TRFBfQVRUUl9VUkldKVxcbkBAIC0xMjAwLDcgKzEyMDAsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRzZHJlcSA9IG5mY19sbGNwX2J1aWxkX3NkcmVxX3Rsdih0aWQsIHVyaSwgdXJpX2xlbik7XFxuIFxcdFxcdGlmIChzZHJlcSA9PSBOVUxMKSB7XFxuIFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0Z290byBwdXRfbG9jYWw7XFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR0bHZzX2xlbiArPSBzZHJlcS1cXHUwMDNldGx2X2xlbjtcXG5AQCAtMTIxNSw2ICsxMjE1LDkgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFxcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XFxuIFxcbitmcmVlX2xpc3Q6XFxuK1xcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFxcdTAwMjZzZHJlcV9saXN0KTtcXG4rXFxuIHB1dF9sb2NhbDpcXG4gXFx0bmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjMxOjI0LjcxOTQ3NDQxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTI1NjkxNzQ0Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19nZW5sX2xsY19zZHJlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGFuZCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIG5mY19nZW5sX2xsY19zZHJlcSgpIGluIG5ldC9uZmMvbmV0bGluay5jIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9mIFNEUCBUTFYgZWxlbWVudHMgd2hlbiBwcm9jZXNzaW5nIE5GQ19DTURfTExDX1NEUkVRIGdlbmVyaWMgbmV0bGluayBjb21tYW5kcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHNvZnR3YXJlLWVtdWxhdGVkIE5GQyBkZXZpY2VzLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGxpc3QgaGFuZGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWM4NDZhM2Q3YjY0Y2VmM2JkMTczOTU2ZTA1Y2E2ZDVhNzMxMDk2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjMxOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uZXRsaW5rLmMgYi9uZXQvbmZjL25ldGxpbmsuY1xuaW5kZXggMGM1ODgyNGNiMTUwZC4uMjI0YmRmYTJkZDBkYyAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbmV0bGluay5jXG4rKysgYi9uZXQvbmZjL25ldGxpbmsuY1xuQEAgLTExODEsNyArMTE4MSw3IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRcdGlmIChyYyAhPSAwKSB7XG4gXHRcdFx0cmMgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gcHV0X2xvY2FsO1xuK1x0XHRcdGdvdG8gZnJlZV9saXN0O1xuIFx0XHR9XG4gXG4gXHRcdGlmICghc2RwX2F0dHJzW05GQ19TRFBfQVRUUl9VUkldKVxuQEAgLTEyMDAsNyArMTIwMCw3IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdHNkcmVxID0gbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KHRpZCwgdXJpLCB1cmlfbGVuKTtcbiBcdFx0aWYgKHNkcmVxID09IE5VTEwpIHtcbiBcdFx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBwdXRfbG9jYWw7XG4rXHRcdFx0Z290byBmcmVlX2xpc3Q7XG4gXHRcdH1cbiBcbiBcdFx0dGx2c19sZW4gKz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbkBAIC0xMjE1LDYgKzEyMTUsOSBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0cmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xuIFxuK2ZyZWVfbGlzdDpcbitcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpO1xuK1xuIHB1dF9sb2NhbDpcbiBcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozMToyNC43MTk0NzYxMDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjUyNzY0NTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGluIGBuZXQvbmZjL25ldGxpbmsuY2AsIHNwZWNpZmljYWxseSBpbiB0aGUgYG5mY19nZW5sX2xsY19zZHJlcWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgYGdvdG9gIHRhcmdldCBmb3IgZXJyb3IgaGFuZGxpbmcgaXMgYmVpbmcgY2hhbmdlZCBmcm9tIGBwdXRfbG9jYWxgIHRvIGBmcmVlX2xpc3RgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEl0IGxvb2tzIGxpa2UgaXQncyByZWxhdGVkIHRvIGZyZWVpbmcgYSBsaXN0IG9mIFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIFRMVnMgKFR5cGUtTGVuZ3RoLVZhbHVlKS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zLCBJIHNob3VsZCBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbmZjL25ldGxpbmsuY2AsIGFyb3VuZCBsaW5lIDExODEuIEkgbmVlZCB0byBrbm93IGhvdyBgc2RyZXFfbGlzdGAgaXMgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGVuc3VyZXMgdGhhdCB0aGUgYHNkcmVxX2xpc3RgIGlzIGFsd2F5cyBmcmVlZCwgZXZlbiBpZiBhbiBlcnJvciBvY2N1cnMgZWFybHkgaW4gdGhlIGZ1bmN0aW9uLiBCZWZvcmUsIGlmIGFuIGVycm9yIG9jY3VycmVkIGJlZm9yZSByZWFjaGluZyB0aGUgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBjYWxsLCB0aGUgYHNkcmVxX2xpc3RgIHdvdWxkbid0IGJlIGZyZWVkLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4ga2VybmVsIGNvZGUgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgcHVycG9zZSBvZiB0aGUgZml4LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHNpbWlsYXIgcGF0dGVybnMgYW5kIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBpcyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6MTcuMjQ3MTI1ODI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tORkNfQVRUUl9ERVZJQ0VfSU5ERVhdIHx8XFxuMTE1MTpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0xMQ19TRFBdKVxcbjExNTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdFxcdGlkeCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRkZXYgPSBuZmNfZ2V0X2RldmljZShpZHgpO1xcbjExNTc6XFx0XFx0aWYgKCFkZXYpXFxuMTE1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0ZGV2aWNlX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcXG4xMTYzOlxcdFxcdFxcdHJjID0gLUVOT0xJTks7XFxuMTE2NDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTE2NTpcXHRcXHR9XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGxvY2FsID0gbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpO1xcbjExNjg6XFx0XFx0aWYgKCFsb2NhbCkge1xcbjExNjk6XFx0XFx0XFx0cmMgPSAtRU5PREVWO1xcbjExNzA6XFx0XFx0XFx0Z290byBleGl0O1xcbjExNzE6XFx0XFx0fVxcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNkcmVxX2xpc3QpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHR0bHZzX2xlbiA9IDA7XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xcbjExNzg6XFx0XFx0XFx0cmMgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc2RwX2F0dHJzLCBORkNfU0RQX0FUVFJfTUFYLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXFxuMTE4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0XFx0aWYgKHJjICE9IDApIHtcXG4xMTgzOlxcdFxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMTg0OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjExODU6XFx0XFx0XFx0fVxcbjExODY6XFx0XFxuMTE4NzpcXHRcXHRcXHRpZiAoIXNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSlcXG4xMTg4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRcXHR1cmlfbGVuID0gbmxhX2xlbihzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTE6XFx0XFx0XFx0aWYgKHVyaV9sZW4gPT0gMClcXG4xMTkyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRcXHR1cmkgPSBubGFfZGF0YShzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTU6XFx0XFx0XFx0aWYgKCp1cmkgPT0gMClcXG4xMTk2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTc6XFx0XFxuMTE5ODpcXHRcXHRcXHR0aWQgPSBsb2NhbC1cXHUwMDNlc2RyZXFfbmV4dF90aWQrKztcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0XFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xcbjEyMDE6XFx0XFx0XFx0aWYgKHNkcmVxID09IE5VTEwpIHtcXG4xMjAyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4xMjAzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjEyMDQ6XFx0XFx0XFx0fVxcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRcXHR0bHZzX2xlbiArPSBzZHJlcS1cXHUwMDNldGx2X2xlbjtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlLCBcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIwOTpcXHRcXHR9XFxuMTIxMDpcXHRcXG4xMjExOlxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2c2RyZXFfbGlzdCkpIHtcXG4xMjEyOlxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMjEzOlxcdFxcdFxcdGdvdG8gcHV0X2xvY2FsO1xcbjEyMTQ6XFx0XFx0fVxcbjEyMTU6XFx0XFxuMTIxNjpcXHRcXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xcbjEyMTc6XFx0XFxuMTIxODpcXHRmcmVlX2xpc3Q6XFxuMTIxOTpcXHRcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdHB1dF9sb2NhbDpcXG4xMjIyOlxcdFxcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XFxuMTIyMzpcXHRcXG4xMjI0OlxcdGV4aXQ6XFxuMTIyNTpcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuMTIyNjpcXHRcXG4xMjI3OlxcdFxcdG5mY19wdXRfZGV2aWNlKGRldik7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6MTcuMjQ3MjUxMzY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI2MTczMzY4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMTEMgU0RSRVEgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBmdW5jdGlvbiwgcHJlLXBhdGNoLCBpdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgZXhpc3RzLiBTcGVjaWZpY2FsbHksIGlmIGBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWRgIChsaW5lIDExODIpIG9yIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIChsaW5lIDEyMDEpIGVuY291bnRlcnMgYW4gZXJyb3IsIHRoZSBjb2RlIGp1bXBzIGRpcmVjdGx5IHRvIGBwdXRfbG9jYWxgLiBUaGUgcHJvYmxlbT8gQW55IGVsZW1lbnRzIGFscmVhZHkgYXBwZW5kZWQgdG8gYHNkcmVxX2xpc3RgIHdvdWxkIGJlIG9ycGhhbmVkLiBUaGF0J3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLlxuXG5IYW5nIG9uLi4uIHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2UgSSBuZWVkIHRvIGNvbnNpZGVyLiBMb29rIGF0IHRoZSBwb3N0LWxvb3Agc3RydWN0dXJlOlxuXG5gYGBjXG5cdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcblxucHV0X2xvY2FsOlxuXHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuYGBgXG5cblRoZSBjYWxsIHRvIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgY29tZXMgKmJlZm9yZSogYHB1dF9sb2NhbGAuIE5vdywgSSdtIHF1ZXN0aW9uaW5nIHdoZXRoZXIgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBhY3R1YWxseSBjb25zdW1lcyB0aGUgYHNkcmVxX2xpc3RgIG9yIG5vdC4gSXMgdGhlIGxpc3QncyBkYXRhIGJlaW5nIHByb3Blcmx5IGhhbmRsZWQgYWZ0ZXIgdGhlIGNhbGw/IEkgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IHRoZSBsaXN0IGlzIGJlaW5nIGZyZWVkLCBtb3ZlZCwgb3IgY29waWVkIHRoZXJlLiBJIGNhbm5vdCB2ZXJpZnkgdGhpcyB1bmxlc3MgSSBjaGVjayB0aGUgZnVuY3Rpb24gYm9keS4gVGhlIGxlYWssIG9yIGxhY2sgb2YgbGVhaywgZGVwZW5kcyBvbiB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBvZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIHJpZ2h0IGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozMjo0OS44NjQ1OTE3NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5Mjg1OTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZmNfbGxjcF9zZW5kX3NubF9zZHJlcVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3AuaD0yMzg9aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVzKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmgtMjM5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XFxubmV0L25mYy9sbGNwLmg6MjQwOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcC5oLTI0MS1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTY5PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTkyLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5MzppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTIxNS1cXG5uZXQvbmZjL25ldGxpbmsuYzoxMjE2OlxcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFxcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XFxubmV0L25mYy9uZXRsaW5rLmMtMTIxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6NTEuNzU3NDYwMzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDkxNDEyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2A6XG5cbioqQW5hbHl6aW5nIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAuIExldCdzIGFzc3VtZSBpdCdzIHNpdHRpbmcgdGhlcmUgaW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwgZ2l2ZW4gdGhlIG5hbWUsIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgc2VuZGluZyBvZiBhIFwiU2VydmljZSBOYW1lIExvb2t1cCAoU05MKSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSlcIiBtZXNzYWdlIHdpdGhpbiB0aGUgTExDUCAoTGluayBMYXllciBDb250cm9sIFByb3RvY29sKSBjb250ZXh0LiBMTENQLCBhcyBJIGtub3cgaXQsIGlzIHRoYXQgY3J1Y2lhbCBsYXllciBzaXR0aW5nIGFib3ZlIE5GQyBhbmQgb2ZmZXJpbmcgY29ubmVjdGlvbi1vcmllbnRlZCBjb21tdW5pY2F0aW9uLlxuXG5UaGVyZWZvcmUsIG15IG1pbmQgaXMgaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgdGhlIGZvbGxvd2luZyBwb2ludHMsIGFzIHRoaXMga2luZCBvZiByZXF1ZXN0IGlzIHRoZSBrZXkgdG8gc2VydmljZSBkaXNjb3Zlcnk6XG4qICAgKipQdXJwb3NlOioqIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBpcyBhYm91dCBzZWFyY2hpbmcgZm9yIGF2YWlsYWJsZSBORkMgc2VydmljZXMgb24gYSByZW1vdGUgZGV2aWNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIFNlcnZpY2UgTmFtZSBMb29rdXAgcHJvY2Vzcy5cbiogICAqKkxMQ1AgQ29udGV4dDoqKiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmZhY2VzIGRpcmVjdGx5IHdpdGggdGhlIExMQ1AgcHJvdG9jb2wgc3RhY2suIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBmb3JtYXRzIGFuZCB0cmFuc21pdHMgdGhlIFNEUkVRIG1lc3NhZ2UgYXQgdGhlIExMQ1AgbGV2ZWwuIFByb2JhYmx5IHVzaW5nIHNwZWNpZmljIExMQ1AgcHJpbWl0aXZlcy9BUElzLCBub3QgcmF3IE5GQyBzaWduYWxpbmcuXG4qICAgKipEYXRhIFN0cnVjdHVyZToqKiBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBTRFJFUSwgaG9sZGluZyB0aGUgc2VydmljZSBuYW1lIHRvIGJlIGxvb2tlZCB1cCAob3IgcGVyaGFwcyBhIHdpbGRjYXJkIGluZGljYXRpbmcgYSBicm9hZCBzZWFyY2gpLiBUaGUgZnVuY3Rpb24gbWlnaHQgcG9wdWxhdGUgdGhpcyBzdHJ1Y3R1cmUgYW5kIHRoZW4gcGFzcyBpdCB0byB0aGUgbG93ZXIgbGF5ZXJzLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogU2VuZGluZyBhIHJlcXVlc3QgaXMgb25lIHRoaW5nLCBkZWFsaW5nIHdpdGggcG90ZW50aWFsIGVycm9ycyBhbmQgdGltZW91dHMgaXMgYW5vdGhlci4gSSdsbCBiZSBjdXJpb3VzIHRvIHNlZSBob3cgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBoYW5kbGVzIHRoaW5ncyBpZiB0aGUgY29tbXVuaWNhdGlvbiBmYWlscywgb3IgaWYgdGhlcmUncyBubyByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlLiBBcmUgdGhlcmUgcmV0cnkgbWVjaGFuaXNtcz8gVGltZW91dHM/IEVycm9yIGNvZGVzIHBhc3NlZCBiYWNrP1xuKiAgICoqQXN5bmNocm9ub3VzIE5hdHVyZToqKiBMTENQIGFuZCBORkMgYXJlIG9mdGVuIGFzeW5jaHJvbm91cy4gVGhpcyBmdW5jdGlvbiBtaWdodCBraWNrIG9mZiB0aGUgU0RSRVEgdHJhbnNtaXNzaW9uIGFuZCB0aGVuIHJldHVybiwgd2l0aCBhIGNhbGxiYWNrIG9yIGNvbXBsZXRpb24gaGFuZGxlciBiZWluZyB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlc3BvbnNlIGxhdGVyLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBwcm90ZWN0IHNoYXJlZCByZXNvdXJjZXMsIGlmIGFueS5cbiogICAqKkludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1bmN0aW9uczoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHJlbGF0ZSB0byBvdGhlciBMTENQIGZ1bmN0aW9ucyBvciBORkMgc3RhY2sgY29tcG9uZW50cz8gRG9lcyBpdCBjYWxsIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gYGxsY3BfY29tbWFuZHMuY2Agb3IgZWxzZXdoZXJlIHRvIGNvbnN0cnVjdCB0aGUgU0RSRVE/IERvZXMgaXQgY2FsbCBhIGZ1bmN0aW9uIHRvIHJlY2VpdmUgdGhlIFNEUkVTP1xuXG5MZXQncyBzZWUgd2hhdCdzIGluIHRoaXMgZnVuY3Rpb24uIEkgYW0gcmVhZHkgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjMyOjU4LjI0ODg3NTM5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU5MDpcXHRcXHRyZXR1cm4gMDtcXG4gNTkxOlxcdH1cXG4gNTkyOlxcdFxcbiA1OTM6XFx0aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuIDU5NDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXFxuIDU5NTpcXHR7XFxuIDU5NjpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RyZXE7XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4gNTk4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDU5OTpcXHRcXG4gNjAwOlxcdFxcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xcbiA2MDE6XFx0XFx0aWYgKElTX0VSUihza2IpKVxcbiA2MDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2tiKTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX2xvY2spO1xcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcykpXFxuIDYwNzpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmxvY2FsLVxcdTAwM2VzZHJlcV90aW1lcixcXG4gNjA4OlxcdFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMyAqIGxvY2FsLVxcdTAwM2VyZW1vdGVfbHRvKSk7XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RyZXEsIG4sIHRsdl9saXN0LCBub2RlKSB7XFxuIDYxMTpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwidGlkICVkIGZvciAlc1xcXFxuXFxcIiwgc2RyZXEtXFx1MDAzZXRpZCwgc2RyZXEtXFx1MDAzZXVyaSk7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2IsIHNkcmVxLVxcdTAwM2V0bHYsIHNkcmVxLVxcdTAwM2V0bHZfbGVuKTtcXG4gNjE0OlxcdFxcbiA2MTU6XFx0XFx0XFx0aGxpc3RfZGVsKFxcdTAwMjZzZHJlcS1cXHUwMDNlbm9kZSk7XFxuIDYxNjpcXHRcXG4gNjE3OlxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZzZHJlcS1cXHUwMDNlbm9kZSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcyk7XFxuIDYxODpcXHRcXHR9XFxuIDYxOTpcXHRcXG4gNjIwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX2xvY2spO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3F1ZXVlLCBza2IpO1xcbiA2MjM6XFx0XFxuIDYyNDpcXHRcXHRyZXR1cm4gMDtcXG4gNjI1OlxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxcbiA2Mjg6XFx0e1xcbiA2Mjk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6NTguMjQ4OTcwNzQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzE1NzQ3MjY2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSkgVHJhbnNtaXNzaW9uKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgZnVuY3Rpb24uIEhtbSwgdGhlIGZpcnN0IHN0ZXAgaXMgYWxsb2NhdGluZyBhIHNvY2tldCBidWZmZXIgKGBza2JgKSB1c2luZyBgbmZjX2xsY3BfYWxsb2NhdGVfc25sYC4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyBhbiBlcnJvciBwb2ludGVyLCBgUFRSX0VSUihza2IpYC4gSW1wb3J0YW50bHksIGluIHRoaXMgZmFpbHVyZSBzY2VuYXJpbywgdGhlIGBzZHJlcV9saXN0YCBpc24ndCB0b3VjaGVkLCByZW1haW5pbmcgYXMgaXQgd2FzLiBIb3dldmVyLCBpZiB0aGUgYWxsb2NhdGlvbiAqc3VjY2VlZHMqLCB0aGUgY29kZSBtb3ZlcyB0aGUgZWxlbWVudHMgZnJvbSBgc2RyZXFfbGlzdGAgdG8gYGxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzYC4gVGhpcyBtZWFucyBgc2RyZXFfbGlzdGAgaXMgbm93IGVtcHR5LiBHb29kLiBUaGUgYHNkcmVxX2xvY2tgIG11dGV4IGlzIGFsc28gYWNxdWlyZWQsIGFuZCB0aGUgYHNkcmVxX3RpbWVyYCBpcyBzdGFydGVkIGlmIHRoZXJlIGFyZSBubyBvdGhlciBwZW5kaW5nIFNEUkVRcywgYW5kIGVhY2ggU0RSRVEgaXMgcHJvY2Vzc2VkLlxuXG5Ob3csIGxvb2tpbmcgYXQgYG5mY19nZW5sX2xsY19zZHJlcWAsIGl0IGNhbGxzIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgd2l0aCBgc2RyZXFfbGlzdGAuIFRoZW4sIGFmdGVyIHRoZSBjYWxsLCBpdCBoaXRzIGBmcmVlX2xpc3Q6YCBhbmQgY2FsbHMgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpYC5cblxuSG9sZCBvbi4gV2UganVzdCBlc3RhYmxpc2hlZCB0aGF0IHRoZSBgc2RyZXFfbGlzdGAgaXMgKmVtcHR5KiBhZnRlciBhICpzdWNjZXNzZnVsKiB0cmFuc21pc3Npb24uIFNvLCB3aGF0IGlzIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdGAgZG9pbmc/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGxpZXMsIGFuZCB3aGVyZSBhbnkgcG90ZW50aWFsIGNsZWFudXAgbWlnaHQgYmUuIEl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgdmVyaWZ5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBvciBtZW1vcnkgY29ycnVwdGlvbi4gSSBtdXN0IGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgdGhlIGxpc3QgaXMgdHJ1bHkgZnJlZWQsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgU0RSRVEgbGlmZWN5Y2xlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzQ6MDkuODIzNzAzMjUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1NDU3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcC5oPTIzMj12b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xcbm5ldC9uZmMvbGxjcC5oLTIzNC12b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3OS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODEte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzEtXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX3RpbWVvdXRfd29yayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcyk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzMtfVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTQyMy1cXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc2RyZXNfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtNDI1LVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XFxubmV0L25mYy9uZXRsaW5rLmM6MTIxOTpcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtMTIyMC1cXG4tLVxcbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XFxubmV0L25mYy9uZmMuaDo1OTp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKTtcXG5uZXQvbmZjL25mYy5oLTYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozNDoxMS44NTkxODIxOTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY1ODA1NTE0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCoqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYCBhbmQgaGF2ZSBhIGxvb2suIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGZhaXJseSBzdGFuZGFyZCBtZW1vcnkgZGVhbGxvY2F0aW9uIHJvdXRpbmUsIHByZXN1bWFibHkgY2xlYW5pbmcgdXAgYSBsaW5rZWQgbGlzdCBvciBhbiBhcnJheSBvZiBzb21lIHNvcnQgcmVsYXRlZCB0byBTRFAgKFNlcnZpY2UgRGlzY292ZXJ5IFByb3RvY29sKSBUTFZzIChUeXBlLUxlbmd0aC1WYWx1ZSkuIEtub3dpbmcgdGhlIGNvbnRleHQgaXMgYWx3YXlzIGtleSB3aXRoIHRoZXNlIE5GQyBpbXBsZW1lbnRhdGlvbnMsIHNvIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3IgYm91bmRhcnkgY2hlY2tzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTGV0J3Mgc2VlIGhvdyBlZmZpY2llbnRseSBpdCBoYW5kbGVzIHRoZSBjbGVhbnVwLCBlc3BlY2lhbGx5IGluIHBvdGVudGlhbGx5IGVycm9yLXByb25lIHNjZW5hcmlvcy4gSXQncyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eSBncml0dHkgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTExLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzQ6MjguNDM5NzM3MTE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29tbWFuZHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzQ6XFx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcXG4gMTc1OlxcdHtcXG4gMTc2OlxcdFxcdGtmcmVlKHNkcC1cXHUwMDNldGx2KTtcXG4gMTc3OlxcdFxcdGtmcmVlKHNkcCk7XFxuIDE3ODpcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdHZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpXFxuIDE4MTpcXHR7XFxuIDE4MjpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xcbiAxODM6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RwLCBuLCBoZWFkLCBub2RlKSB7XFxuIDE4NjpcXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnNkcC1cXHUwMDNlbm9kZSk7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdFxcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRpbnQgbmZjX2xsY3BfcGFyc2VfZ2JfdGx2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuIDE5MzpcXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKVxcbiAxOTQ6XFx0e1xcbiAxOTU6XFx0XFx0Y29uc3QgdTggKnRsdiA9IHRsdl9hcnJheTtcXG4gMTk2OlxcdFxcdHU4IHR5cGUsIGxlbmd0aDtcXG4gMTk3OlxcdFxcdHUxNiBvZmZzZXQgPSAwO1xcbiAxOTg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM0OjI4LjQzOTg1MDE3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE1MzU2MjA1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMTENQIFNEUCBSZXF1ZXN0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdClgIGZ1bmN0aW9uLiBJdCdzIHN1cHBvc2VkIHRvIGNsZWFuIHVwIHRoZSBgc2RyZXFfbGlzdGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZhaWxzLCB3aGV0aGVyIGR1ZSB0byBhbiBhbGxvY2F0aW9uIGVycm9yIG9yIHNvbWV0aGluZyB3aXRoaW4gdGhlIGxvb3AgaXRzZWxmICh0aGF0IGBnb3RvIGZyZWVfbGlzdGApLCBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgYW55IHJlbWFpbmluZyBpdGVtcyBpbiBgc2RyZXFfbGlzdGAuICBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQsIG9mIGNvdXJzZSwgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCAqc3VjY2VlZHMqLCB0aGUgYHNkcmVxX2xpc3RgIHNob3VsZCBiZSBlbXB0eSwgc28gdGhlIGBmcmVlX3NkcGAgY2FsbCBpcywgZWZmZWN0aXZlbHksIGEgbm8tb3AuIFN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuQnV0IHRoZW4sIGhvbGQgb24uLi4gbGluZSAxMjExLiAgSXQgY2hlY2tzIGlmIGBobGlzdF9lbXB0eShcdTAwMjZzZHJlcV9saXN0KWAgYW5kLCBpZiBzbywgcmV0dXJucyBhbiBgRUlOVkFMYCAqYW5kKiBqdW1wcyB0byBgcHV0X2xvY2FsYC4gSG1tLCBzbyBpZiBgc2RyZXFfbGlzdGAgaXMgZW1wdHksIGdvaW5nIHRvIGBwdXRfbG9jYWxgIG9yIGBmcmVlX2xpc3RgIGlzIHRoZSBzYW1lIHRoaW5nLCBiZWNhdXNlIGl0J3MgYWxyZWFkeSBlbXB0eSEgSXQncyBhIHJlZHVuZGFudCBjaGVjaywgd2hpY2ggKmNvdWxkKiBiZSBhIGJ1ZyBidXQgcHJvYmFibHkgaXNuJ3QgYSAqc2VyaW91cyogb25lLiBJdCBkb2VzIHJhaXNlIGEgcXVlc3Rpb24gdGhvdWdoLlxuXG5Ob3csIGxldCdzIGJhY2sgdXAuIFdoZXJlIGRvZXMgYG5mY19nZW5sX2xsY19zZHJlcWAgZXZlbiBnZXQgY2FsbGVkPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gQ2FuIEkgdHJpZ2dlciBpdCBlYXNpbHkgaW4gYSBzeXprYWxsZXIgc2V0dXAgb3IgYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAoUUVNVS9HQ0UpPyBXYWl0LCB0aGF0J3MgcmlnaHQuLi4gTkZDIGhhcyB2aXJ0dWFsIGRldmljZXMsIGFuZCBJIGJlbGlldmUgbmV0bGluayBjb21tYW5kcy4gQ2FuIG5ldGxpbmsgTkZDIGNvbW1hbmRzIGJlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2U/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZC4gQmV0dGVyIGxvb2sgYXQgYG5ldC9uZmMvbmV0bGluay5jYCBhbmQgZmlndXJlIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MDkuOTc1NDc0NzU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEyOTExMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2dlbmxfbGxjX3NkcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uZXRsaW5rLmM9MTA2OD1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZXRfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xMTM2LVxcbm5ldC9uZmMvbmV0bGluay5jOjExMzc6c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbmZjL25ldGxpbmsuYy0xMTM4LXtcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTE2OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBuZmNfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3NjMtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC9uZmMvbmV0bGluay5jOjE3NjQ6XFx0XFx0LmRvaXQgPSBuZmNfZ2VubF9sbGNfc2RyZXEsXFxubmV0L25mYy9uZXRsaW5rLmMtMTc2NS1cXHRcXHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjEwLjUwNjc3MzM3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDI0Mjg4NzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gTkZDIEdlbmVyaWMgTmV0bGluayBhbmQgU3l6a2FsbGVyKipcblxuT2theSwgc28gYG5mY19nZW5sX2xsY19zZHJlcWAgLSB0aGF0J3MgdGhlIGhhbmRsZXIgZm9yIHRoZSBgTkZDX0NNRF9MTENfU0RSRVFgIGdlbmVyaWMgbmV0bGluayBjb21tYW5kLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgd29uZGVyIGlmIFN5emthbGxlciBpcyBmdXp6aW5nIHRoZSBORkMgbmV0bGluayBpbnRlcmZhY2U/IFRoYXQncyBhIGdvb2QgcXVlc3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgc3VwcG9ydCBmcm9tIFN5emthbGxlciBhbHJlYWR5LCBvciBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIHZpcnR1YWwgTkZDIGRldmljZXMuIE9yLCBwZXJoYXBzLCBnZW5lcmljIG5ldGxpbmsgY2FuIGJlIHNlbnQgZXZlbiB3aXRob3V0IGFueSBhY3R1YWwgaGFyZHdhcmUgb3IgdGhyb3VnaCBzb21lIHZpcnR1YWwgc2V0dXA/XG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBkZXZpY2UgZHJpdmVycy4gSSBuZWVkIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZmNgIGFuZCBgbmV0L25mY2AgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkga2luZCBvZiBORkMgc2ltdWxhdG9yLCB2aXJ0dWFsIGRldmljZSwgb3IgZXZlbiBhIFVTQiBkb25nbGUgZXhpc3QuIEZpbmRpbmcgYSB2aXJ0dWFsIGRldmljZSB3b3VsZCBiZSBpZGVhbCBmb3IgcmVwcm9kdWNpYmxlIGZ1enppbmcuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGxlYWQgbWUgdG93YXJkcyB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MjQuNzQ5NjY1NTgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQyMDU1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX3NpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MjQuODAyMDk3NDczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExODU0MDE4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORkMgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5GQyBkcml2ZXIgc2l0dWF0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHNjYW4gdGhlIGBkcml2ZXJzL25mY2AgZGlyZWN0b3J5LiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYXZhaWxhYmxlIGJ1aWxkaW5nIGJsb2NrcyBhcmUsIGhvdyBtYW55IGRpZmZlcmVudCBjaGlwc2V0cyBhcmUgc3VwcG9ydGVkLCBhbmQgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgc29mdHdhcmUgYXJjaGl0ZWN0dXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBmaWxlczogbGlrZWx5IHRoZSBjb3JlIE5GQyBkcml2ZXIgZW50cnkgcG9pbnRzLCBkZXZpY2Utc3BlY2lmaWMgZHJpdmVyIGltcGxlbWVudGF0aW9ucyAodGhvc2Ugd2lsbCBiZSB0aGUgb25lcyB3aXRoIHRoZSBjaGlwIG5hbWVzIGluIHRoZWlyIGZpbGUgbmFtZXMpLCBhbnkgcmVsZXZhbnQgZnJhbWV3b3JrIGNvZGUsIGFuZCBwb3RlbnRpYWxseSBhbnkgYm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIGluZmVyIHdoYXQga2luZCBvZiBhcmNoaXRlY3R1cmUgaGFzIGJlZW4gdXNlZCwgd2hldGhlciBpdCB1c2VzIGEgdHlwaWNhbCBsYXllcmVkIG1vZGVsIChORkMgY29yZSwgY29udHJvbGxlciBkcml2ZXJzLCBzcGVjaWZpYyBjaGlwIGRyaXZlcnMpLCBvciBpZiB0aGV5J3ZlIHRha2VuIGEgbW9yZSBtb25vbGl0aGljIGFwcHJvYWNoLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBjb21tb25hbGl0aWVzIGJldHdlZW4gY2hpcCBkcml2ZXJzLCBhbmQgcGVyaGFwcyB3aGljaCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkLiBVbHRpbWF0ZWx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdW5kZXJzdGFuZGluZyBzbyBJIGNhbiBkaXZlIGRlZXBlciBpbnRvIGFueXRoaW5nIHRoYXQgY2F0Y2hlcyBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MzYuNjU2MTE5NDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJtZWlfcGh5LmNcIixcbiAgICBcIm1laV9waHkuaFwiLFxuICAgIFwibmZjc2ltLmNcIixcbiAgICBcInBvcnQxMDAuY1wiLFxuICAgIFwidHJmNzk3MGEuY1wiLFxuICAgIFwidmlydHVhbF9uY2lkZXYuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJmZHBcIixcbiAgICBcIm1pY3JvcmVhZFwiLFxuICAgIFwibmZjbXJ2bFwiLFxuICAgIFwibnhwLW5jaVwiLFxuICAgIFwicG41MzNcIixcbiAgICBcInBuNTQ0XCIsXG4gICAgXCJzM2Z3cm41XCIsXG4gICAgXCJzdC1uY2lcIixcbiAgICBcInN0MjFuZmNhXCIsXG4gICAgXCJzdDk1aGZcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozOTozNi42NTYxODc2MzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTg4MTQwMDIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBTdWJzeXN0ZW0gZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgTkZDIHN1YnN5c3RlbSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGdldCB0byBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLiBJIHNlZSBhIGZldyBrZXkgcGllY2VzOiBgbmZjc2ltLmNgLCBgdmlydHVhbF9uY2lkZXYuY2AsIGFuZCBVU0IgZHJpdmVycyBsaWtlIGBwb3J0MTAwLmNgIGFuZCBgcG41MzMvdXNiLmNgLiBgdmlydHVhbF9uY2lkZXYuY2AgaXMgYSB2aXJ0dWFsIE5DSSBkZXZpY2UsIGFuZCBgbmZjc2ltLmNgIGlzIGFuIE5GQyBzaW11bGF0b3IsIGludGVyZXN0aW5nLiBUaGVuIHRoZXJlJ3Mgc3l6a2FsbGVyIHdpdGggcHNldWRvLXN5c2NhbGxzIGZvciBORkMgbmV0bGluaywgcmF3LWdhZGdldCBVU0IgTkZDLCBldGMuIFRoYXQgZ2l2ZXMgbWUgYSBoZWFkIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaWYgSSBjYW4gdHJpZ2dlciBgbmZjX2dlbmxfbGxjX3NkcmVxYC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBuZWVkcyB0byBiZSBzYXRpc2ZpZWQuIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0IHNlbmRpbmcgYE5GQ19DTURfTExDX1NEUkVRYCBkaXJlY3RseSByZWFjaGVzIHRoaXMgZnVuY3Rpb24uIE9rYXksIHRoYXQncyBwcm9taXNpbmcuXG5cbk5vdywgdG8gYWN0dWFsbHkgZ2V0IGludG8gdGhhdCBsb29wLCBgbmZjX2dldF9kZXZpY2UoaWR4KWAgbmVlZHMgdG8gcmV0dXJuIGEgdmFsaWQgTkZDIGRldmljZS4gVGhlIGRldmljZSdzIGBkZXBfbGlua191cGAgZmxhZyBuZWVkcyB0byBiZSB0cnVlLCBhbmQgYG5mY19sbGNwX2ZpbmRfbG9jYWwoZGV2KWAgaGFzIHRvIHJldHVybiBhIGBsb2NhbGAgcG9pbnRlci4gVGhlIGBpZHhgIGNvbWVzIGZyb20gdGhlIG5ldGxpbmsgbWVzc2FnZSwgYW5kIGBuZmNfZ2V0X2RldmljZWAgbXVzdCBmaW5kIHNvbWV0aGluZyBiYXNlZCBvbiB0aGF0IGluZGV4LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyBob3cgZG9lcyBgZGVwX2xpbmtfdXBgIGdldCBzZXQgdG8gdHJ1ZT8gVGhhdCdzIHRoZSBnYXRla2VlcGVyLiBJIG5lZWQgdG8gZ3JlcCBmb3IgYGRlcF9saW5rX3VwYCBpbiBib3RoIGBuZXQvbmZjYCBhbmQgYGRyaXZlcnMvbmZjYCB0byBmaWd1cmUgb3V0IHdoYXQgc2V0cyB0aGlzIGZsYWcuIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjQyLjUzNzU5MjYyOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzAyMDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBfbGlua191cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0PTY0PWVudHJ5IHBvaW50czo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTcyLVxcdFxcdFxcdCAgIHUzMiBpbV9wcm90b2NvbHMsIHUzMiB0bV9wcm90b2NvbHMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9uZmMvbmZjLWhjaS5yc3Q6NzM6XFx0aW50ICgqZGVwX2xpbmtfdXApKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTc0LVxcdFxcdFxcdCAgIHU4IGNvbW1fbW9kZSwgdTggKmdiLCBzaXplX3QgZ2JfbGVuKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9uZmMvbmZjLWhjaS5yc3QtOTctICBtZWNoYW5pc20gc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIEhDSSBzdGFuZGFyZC5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0Ojk4Oi0gZGVwX2xpbmtfdXAoKSBpcyBjYWxsZWQgYWZ0ZXIgYSBwMnAgdGFyZ2V0IGhhcyBiZWVuIGRldGVjdGVkLCB0byBmaW5pc2hcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTk5LSAgdGhlIHAycCBjb25uZWN0aW9uIHNldHVwIHdpdGggaGFyZHdhcmUgcGFyYW1ldGVycyB0aGF0IG5lZWQgdG8gYmUgcGFzc2VkIGJhY2tcXG4tLVxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYz0yMjQ9c3RhdGljIGludCBtaWNyb3JlYWRfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25mYy9taWNyb3JlYWQvbWljcm9yZWFkLmMtMjk5LVxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYzozMDA6c3RhdGljIGludCBtaWNyb3JlYWRfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LFxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy0zMDEtXFx0XFx0XFx0XFx0c3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxcbi0tXFxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jPTY1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIG1pY3JvcmVhZF9oY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jLTY1OS1cXHQuc3RhcnRfcG9sbCA9IG1pY3JvcmVhZF9zdGFydF9wb2xsLFxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYzo2NjA6XFx0LmRlcF9saW5rX3VwID0gbWljcm9yZWFkX2RlcF9saW5rX3VwLFxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy02NjEtXFx0LmRlcF9saW5rX2Rvd24gPSBtaWNyb3JlYWRfZGVwX2xpbmtfZG93bixcXG4tLVxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM9MTg3OD1zdGF0aWMgdm9pZCBwbjUzM19kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldixcXG4tLVxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMTkwNy1cXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jOjE5MDg6c3RhdGljIGludCBwbjUzM19pbl9kZXBfbGlua191cF9jb21wbGV0ZShzdHJ1Y3QgcG41MzMgKmRldiwgdm9pZCAqYXJnLFxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMTkwOS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXFxuLS1cXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jPTE5NzE9c3RhdGljIGludCBwbjUzM19yZl9maWVsZChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldiwgdTggcmYpO1xcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MTk3MjpzdGF0aWMgaW50IHBuNTMzX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMTk3My1cXHRcXHRcXHQgICAgIHU4IGNvbW1fbW9kZSwgdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxcbi0tXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yMDQzLVxcdHJjID0gcG41MzNfc2VuZF9jbWRfYXN5bmMoZGV2LCBQTjUzM19DTURfSU5fSlVNUF9GT1JfREVQLCBza2IsXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYzoyMDQ0OlxcdFxcdFxcdFxcdCAgcG41MzNfaW5fZGVwX2xpbmtfdXBfY29tcGxldGUsIGFyZyk7XFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yMDQ1LVxcbi0tXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYz0yNjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBwbjUzM19uZmNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yNjQyLVxcdC5kZXZfZG93biA9IHBuNTMzX2Rldl9kb3duLFxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MjY0MzpcXHQuZGVwX2xpbmtfdXAgPSBwbjUzM19kZXBfbGlua191cCxcXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTI2NDQtXFx0LmRlcF9saW5rX2Rvd24gPSBwbjUzM19kZXBfbGlua19kb3duLFxcbi0tXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYz0zMzI9c3RhdGljIGludCBwbjU0NF9oY2lfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jLTQ0Mi1cXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jOjQ0MzpzdGF0aWMgaW50IHBuNTQ0X2hjaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy00NDQtXFx0XFx0XFx0XFx0c3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxcbi0tXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYz04ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfaGNpX29wcyBwbjU0NF9oY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy04ODgtXFx0LnN0YXJ0X3BvbGwgPSBwbjU0NF9oY2lfc3RhcnRfcG9sbCxcXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jOjg4OTpcXHQuZGVwX2xpbmtfdXAgPSBwbjU0NF9oY2lfZGVwX2xpbmtfdXAsXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy04OTAtXFx0LmRlcF9saW5rX2Rvd24gPSBwbjU0NF9oY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYz01Njg9c3RhdGljIGludCBzdDIxbmZjYV9nZXRfaXNvMTU2OTNfaW52ZW50b3J5KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldixcXG4tLVxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy01OTUtXFxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jOjU5NjpzdGF0aWMgaW50IHN0MjFuZmNhX2hjaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jLTU5Ny1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxcbi0tXFxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jPTkxND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIHN0MjFuZmNhX2hjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25mYy9zdDIxbmZjYS9jb3JlLmMtOTIxLVxcdC5zdG9wX3BvbGwgPSBzdDIxbmZjYV9oY2lfc3RvcF9wb2xsLFxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYzo5MjI6XFx0LmRlcF9saW5rX3VwID0gc3QyMW5mY2FfaGNpX2RlcF9saW5rX3VwLFxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy05MjMtXFx0LmRlcF9saW5rX2Rvd24gPSBzdDIxbmZjYV9oY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9oY2kuaD0xNT1zdHJ1Y3QgbmZjX2hjaV9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL2hjaS5oLTI4LVxcdHZvaWQgKCpzdG9wX3BvbGwpIChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpO1xcbmluY2x1ZGUvbmV0L25mYy9oY2kuaDoyOTpcXHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbmluY2x1ZGUvbmV0L25mYy9oY2kuaC0zMC1cXHRcXHRcXHQgICB1OCBjb21tX21vZGUsIHU4ICpnYiwgc2l6ZV90IGdiX2xlbik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZmMvbmZjLmg9NDg9c3RydWN0IG5mY19vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTUzLVxcdHZvaWQgKCpzdG9wX3BvbGwpKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbmluY2x1ZGUvbmV0L25mYy9uZmMuaDo1NDpcXHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtNTUtXFx0XFx0XFx0ICAgdTggY29tbV9tb2RlLCB1OCAqZ2IsIHNpemVfdCBnYl9sZW4pO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25mYy5oPTE2Nz1zdHJ1Y3QgbmZjX2RldiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtMTc4LVxcdHN0cnVjdCBuZmNfdGFyZ2V0ICphY3RpdmVfdGFyZ2V0O1xcbmluY2x1ZGUvbmV0L25mYy9uZmMuaDoxNzk6XFx0Ym9vbCBkZXBfbGlua191cDtcXG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtMTgwLVxcdHN0cnVjdCBuZmNfZ2VubF9kYXRhIGdlbmxfZGF0YTtcXG4tLVxcbm5ldC9uZmMvY29yZS5jPTI2OD1zdGF0aWMgc3RydWN0IG5mY190YXJnZXQgKm5mY19maW5kX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeClcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTI3OS1cXG5uZXQvbmZjL2NvcmUuYzoyODA6aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2luZGV4LCB1OCBjb21tX21vZGUpXFxubmV0L25mYy9jb3JlLmMtMjgxLXtcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTI4OC1cXG5uZXQvbmZjL2NvcmUuYzoyODk6XFx0aWYgKCFkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVwX2xpbmtfdXApXFxubmV0L25mYy9jb3JlLmMtMjkwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTI5OC1cXG5uZXQvbmZjL2NvcmUuYzoyOTk6XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gdHJ1ZSkge1xcbm5ldC9uZmMvY29yZS5jLTMwMC1cXHRcXHRyYyA9IC1FQUxSRUFEWTtcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTMxNS1cXG5uZXQvbmZjL2NvcmUuYzozMTY6XFx0cmMgPSBkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVwX2xpbmtfdXAoZGV2LCB0YXJnZXQsIGNvbW1fbW9kZSwgZ2IsIGdiX2xlbik7XFxubmV0L25mYy9jb3JlLmMtMzE3LVxcdGlmICghcmMpIHtcXG4tLVxcbm5ldC9uZmMvY29yZS5jPTMyNz1pbnQgbmZjX2RlcF9saW5rX2Rvd24oc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM0Mi1cXG5uZXQvbmZjL2NvcmUuYzozNDM6XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcXG5uZXQvbmZjL2NvcmUuYy0zNDQtXFx0XFx0cmMgPSAtRUFMUkVBRFk7XFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0zNDktXFx0aWYgKCFyYykge1xcbm5ldC9uZmMvY29yZS5jOjM1MDpcXHRcXHRkZXYtXFx1MDAzZWRlcF9saW5rX3VwID0gZmFsc2U7XFxubmV0L25mYy9jb3JlLmMtMzUxLVxcdFxcdGRldi1cXHUwMDNlYWN0aXZlX3RhcmdldCA9IE5VTEw7XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz0zNjM9aW50IG5mY19kZXBfbGlua19pc191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeCxcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM2NS17XFxubmV0L25mYy9jb3JlLmM6MzY2OlxcdGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPSB0cnVlO1xcbm5ldC9uZmMvY29yZS5jLTM2Ny1cXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM4Mi1cXG5uZXQvbmZjL2NvcmUuYzozODM6XFx0cmV0dXJuIG5mY19nZW5sX2RlcF9saW5rX3VwX2V2ZW50KGRldiwgdGFyZ2V0X2lkeCwgY29tbV9tb2RlLCByZl9tb2RlKTtcXG5uZXQvbmZjL2NvcmUuYy0zODQtfVxcbi0tXFxubmV0L25mYy9jb3JlLmM9NjU1PWludCBuZmNfdG1fZGF0YV9yZWNlaXZlZChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9jb3JlLmMtNjU3LVxcdC8qIE9ubHkgTExDUCB0YXJnZXQgbW9kZSBmb3Igbm93ICovXFxubmV0L25mYy9jb3JlLmM6NjU4OlxcdGlmIChkZXYtXFx1MDAzZWRlcF9saW5rX3VwID09IGZhbHNlKSB7XFxubmV0L25mYy9jb3JlLmMtNjU5LVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L25mYy9jb3JlLmM9Njk2PWludCBuZmNfdG1fZGVhY3RpdmF0ZWQoc3RydWN0IG5mY19kZXYgKmRldilcXG5uZXQvbmZjL2NvcmUuYy02OTcte1xcbm5ldC9uZmMvY29yZS5jOjY5ODpcXHRkZXYtXFx1MDAzZWRlcF9saW5rX3VwID0gZmFsc2U7XFxubmV0L25mYy9jb3JlLmMtNjk5LVxcdGRldi1cXHUwMDNlcmZfbW9kZSA9IE5GQ19SRl9OT05FO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYz01ODY9c3RhdGljIGludCBkaWdpdGFsX2Rldl9kb3duKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2KVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01OTQtXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo1OTU6c3RhdGljIGludCBkaWdpdGFsX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTk2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYz03NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfb3BzIGRpZ2l0YWxfbmZjX29wcyA9IHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNzQ4LVxcdC5zdG9wX3BvbGwgPSBkaWdpdGFsX3N0b3BfcG9sbCxcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjc0OTpcXHQuZGVwX2xpbmtfdXAgPSBkaWdpdGFsX2RlcF9saW5rX3VwLFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNzUwLVxcdC5kZXBfbGlua19kb3duID0gZGlnaXRhbF9kZXBfbGlua19kb3duLFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTY1Mj1zdGF0aWMgdm9pZCBoY2lfc3RvcF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTY2Mi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjYzOnN0YXRpYyBpbnQgaGNpX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjQtXFx0XFx0XFx0XFx0X191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTY2Ny1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjY4OlxcdGlmICghaGRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXBfbGlua191cClcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjY5LVxcdFxcdHJldHVybiAwO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy02NzAtXFxubmV0L25mYy9oY2kvY29yZS5jOjY3MTpcXHRyZXR1cm4gaGRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXBfbGlua191cChoZGV2LCB0YXJnZXQsIGNvbW1fbW9kZSxcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjcyLVxcdFxcdFxcdFxcdCAgICAgIGdiLCBnYl9sZW4pO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgaGNpX25mY19vcHMgPSB7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTQ1LVxcdC5zdG9wX3BvbGwgPSBoY2lfc3RvcF9wb2xsLFxcbm5ldC9uZmMvaGNpL2NvcmUuYzo5NDY6XFx0LmRlcF9saW5rX3VwID0gaGNpX2RlcF9saW5rX3VwLFxcbm5ldC9uZmMvaGNpL2NvcmUuYy05NDctXFx0LmRlcF9saW5rX2Rvd24gPSBoY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM9NjYxPXN0YXRpYyBpbnQgbGxjcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKl9hZGRyLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy03MDUtXFx0ZGV2aWNlX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjcwNjpcXHRpZiAoZGV2LVxcdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xcbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA3LVxcdFxcdHJldCA9IC1FTk9MSU5LO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTk3MD1zdGF0aWMgdm9pZCBuY2lfZGVhY3RpdmF0ZV90YXJnZXQoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtOTk1LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzo5OTY6c3RhdGljIGludCBuY2lfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXFxubmV0L25mYy9uY2kvY29yZS5jLTk5Ny1cXHRcXHRcXHQgICBfX3U4IGNvbW1fbW9kZSwgX191OCAqZ2IsIHNpemVfdCBnYl9sZW4pXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTE0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgbmNpX25mY19vcHMgPSB7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1My1cXHQuc3RvcF9wb2xsID0gbmNpX3N0b3BfcG9sbCxcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTE1NDpcXHQuZGVwX2xpbmtfdXAgPSBuY2lfZGVwX2xpbmtfdXAsXFxubmV0L25mYy9uY2kvY29yZS5jLTExNTUtXFx0LmRlcF9saW5rX2Rvd24gPSBuY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jPTcwOT1zdGF0aWMgaW50IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi0tXFxubmV0L25mYy9uY2kvbnRmLmMtODY1LVxcbm5ldC9uZmMvbmNpL250Zi5jOjg2NjpcXHRcXHQvKiBzdG9yZSBnZW5lcmFsIGJ5dGVzIHRvIGJlIHJlcG9ydGVkIGxhdGVyIGluIGRlcF9saW5rX3VwICovXFxubmV0L25mYy9uY2kvbnRmLmMtODY3LVxcdFxcdGlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDX0RFUCkge1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9NjQwPXN0YXRpYyBpbnQgbmZjX2dlbmxfZHVtcF9kZXZpY2VzX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtNjUxLVxcbm5ldC9uZmMvbmV0bGluay5jOjY1MjppbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXFxubmV0L25mYy9uZXRsaW5rLmMtNjUzLVxcdFxcdFxcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy02NzgtXFxubmV0L25mYy9uZXRsaW5rLmM6Njc5OlxcdGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPSB0cnVlO1xcbm5ldC9uZmMvbmV0bGluay5jLTY4MC1cXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTkxMT1zdGF0aWMgaW50IG5mY19nZW5sX2RlYWN0aXZhdGVfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy05MzUtXFxubmV0L25mYy9uZXRsaW5rLmM6OTM2OnN0YXRpYyBpbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbmZjL25ldGxpbmsuYy05Mzcte1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtOTYzLVxcbm5ldC9uZmMvbmV0bGluay5jOjk2NDpcXHRyYyA9IG5mY19kZXBfbGlua191cChkZXYsIHRndF9pZHgsIGNvbW0pO1xcbm5ldC9uZmMvbmV0bGluay5jLTk2NS1cXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTEwNjg9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2V0X3BhcmFtcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTExMS1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1BBUkFNX0xUT10pIHtcXG5uZXQvbmZjL25ldGxpbmsuYzoxMTEyOlxcdFxcdGlmIChkZXYtXFx1MDAzZWRlcF9saW5rX3VwKSB7XFxubmV0L25mYy9uZXRsaW5rLmMtMTExMy1cXHRcXHRcXHRyYyA9IC1FSU5QUk9HUkVTUztcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTExMzc9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTExNjEtXFxubmV0L25mYy9uZXRsaW5rLmM6MTE2MjpcXHRpZiAoZGV2LVxcdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xcbm5ldC9uZmMvbmV0bGluay5jLTExNjMtXFx0XFx0cmMgPSAtRU5PTElOSztcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTE2OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBuZmNfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3MzMtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC9uZmMvbmV0bGluay5jOjE3MzQ6XFx0XFx0LmRvaXQgPSBuZmNfZ2VubF9kZXBfbGlua191cCxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzM1LVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG4tLVxcbm5ldC9uZmMvbmZjLmg9ODI9aW50IG5mY19nZW5sX2RldmljZV9yZW1vdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbm5ldC9uZmMvbmZjLmgtODMtXFxubmV0L25mYy9uZmMuaDo4NDppbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXFxubmV0L25mYy9uZmMuaC04NS1cXHRcXHRcXHQgICAgICAgdTggY29tbV9tb2RlLCB1OCByZl9tb2RlKTtcXG4tLVxcbm5ldC9uZmMvbmZjLmg9MTM1PWludCBuZmNfc3RvcF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbm5ldC9uZmMvbmZjLmgtMTM2LVxcbm5ldC9uZmMvbmZjLmg6MTM3OmludCBuZmNfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKmRldiwgaW50IHRhcmdldF9pZHgsIHU4IGNvbW1fbW9kZSk7XFxubmV0L25mYy9uZmMuaC0xMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjQ0LjQ3MDYyMDM0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTEzODYwMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgdGhlIE5GQyBOZXRsaW5rIENvbW1hbmQgSGFuZGxlciBhbmQgVmlydHVhbCBEZXZpY2UgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBgbmZjX2dlbmxfZGVwX2xpbmtfdXBgIGlzIGFjdHVhbGx5IGFub3RoZXIgaW1wbGVtZW50YXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZCwgc3BlY2lmaWNhbGx5IGBORkNfQ01EX0RFUF9MSU5LX1VQYC4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgbGluay11cCBldmVudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0bGluayBmcmFtZXdvcmsuIEl0J3Mgbm90IGp1c3Qgc29tZSBpc29sYXRlZCBmdW5jdGlvbjsgaXQncyBwYXJ0IG9mIGEgbGFyZ2VyLCB3ZWxsLWRlZmluZWQgbmV0bGluayBjb21tYW5kIHN0cnVjdHVyZS5cblxuQW5kLCBldmVuIG1vcmUgaW50ZXJlc3RpbmcsIGB2aXJ0dWFsX25jaWRldi5jYCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyB2aXJ0dWFsIE5GQyBkZXZpY2UuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHdlJ3JlIGludGVyYWN0aW5nIHdpdGggdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSB0aHJvdWdoLCBzYXksIGAvZGV2L25jaWAuIFRoaXMgaW1wbGllcyBpdCdzIHdoZXJlIHRoZSB2aXJ0dWFsIGRldmljZSdzIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5lZCBhbmQgaXRzIGNhcGFiaWxpdGllcyBlbXVsYXRlZC4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyB2aXJ0dWFsIGRldmljZSBpcyBjb25zdHJ1Y3RlZC4gTGV0J3MgZGlnIGludG8gYHZpcnR1YWxfbmNpZGV2LmNgIHRvIHNlZSBob3cgaXQncyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg0MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjU0LjM4NDQ4NDI0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0OTI4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTQ6I2luY2x1ZGUgXFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFxcdTAwM2VcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1LVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMy1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjI0OnN0cnVjdCB2aXJ0dWFsX25jaV9kZXYge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjU6XFx0c3RydWN0IG5jaV9kZXYgKm5kZXY7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yNi1cXHRzdHJ1Y3QgbXV0ZXggbXR4O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTMzLXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjM0OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zNS1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo0MDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNDEte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQzLVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Mi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjUzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfc2VuZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjU1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzc6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaV9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XFx0LmNsb3NlID0gdmlydHVhbF9uY2lfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3OTpcXHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgwLX07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04My1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjg1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04Ni1cXHRzaXplX3QgYWN0dWFsX2xlbjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTEyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTE3OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTI4LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTI5OlxcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzAtXFx0cmV0dXJuIGNvdW50O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzM6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNS1cXHRpbnQgcmV0ID0gMDtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzNjpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2O1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM3LVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNDE6XFx0dmRldi1cXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNnZpcnR1YWxfbmNpX29wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0Mi1cXHRcXHRWSVJUVUFMX05GQ19QUk9UT0NPTFMsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNTAtXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gdmRldjtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE1MTpcXHRuY2lfc2V0X2RydmRhdGEodmRldi1cXHUwMDNlbmRldiwgdmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNTItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNTM6XFx0cmV0ID0gbmNpX3JlZ2lzdGVyX2RldmljZSh2ZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1NC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTU1OlxcdFxcdG5jaV9mcmVlX2RldmljZSh2ZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1Ni1cXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ2ZGV2LVxcdTAwM2VtdHgpO1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjQ6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2NS17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjY6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2Ny1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2ODpcXHRuY2lfdW5yZWdpc3Rlcl9kZXZpY2UodmRldi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjk6XFx0bmNpX2ZyZWVfZGV2aWNlKHZkZXYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTcwLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnZkZXYtXFx1MDAzZW10eCk7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzgte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc5OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xODAtXFx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVxcdTAwM2VuZGV2LVxcdTAwM2VuZmNfZGV2O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcXHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XFx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3OlxcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XFx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXFx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjAzOlxcdC5uYW1lID0gXFxcInZpcnR1YWxfbmNpXFxcIixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcXHQuZm9wcyA9IFxcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVxcdC5tb2RlID0gMDYwMCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6NTQuNDM3OTg0MTQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNjcwOTAyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkZDIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYC9kZXYvdmlydHVhbF9uY2lgIGlzIHRoZSBrZXkg4oCTIHRoYXQncyBteSBlbnRyeSBwb2ludCwgaXQgbG9va3MgbGlrZSwgZm9yIGFuIE5DSSBkZXZpY2UsIHdoaWNoIGlzIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gIEl0J3MgYWxzbyB3b3J0aCBub3RpbmcgdGhlIHByZXNlbmNlIG9mIHRoZSBwbjUzMyBVU0IgZ2FkZ2V0L3Jhdy1nYWRnZXQ7IHRoYXQncyBhbm90aGVyIHBpZWNlIG9mIHRoZSBwdXp6bGUuICBBbmQsIHN5emthbGxlciBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGJvdGggbmV0bGluayBhbmQgTkZDIC0gZXhjZWxsZW50OyB0aGF0IHRlbGxzIG1lIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgYXJlIGxpa2VseSB0byBiZS5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIE5GQywgTExDUCwgYW5kIHNvIG9uLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIHN0YXJ0aW5nIHdpdGggYG5ldC9uZmMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDczLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDA6MTguMTA4ODkwMjgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBORkMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORkNcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4gICA4OlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgOTpcXHRcXHRkZWZhdWx0IG5cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciBORkMgKE5lYXIgZmllbGRcXG4gIDEyOlxcdFxcdCAgY29tbXVuaWNhdGlvbikgZGV2aWNlcy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAxNTpcXHRcXHQgIGJlIGNhbGxlZCBuZmMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBORkNfRElHSVRBTFxcbiAgMTg6XFx0XFx0ZGVwZW5kcyBvbiBORkNcXG4gIDE5OlxcdFxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUkNfSVRVX1RcXG4gIDIxOlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgRGlnaXRhbCBQcm90b2NvbCBzdGFjayBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVmYXVsdCBuXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE5GQyBkaWdpdGFsIHByb3RvY29sIHN0YWNrIHN1cHBvcnQuXFxuICAyNTpcXHRcXHQgIFRoaXMgaXMgbmVlZGVkIGJ5IE5GQyBjaGlwc2V0cyB3aG9zZSBmaXJtd2FyZSBvbmx5IGltcGxlbWVudFxcbiAgMjY6XFx0XFx0ICB0aGUgTkZDIGFuYWxvZyBsYXllci5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAyOTpcXHRcXHQgIGJlIGNhbGxlZCBuZmNfZGlnaXRhbC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0c291cmNlIFxcXCJuZXQvbmZjL25jaS9LY29uZmlnXFxcIlxcbiAgMzI6XFx0c291cmNlIFxcXCJuZXQvbmZjL2hjaS9LY29uZmlnXFxcIlxcbiAgMzM6XFx0XFxuICAzNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQwOjE4LjEwODk2ODYyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjkyNjk0ODM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIE5GQyBjb21wb25lbnRzLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L25mYy9NYWtlZmlsZWAuIFRoaXMgZmlsZSBpcyB0aGUgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLCByaWdodD8gSXQncyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgYXJlIGFsbCBvcmNoZXN0cmF0ZWQgZm9yIHRoZXNlIE5GQy1yZWxhdGVkIG1vZHVsZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZXNlIHRoaW5ncywgYW55IHNwZWNpZmljIG1vZHVsZXMgaXQncyBjcmVhdGluZywgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB1bnVzdWFsIGJ1aWxkIGZsYWdzIG9yIGN1c3RvbSBydWxlcyB0aGF0IG1pZ2h0IGluZGljYXRlIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQwOjUxLjAzNTkxOTU5N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpL1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4gICA5OlxcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgKz0gbmZjX2RpZ2l0YWwub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0bGxjcF9zb2NrLm9cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0bmZjX2RpZ2l0YWwtb2JqcyA6PSBkaWdpdGFsX2NvcmUubyBkaWdpdGFsX3RlY2hub2xvZ3kubyBkaWdpdGFsX2RlcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQwOjUxLjAzNTk3ODg5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDY4NjkwMzEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbmV0bGluay5vYCBnZXRzIGNvbXBpbGVkIHdoZW4gTkZDIGlzIHR1cm5lZCBvbiDigJMgZWl0aGVyIGJ1aWx0IGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZSwgYW5kIHN5emthbGxlciB1c2VzIGl0IGFzIGEgYnVpbHQtaW4gbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlcGVuZGVuY3kgbW9yZSBkZWVwbHkuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJREVWYC4gVGhpcyBjb3VsZCBwcm92aWRlIGluc2lnaHQgaW50byBleGFjdGx5ICp3aHkqIGBuZXRsaW5rLm9gIGlzIGJlaW5nIGluY2x1ZGVkIGluIGEgc3BlY2lmaWMgYnVpbGQsIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjb25maWd1cmF0aW9uIGZsYWdzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IHZpcnR1YWwgTkZDIGRldmljZXMgYXJlIGhhbmRsZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgbmV0bGluayBpbnRlcmZhY2UsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBidWdzIG9mdGVuIGxpZS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gY29uZmlndXJhdGlvbnMgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MDUuNzIyODg1MTI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcwNzI4ODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRVQUxfTkNJREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MTowNi4yODk5NzI3NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI5OTY2ODEyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGB2aXJ0dWFsX25jaWRldmAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIE5GQyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gc3ltYm9sLiBIb3BlZnVsbHksIGl0J3MgZGVmaW5lZCBkaXJlY3RseSB0aGVyZSwgb3IgYXQgbGVhc3QgaW5jbHVkZWQgZnJvbSBhIGZpbGUgd2l0aGluIHRoZSBORkMgZGlyZWN0b3J5LiBGcm9tIGhlcmUsIEknbGwgYmUgYWJsZSB0byB3b3JrIG91dCBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBORkMgZmVhdHVyZXMuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHF1aWNrIGxvb2t1cCwgYnV0IHlvdSBuZXZlciBrbm93LiBJdCBtaWdodCBiZSBhIGJpdCBidXJpZWQsIG9yIGl0IGNvdWxkIGJlIGRlZmluZWQgaW4gYSBtb3JlIGdlbmVyaWMgY29uZmlnIGZpbGUgc29tZXdoZXJlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODk3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MTkuMjg2NjU4NDg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDk5MDk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0dWFsX25jaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcXHQrPSBzdDk1aGYvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcXHQrPSB2aXJ0dWFsX25jaWRldi5vXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIzLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjQ6c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yNS1cXHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozMjpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX29wZW4oc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMy17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozNDpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzUtXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTM5LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDA6c3RhdGljIGludCB2aXJ0dWFsX25jaV9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQxLXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjQyOlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy00My1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1MzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01NC17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1NTpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTYtXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTc1LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHZpcnR1YWxfbmNpX29wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc3OlxcdC5vcGVuID0gdmlydHVhbF9uY2lfb3BlbixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc4OlxcdC5jbG9zZSA9IHZpcnR1YWxfbmNpX2Nsb3NlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzk6XFx0LnNlbmQgPSB2aXJ0dWFsX25jaV9zZW5kXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MC19O1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo4MjpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODMtXFx0XFx0XFx0XFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04NC17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo4NTpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODYtXFx0c2l6ZV90IGFjdHVhbF9sZW47XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExMi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExNC1cXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE2LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExNzpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE4LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzQte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM1LVxcdGludCByZXQgPSAwO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTM2OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXY7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzctXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0MTpcXHR2ZGV2LVxcdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcXHUwMDI2dmlydHVhbF9uY2lfb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQyLVxcdFxcdFZJUlRVQUxfTkZDX1BST1RPQ09MUywgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2My1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTY1LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NjpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTY3LVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzY6c3RhdGljIGxvbmcgdmlydHVhbF9uY2lkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc4LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3OTpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTgwLVxcdGNvbnN0IHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2ID0gdmRldi1cXHUwMDNlbmRldi1cXHUwMDNlbmZjX2RldjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkxLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTMtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XFx0LnJlYWQgPSB2aXJ0dWFsX25jaWRldl9yZWFkLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk1OlxcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk2OlxcdC5vcGVuID0gdmlydHVhbF9uY2lkZXZfb3BlbixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcXHQucmVsZWFzZSA9IHZpcnR1YWxfbmNpZGV2X2Nsb3NlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk4OlxcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTktfTtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAyLVxcdC5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwMzpcXHQubmFtZSA9IFxcXCJ2aXJ0dWFsX25jaVxcXCIsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XFx0LmZvcHMgPSBcXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cXHQubW9kZSA9IDA2MDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQxOjE5LjM0MTY1NzY4MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjE5MTAzNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORkMgVmlydHVhbCBOQ0kgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgS2NvbmZpZyB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBORkNfVklSVFVBTF9OQ0lgLiBJIGtub3cgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBwcmV0dHkgd2VsbCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaWYgaXQncyB0cmlzdGF0ZSBvciBib29sZWFuLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiB3aGF0IGVuYWJsaW5nIGl0IGFjdHVhbGx5ICpkb2VzKi4gSSdsbCBhbHNvIGJlIG1lbnRhbGx5IG5vdGluZyBhbnkgcmVsYXRlZCBvcHRpb25zIGluIHRoZSB2aWNpbml0eSwgYmVjYXVzZSB0aGUgS2NvbmZpZyBvZnRlbiBncm91cHMgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJ20gdHJ5aW5nIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSAqY29udGV4dCogb2YgdGhpcyB2aXJ0dWFsIE5DSSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgTkZDIHN1YnN5c3RlbS4gSSdtIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyB2aXJ0dWFsIE5DSSByZWxhdGVzIHRvIGVtdWxhdGluZyBhbiBOQ0kgaW50ZXJmYWNlLCBwcm9iYWJseSBmb3IgdGVzdGluZyBvciBzaW11bGF0aW9uIHB1cnBvc2VzLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgd2hhdCBJJ20gc2Vla2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MToyNi41NjA3NjQ0MjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTA3NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfVklSVFVBTF9OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MToyNi42MTQ2OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTU1ODQwOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORkMgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUyLiBJJ20gYmV0dGluZyB0aGF0IGFyZWEgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GQyBzdWJzeXN0ZW0uIEknbSBrZWVuIHRvIHNlZSB0aGUgbW9kdWxhcml0eSwgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBkZWZpbmVkIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBkZXNpZ24gZGVjaXNpb25zIGVuY29kZWQgaW4gdGhpcyBLY29uZmlnIGZpbGUsIGFzIHRoaXMgaXMgd2hlcmUgdGhlIE5GQyBvcHRpb25zIGFyZSBsaWtlbHkgdG8gYmUgZGVjbGFyZWQgYW5kIHN0cnVjdHVyZWQuIEZyb20gaGVyZSwgSSB3aWxsIGJlZ2luIHRvIHRyYWNlIGhvdyB0aGUgb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIHRpZWQgdG8gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgTkZDIHN0YWNrIGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MzIuMTcwNTI1NzcyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU29ueSBQb3J0LTEwMCBjaGlwIGJhc2VkIFVTQiBkZXZpY2VzIHN1Y2ggYXMgdGhlXFxuICA0ODpcXHRcXHQgIFJDLVMzODAgZG9uZ2xlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXFxuICA1NzpcXHRcXHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxcbiAgNTk6XFx0XFx0ICBtb2R1bGUuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9mZHAvS2NvbmZpZ1xcXCJcXG4gIDY0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvcG41NDQvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MzIuMTcwNjE3NjQyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5NDgwODM5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBORkNzaW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGF0IGBuZmNzaW1gIHRvb2wsIHNoYWxsIHdlPyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0IG9mZmVycy4gSSBrbm93IEkgdXNlZCBpdCBiZWZvcmUgZm9yIFtpbnNlcnQgcmVsZXZhbnQgdGVjaG5pY2FsIHVzYWdlLCBlLmcuLCBzaW11bGF0aW5nIE5GQyB0YWcgaW50ZXJhY3Rpb25zLCB0ZXN0aW5nIHJlYWRlciBpbXBsZW1lbnRhdGlvbnMsIGRlYnVnZ2luZyBjb21tdW5pY2F0aW9uIHByb3RvY29sc10uIEknbSB0aGlua2luZywgXCJEb2VzIGl0IHN0aWxsIG9mZmVyIHRoZSBmZWF0dXJlcyBJIG5lZWQgZm9yIFtzcGVjaWZpYyBwcm9qZWN0IG9yIHRhc2tdP1wiIEknbGwgbmVlZCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBpcyBzdGlsbCBpbnR1aXRpdmUgb3IgaWYgdGhlcmUgaGF2ZSBiZWVuIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCBtaWdodCBpbXBhY3QgbXkgd29ya2Zsb3cuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpZiBgbmZjc2ltYCBzdGlsbCBhbGlnbnMgd2l0aCBteSBzcGVjaWZpYyByZXF1aXJlbWVudHMgYW5kIGF2b2lkcyBhbnkgdW5leHBlY3RlZCByb2FkYmxvY2tzLiBJIGFtIHBhcnRpY3VsYXJseSBjdXJpb3VzIGlmIGl0IHN1cHBvcnRzIHRoZSByZWNlbnQgYWR2YW5jZW1lbnRzIGluIE5GQyB0ZWNobm9sb2d5IHdoaWNoIEkgYW0gY3VycmVudGx5IGludm9sdmVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkxNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6NDAuMTE4NzA1MjY2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQyMzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvbmZjc2ltLmMtMTUtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTY6I2RlZmluZSBORkNTSU1fRVJSKGQsIGZtdCwgYXJncy4uLikgbmZjX2VycihcXHUwMDI2ZC1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIFxcXFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xNy1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIiVzOiBcXFwiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTgtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTk6I2RlZmluZSBORkNTSU1fREJHKGQsIGZtdCwgYXJncy4uLikgZGV2X2RiZyhcXHUwMDI2ZC1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIFxcXFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yMC1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIiVzOiBcXFwiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjEtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjI6I2RlZmluZSBORkNTSU1fVkVSU0lPTiBcXFwiMC4yXFxcIlxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIzLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjI0OiNkZWZpbmUgTkZDU0lNX01PREVfTk9ORVxcdDBcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNTojZGVmaW5lIE5GQ1NJTV9NT0RFX0lOSVRJQVRPUlxcdDFcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNjojZGVmaW5lIE5GQ1NJTV9NT0RFX1RBUkdFVFxcdDJcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNy1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyODojZGVmaW5lIE5GQ1NJTV9DQVBBQklMSVRJRVMgKE5GQ19ESUdJVEFMX0RSVl9DQVBTX0lOX0NSQyAgIHwgXFxcXFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5LVxcdFxcdFxcdCAgICAgTkZDX0RJR0lUQUxfRFJWX0NBUFNfVEdfQ1JDKVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTA0PXN0YXRpYyB2b2lkIG5mY3NpbV9saW5rX3JlY3ZfY2FuY2VsKHN0cnVjdCBuZmNzaW1fbGluayAqbGluaylcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTEwNy1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoxMDg6XFx0bGluay1cXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX05PTkU7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTA5LVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTE1PXN0YXRpYyB2b2lkIG5mY3NpbV9saW5rX3NodXRkb3duKHN0cnVjdCBuZmNzaW1fbGluayAqbGluaylcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTExOS1cXHRsaW5rLVxcdTAwM2VzaHV0ZG93biA9IDE7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTIwOlxcdGxpbmstXFx1MDAzZW1vZGUgPSBORkNTSU1fTU9ERV9OT05FO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTEyMS1cXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jPTE4Mj1zdGF0aWMgdm9pZCBuZmNzaW1fcmVjdl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOTAtXFx0aWYgKCFkZXYtXFx1MDAzZXVwKSB7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTkxOlxcdFxcdE5GQ1NJTV9FUlIoZGV2LCBcXFwiRGV2aWNlIGlzIGRvd25cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTE5Mi1cXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jPTIwMT1zdGF0aWMgaW50IG5mY3NpbV9zZW5kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yMDctXFx0aWYgKCFkZXYtXFx1MDAzZXVwKSB7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjA4OlxcdFxcdE5GQ1NJTV9FUlIoZGV2LCBcXFwiRGV2aWNlIGlzIGRvd25cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIwOS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIxOC1cXHRpZiAoZGV2LVxcdTAwM2Vkcm9wZnJhbWUpIHtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyMTk6XFx0XFx0TkZDU0lNX0RCRyhkZXYsIFxcXCJkcm9wcGluZyBmcmFtZSAob3V0IG9mICVkKVxcXFxuXFxcIiwgZGV2LVxcdTAwM2Vkcm9wZnJhbWUpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIyMC1cXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0yNTY9c3RhdGljIGludCBuZmNzaW1faW5fY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNjMtXFx0XFx0ZGV2LVxcdTAwM2V1cCA9IHRydWU7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjY0OlxcdFxcdGRldi1cXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX0lOSVRJQVRPUjtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNjUtXFx0XFx0ZGV2LVxcdTAwM2VyZl90ZWNoID0gcGFyYW07XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNzEtXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNzI6XFx0XFx0TkZDU0lNX0VSUihkZXYsIFxcXCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gdHlwZTogJWRcXFxcblxcXCIsIHR5cGUpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI3My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jPTI4Nj1zdGF0aWMgaW50IG5mY3NpbV90Z19jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5My1cXHRcXHRkZXYtXFx1MDAzZXVwID0gdHJ1ZTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyOTQ6XFx0XFx0ZGV2LVxcdTAwM2Vtb2RlID0gTkZDU0lNX01PREVfVEFSR0VUO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5NS1cXHRcXHRkZXYtXFx1MDAzZXJmX3RlY2ggPSBwYXJhbTtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMwMS1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjMwMjpcXHRcXHRORkNTSU1fRVJSKGRldiwgXFxcIkludmFsaWQgY29uZmlndXJhdGlvbiB0eXBlOiAlZFxcXFxuXFxcIiwgdHlwZSk7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzAzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MzQ2PXN0YXRpYyB2b2lkIG5mY3NpbV9kZWJ1Z2ZzX2luaXRfZGV2KHN0cnVjdCBuZmNzaW0gKmRldilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM1My1cXHRpZiAoIW5mY3NpbV9kZWJ1Z2ZzX3Jvb3QpIHtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozNTQ6XFx0XFx0TkZDU0lNX0VSUihkZXYsIFxcXCJuZmNzaW0gZGVidWdmcyBub3QgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM1NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNjAtXFx0aWYgKG4gXFx1MDAzZT0gc2l6ZW9mKGRldm5hbWUpKSB7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzYxOlxcdFxcdE5GQ1NJTV9FUlIoZGV2LCBcXFwiQ291bGQgbm90IGNvbXB1dGUgZGV2IG5hbWUgZm9yIGRldiAlZFxcXFxuXFxcIiwgaWR4KTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNjItXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MzcwPXN0YXRpYyBzdHJ1Y3QgbmZjc2ltICpuZmNzaW1fZGV2aWNlX25ldyhzdHJ1Y3QgbmZjc2ltX2xpbmsgKmxpbmtfaW4sXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zODUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5GQ19QUk9UT19ORkNfREVQX01BU0ssXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mzg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBORkNTSU1fQ0FQQUJJTElUSUVTLFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz00MzE9c3RhdGljIGludCBfX2luaXQgbmZjc2ltX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQ1OC1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzo0NTk6XFx0cHJfaW5mbyhcXFwibmZjc2ltIFxcXCIgTkZDU0lNX1ZFUlNJT04gXFxcIiBpbml0aWFsaXplZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDYwLVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9NDkxPW1vZHVsZV9leGl0KG5mY3NpbV9leGl0KTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00OTItXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDkzOk1PRFVMRV9ERVNDUklQVElPTihcXFwiTkZDU2ltIGRyaXZlciB2ZXIgXFxcIiBORkNTSU1fVkVSU0lPTik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDk0Ok1PRFVMRV9WRVJTSU9OKE5GQ1NJTV9WRVJTSU9OKTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00OTUtTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MTo0MC4xNzIxMzczMThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc0MDk2MjA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBORkMgU2ltdWxhdG9yIERyaXZlciBBY3RpdmF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19ORkNfU0lNYC4uLiB0aGF0J3MgKmFub3RoZXIqIHNpbXVsYXRvciBkcml2ZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYG5mY3NpbS5jYCBtb2R1bGUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBzaW11bGF0b3IgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZC4gTmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGVuIGl0IHdvdWxkIGJlIHVzZWQgaW4gYSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDUxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6NTcuNTgxNzYyMzI3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY2MzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZmNzaW1cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX05GQ19NRUlfUEhZKVxcdCs9IG1laV9waHkub1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfU0lNKVxcdFxcdCs9IG5mY3NpbS5vXFxuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX05GQ19QT1JUMTAwKVxcdCs9IHBvcnQxMDAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MTo1Ny42MzE0MzYyNjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE0Mzk1NDI5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIE5GQ19TSU0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRoaXMgc29ydGVkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYE5GQ19TSU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSBpdCdzIGxpa2VseSBuZXN0bGVkIHdpdGhpbiB0aGUgTkZDIGRyaXZlciBzdHJ1Y3R1cmUsIHNvIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdXN1YWwgcGxhY2UgZm9yIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLCBzbyBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBIb3BlZnVsbHksIGl0J3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Mjo0OS4wNzA5ODI0OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MzY0MDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDX1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTIxPWNvbmZpZyBORkNfTUVJX1BIWVxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25mYy9LY29uZmlnOjMxOmNvbmZpZyBORkNfU0lNXFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zMi1cXHR0cmlzdGF0ZSBcXFwiTkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQyOjQ5LjQxNDYzMTU2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTMzMDUxNTMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE5GQyBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBORkMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzEuIEtub3dpbmcgdGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIGVuYWJsZS9kaXNhYmxlIGRpcmVjdGl2ZXMgYXJlIGRlZmluZWQuIFRpbWUgdG8gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMgYW5kIGZlYXR1cmVzIGFyZSBiZWluZyBjb25zaWRlcmVkIGhlcmUgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggY29tcG9uZW50cyBhcmUgbW9kdWxhciwgYnVpbHQtaW4sIG9yIHBvdGVudGlhbGx5IGV4Y2x1ZGVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGEgc3RyZWFtbGluZWQgYW5kIG9wdGltaXplZCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Mzo1MC43NDUxNTE4ODlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgTkZDX1NJTVxcbiAgMzI6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIGRyaXZlciBkZWNsYXJlcyB0d28gdmlydHVhbCBORkMgZGV2aWNlcyBzdXBwb3J0aW5nIE5GQy1ERVBcXG4gIDM2OlxcdFxcdCAgcHJvdG9jb2wuIEFuIExMQ1AgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgYmV0d2VlbiB0aGVtIGFuZFxcbiAgMzc6XFx0XFx0ICBhbGwgcGFja2V0cyBzZW50IGZyb20gb25lIGRldmljZSBpcyBzZW50IGJhY2sgdG8gdGhlIG90aGVyLCBhY3RpbmcgYXNcXG4gIDM4OlxcdFxcdCAgbG9vcGJhY2sgZGV2aWNlcy5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZDX1BPUlQxMDBcXG4gIDQzOlxcdFxcdHRyaXN0YXRlIFxcXCJTb255IE5GQyBQb3J0LTEwMCBTZXJpZXMgVVNCIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDM6NTAuNzQ1Mjc3MTY5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxOTgwODgyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5GQyBOZXRsaW5rIFNlcnZpY2UgRGlzY292ZXJ5IFJlcXVlc3QgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYG5ldC9uZmMvbmV0bGluay5jYCBmb2N1c2VzIG9uIGZpeGluZyBhIG1lbW9yeSBsZWFrIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgTkZDIGRldmljZXMsIGVtcGxveWluZyB0aGUgTkZDLURFUCBwcm90b2NvbC4gTExDUCBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQgYmV0d2VlbiB0aGVzZSB2aXJ0dWFsIGRldmljZXMsIGFuZCBwYWNrZXRzIGFyZSBsb29wZWQgYmFjay4gU3l6a2FsbGVyIHN1cHBvcnRzIE5GQyBhbmQgcmVsYXRlZCBuZXRsaW5rIG1lY2hhbmlzbXMsIGluY2x1ZGluZyBzaW11bGF0ZWQgZGV2aWNlcywgd2hpY2ggbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQuIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGl0ZXJhdGVzIHRocm91Z2ggU0RQIGF0dHJpYnV0ZXMgcmVjZWl2ZWQgdmlhIG5ldGxpbmsuICBDcnVjaWFsbHksIGl0IGJ1aWxkcyBTRFAgVExWcyAoVHlwZS1MZW5ndGgtVmFsdWUpIHVzaW5nIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIGFuZCBhZGRzIHRoZW0gdG8gYSBsaXN0LCBgc2RyZXFfbGlzdGAuIFByZXZpb3VzbHksIGlmIGFuIGVycm9yIG9jY3VycmVkICphZnRlciogZWxlbWVudHMgd2VyZSBhZGRlZCB0byBgc2RyZXFfbGlzdGAgd2l0aGluIHRoZSBsb29wIG9yIGFmdGVyIGEgc3Vic2VxdWVudCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNhbGwsIHRoZSBmdW5jdGlvbiB3b3VsZCBzaW1wbHkgYGdvdG8gcHV0X2xvY2FsYCB3aGljaCBsZWFrZWQgdGhlIG1lbW9yeSBvZiB0aGUgYHNkcmVxX2xpc3RgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZ290byBmcmVlX2xpc3RgIHRvIGNvcnJlY3RseSBmcmVlIHRoZSBgc2RyZXFfbGlzdGAgd2hpY2ggcHJldmVudHMgdGhpcyBsZWFrLlxuXG5Ob3csIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgY29tZXMgaW50byBwbGF5LiBJZiBpdCAqc3VjY2VlZHMqLCBpdCBtb3ZlcyB0aGUgZWxlbWVudHMgZnJvbSBgc2RyZXFfbGlzdGAgdG8gYSBkaWZmZXJlbnQgbGlzdCBhbmQgKnRoZW4qIHRoZSBjb2RlIGZhbGxzIHRocm91Z2ggdG8gYGZyZWVfbGlzdGAsIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlICplbXB0eSogYHNkcmVxX2xpc3RgLCB3aGljaCBpcyBhIG5vLW9wLiBJZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZhaWxzLCB0aGUgYHNkcmVxX2xpc3RgIHdvdWxkIGJlIGNvcnJlY3RseSBmcmVlZC5cblxuVGhpcyBwYXRjaCBsb29rcyBzb3VuZCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIE1vcmVvdmVyLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIGl0IGZ1enphYmxlLiBORkMgbmV0bGluayBmdW5jdGlvbmFsaXR5IGNhbiBiZSBhY2Nlc3NlZCB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMsIGFuZCBTeXprYWxsZXIgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC4gRW5hYmxpbmcgdGhlIGBORkNgIGNvbmZpZyBvcHRpb24gaXMgZW5vdWdoLiBUaGUgZnVuY3Rpb24gYG5mY19nZW5sX2xsY19zZHJlcWAgaXMgbm90IGlubGluZWQgYW5kIHdpbGwgYmUgdmlzaWJsZSB0byBzeW1ib2wgY292ZXJhZ2UsIGFzIGl0IGlzIHBhcnQgb2YgdGhlIGBuZmNfZ2VubF9vcHNgIGFycmF5LiBUaHVzLCBmdXp6aW5nIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEuIFRoZSBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ1OjEyLjcyNjE2MzkwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4ODI2MjgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ1OjEzLjE3NTAwMTkwOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NzUzMDQ5ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5GQyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIE5GQyBuZXRsaW5rIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L25mYy9uZXRsaW5rLmNgLCBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IGAjaWZgIG9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gdGhlcmUuIEludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZSBjb2RlJ3MgYmVoYXZpb3IgcHJvYmFibHkgaXNuJ3QgY29uZGl0aW9uYWwgYmFzZWQgb24gcHJlcHJvY2Vzc29yIGZsYWdzLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkgd2l0aGluIHRoaXMgZmlsZS4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc2ltdWxhdGVkIGRldmljZXMg4oCTIGVzcGVjaWFsbHkgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50IOKAkyBhcmUgY29uZmlndXJlZCB0byBicmluZyB1cCB0aGUgREVQIGxpbmsuIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgREVQYCBsaW5rcyB3b3VsZCBiZWNvbWUgcmVhY2hhYmxlLiBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZT8gSSBpbW1lZGlhdGVseSB0aGluayBvZiBgQ09ORklHX05GQ19TSU1gLCBgQ09ORklHX05GQ19ESUdJVEFMYCwgb3IgbWF5YmUgZXZlbiBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAuXG5cbkZpcnN0LCBhIHJlYWxpdHkgY2hlY2s6IHdoYXQgZXhhY3RseSAqZG9lcyogYENPTkZJR19ORkNgIGRlcGVuZCBvbiwgZnVuZGFtZW50YWxseT8gTGV0J3MgY2hlY2sgdGhlIGBuZXQvbmZjL0tjb25maWdgIGZpbGUuIEFoLCB0aGUgYG1lbnVjb25maWcgTkZDYCBibG9jay4gSSBzZWUgaXQgZGVwZW5kcyBvbiBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBSRktJTExgLCB3aGljaCBpcyBhIGJpdCBvZGQgYnV0IGZ1bmN0aW9uYWxseSBtYWtlcyBzZW5zZS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBiZWNhdXNlIGl0J3MgdW5kZXIgdGhlIGBuZXQvYCBkaXJlY3RvcnkgYW5kIGlzIGxpa2VseSB1dGlsaXppbmcgbmV0bGluay4gU28gYE5GQ2AgaXMgZXNzZW50aWFsbHkgdGhlIGNvcmUgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgc2ltdWxhdGVkIGRldmljZSBvcHRpb25zLiBgTkZDX0RJR0lUQUxgLCBgTkZDX1NJTWAgKG9yIGBORkNfVklSVFVBTF9OQ0lgKSBhcmUgdGhlIGxpa2VseSBjdWxwcml0cyBmb3IgdmlydHVhbCBORkMgZGV2aWNlIHN1cHBvcnQsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGRlcGVuZGVuY2llcy4gRG9lcyBgTkZDX1NJTWAgZGVwZW5kIG9uIGBORkNfRElHSVRBTGA/IExldCdzIGNvbmZpcm0gd2l0aCB0aGUgS2NvbmZpZzpcblxuWWVwLCBhbmQgaXQgaXMgYSAqaGFyZCogZGVwZW5kZW5jeS4gVGhlIEtjb25maWcgc25pcHBldCBjb25maXJtcyBpdCBkaXJlY3RseS4gT2theSwgbGV0J3Mgc2VlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGhpZXJhcmNoeTogYE5GQ19TSU1gIGRlcGVuZHMgb24gYE5GQ19ESUdJVEFMYCwgYW5kIGBORkNfRElHSVRBTGAgZGVwZW5kcyBvbiBgTkZDYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCB3aGF0IGFib3V0IGBORkNfVklSVFVBTF9OQ0lgPyBMb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoYXQsIGl0IGRlcGVuZHMgb24gYE5GQ19OQ0lgLlxuXG5MZXQncyBub3cgaW52ZXN0aWdhdGUgYE5GQ19OQ0lgLiBJdCBzZWVtcyBJJ2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9uZmMvbmNpL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Njo0MC43MDU1MDQ1OTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19OQ0lcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXFxuICAgODpcXHRcXHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBOQ0kgc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDExOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKG5jaSkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORkNfTkNJX1NQSVxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMTU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxcbiAgMjA6XFx0XFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDY6NDAuNzA1NTcyMzQ3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1NjIwNTI5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIE15IHRhc2sgaXMgdG8gaWRlbnRpZnkgdGhlIHByZWNpc2UgYENPTkZJR19gIG9wdGlvbnMgbmVlZGVkIHRvIGVuc3VyZSB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBgbmZjX2dlbmxfbGxjX3NkcmVxYCB3aXRoaW4gYG5ldC9uZmMvbmV0bGluay5jYCwgY29tcGlsZXMgY29ycmVjdGx5IGFuZCBpcyByZWFjaGFibGUuIFRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXplIHRob3JvdWdobmVzczogbm8gYXNzdW1wdGlvbnMsIEtjb25maWcgaW5zcGVjdGlvbiwgYW5kIGNvbnNpZGVyaW5nIGRlcGVuZGVuY2llcy5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYE5GQ2AgaXMgdGhlIGtleS4gVGhlIGNvZGUgY29tcGlsZXMgd2l0aGluIHRoZSBgTkZDYCBjb25maWd1cmF0aW9uIHNwYWNlLCBzbyBgTkZDYCBpcyBkZWZpbml0ZWx5IGVzc2VudGlhbC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTkVUYCBpc24ndCBhIHJlcXVpcmVkIHBhcmVudCBzdWJzeXN0ZW0sIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBORkNgIGFuZCBwb3NzaWJseSBgTkZDX1NJTWAgYXMgdGhleSBtYXkgYmUgYmVuZWZpY2lhbCBhbmQgYXJlIGFsc28gZ29vZCBwcmFjdGljZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgYWxsIHRoZSBkZXRhaWxzIGJlZm9yZSBJIHN1Ym1pdCBteSBmaW5kaW5ncyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cbiogICBgV29ydGhGdXp6aW5nYDogQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLCBtZWFuaW5nIGl0J3MgaGlnaGx5IHN1c2NlcHRpYmxlIHRvIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGluY29ycmVjdCBzdGF0ZXMuXG4qICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZC4gSSdtIGZvY3VzaW5nIG9uIGBuZmNfZ2VubF9sbGNfc2RyZXFgLCBzbyB0aGF0J3Mgc3BvdCBvbi5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEkndmUgZ290IHRoaXM6IGBbXCJORkNcIl1gLiBBbmQgdG8gYmUgdGhvcm91Z2gsIEknbGwgaW5jbHVkZSBgW1wiTkZDXCIsIFwiTkZDX1NJTVwiXWAgdG8gbWF4aW1pemUgcmVhY2hhYmlsaXR5LlxuKiAgIGBSZWFzb25pbmdgOiBIZXJlJ3MgdGhlIGNvcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG5mY19nZW5sX2xsY19zZHJlcSgpYC4gSXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBieSBlbnN1cmluZyB0aGUgcHJvcGVyIGZyZWVpbmcgb2YgU0RQIFRMViBsaXN0IGVudHJpZXMsIGJvdGggaW4gZXJyb3IgY2FzZXMgYW5kIGFmdGVyIHNlbmRpbmcgdGhlIFNOTCBTRFJFUSBtZXNzYWdlLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rLCBhbmQgaXQgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cbkV2ZXJ5dGhpbmcgaXMgbWV0aWN1bG91c2x5IGNoZWNrZWQgYW5kIHZlcmlmaWVkLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcxNSwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Njo1MC4yNjc2Mjk2NjFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM1ODQxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19nZW5sX2xsY19zZHJlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGFuZCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIG5mY19nZW5sX2xsY19zZHJlcSgpIGluIG5ldC9uZmMvbmV0bGluay5jIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9mIFNEUCBUTFYgZWxlbWVudHMgd2hlbiBwcm9jZXNzaW5nIE5GQ19DTURfTExDX1NEUkVRIGdlbmVyaWMgbmV0bGluayBjb21tYW5kcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHNvZnR3YXJlLWVtdWxhdGVkIE5GQyBkZXZpY2VzLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGxpc3QgaGFuZGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZjX2dlbmxfbGxjX3NkcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgYW5kIGNvbXBsZXRpb24gaGFuZGxpbmcgaW4gbmZjX2dlbmxfbGxjX3NkcmVxKCkgaW4gbmV0L25mYy9uZXRsaW5rLmMgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgb2YgU0RQIFRMViBlbGVtZW50cyB3aGVuIHByb2Nlc3NpbmcgTkZDX0NNRF9MTENfU0RSRVEgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cyBhbmQgc29mdHdhcmUtZW11bGF0ZWQgTkZDIGRldmljZXMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgbGlzdCBoYW5kbGluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDY6NTAuNDExMjIzMjI2WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg5ODg3MTU2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Njo1MC40MTE5MTg1MTdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1Mjg5ODgwMTU1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXFxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYzg0NmEzZDdiNjRjZWYzYmQxNzM5NTZlMDVjYTZkNWE3MzEwOTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6MzE6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25ldGxpbmsuYyBiL25ldC9uZmMvbmV0bGluay5jXG5pbmRleCAwYzU4ODI0Y2IxNTBkLi4yMjRiZGZhMmRkMGRjIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uZXRsaW5rLmNcbisrKyBiL25ldC9uZmMvbmV0bGluay5jXG5AQCAtMTE4MSw3ICsxMTgxLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdFx0aWYgKHJjICE9IDApIHtcbiBcdFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBwdXRfbG9jYWw7XG4rXHRcdFx0Z290byBmcmVlX2xpc3Q7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pXG5AQCAtMTIwMCw3ICsxMjAwLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xuIFx0XHRpZiAoc2RyZXEgPT0gTlVMTCkge1xuIFx0XHRcdHJjID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHB1dF9sb2NhbDtcbitcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbiBcdFx0fVxuIFxuIFx0XHR0bHZzX2xlbiArPSBzZHJlcS1cdTAwM2V0bHZfbGVuO1xuQEAgLTEyMTUsNiArMTIxNSw5IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XG4gXG4rZnJlZV9saXN0OlxuK1x0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7XG4rXG4gcHV0X2xvY2FsOlxuIFx0bmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ2OjUwLjQxMTkxOTQ3N1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDQyNDc5OTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgY29kZSBjaGFuZ2VzIHdhcnJhbnQgdGhlIGV4cGVuc2Ugb2YgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogKipLTVNBTiBpcyBvbmx5IG5lZWRlZCBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNhbiBkZXRlY3QuKiogQW55dGhpbmcgS0FTQU4sIExvY2tEZXAsIG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzIHdvdWxkIGZpbmQgaXMgYSBuby1nbyBmb3IgS01TQU4uIFRoYXQncyB0aGUgZ3VpZGluZyBwcmluY2lwbGUuXG5cblNvLCBsZXQncyBmb2N1cyBvbiB0aGUgY3JpdGljYWwgYXJlYS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBwYXJ0aWN1bGFybHkgYG5mY19nZW5sX2xsY19zZHJlcWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGFuZCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgLCBhcm91bmQgbGluZSAxMTgxIGluIGBuZXQvbmZjL25ldGxpbmsuY2AuIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGNvZGUgZnJvbSBsaW5lcyAxMTUwLTEyNDAuIEkgd2lsbCBsb29rIGZvciBhbnkgcmVkIGZsYWdzLCBhbnkgaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIHVuY292ZXIuIFRoaXMgaXMgdGhlIGNydXggb2YgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Nzo1MC44MzY3MjQ4MDlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tORkNfQVRUUl9ERVZJQ0VfSU5ERVhdIHx8XFxuMTE1MTpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0xMQ19TRFBdKVxcbjExNTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdFxcdGlkeCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRkZXYgPSBuZmNfZ2V0X2RldmljZShpZHgpO1xcbjExNTc6XFx0XFx0aWYgKCFkZXYpXFxuMTE1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0ZGV2aWNlX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcXG4xMTYzOlxcdFxcdFxcdHJjID0gLUVOT0xJTks7XFxuMTE2NDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTE2NTpcXHRcXHR9XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGxvY2FsID0gbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpO1xcbjExNjg6XFx0XFx0aWYgKCFsb2NhbCkge1xcbjExNjk6XFx0XFx0XFx0cmMgPSAtRU5PREVWO1xcbjExNzA6XFx0XFx0XFx0Z290byBleGl0O1xcbjExNzE6XFx0XFx0fVxcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNkcmVxX2xpc3QpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHR0bHZzX2xlbiA9IDA7XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xcbjExNzg6XFx0XFx0XFx0cmMgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc2RwX2F0dHJzLCBORkNfU0RQX0FUVFJfTUFYLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXFxuMTE4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0XFx0aWYgKHJjICE9IDApIHtcXG4xMTgzOlxcdFxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMTg0OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjExODU6XFx0XFx0XFx0fVxcbjExODY6XFx0XFxuMTE4NzpcXHRcXHRcXHRpZiAoIXNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSlcXG4xMTg4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRcXHR1cmlfbGVuID0gbmxhX2xlbihzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTE6XFx0XFx0XFx0aWYgKHVyaV9sZW4gPT0gMClcXG4xMTkyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRcXHR1cmkgPSBubGFfZGF0YShzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTU6XFx0XFx0XFx0aWYgKCp1cmkgPT0gMClcXG4xMTk2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTc6XFx0XFxuMTE5ODpcXHRcXHRcXHR0aWQgPSBsb2NhbC1cXHUwMDNlc2RyZXFfbmV4dF90aWQrKztcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0XFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xcbjEyMDE6XFx0XFx0XFx0aWYgKHNkcmVxID09IE5VTEwpIHtcXG4xMjAyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4xMjAzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjEyMDQ6XFx0XFx0XFx0fVxcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRcXHR0bHZzX2xlbiArPSBzZHJlcS1cXHUwMDNldGx2X2xlbjtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlLCBcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIwOTpcXHRcXHR9XFxuMTIxMDpcXHRcXG4xMjExOlxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2c2RyZXFfbGlzdCkpIHtcXG4xMjEyOlxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMjEzOlxcdFxcdFxcdGdvdG8gcHV0X2xvY2FsO1xcbjEyMTQ6XFx0XFx0fVxcbjEyMTU6XFx0XFxuMTIxNjpcXHRcXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xcbjEyMTc6XFx0XFxuMTIxODpcXHRmcmVlX2xpc3Q6XFxuMTIxOTpcXHRcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdHB1dF9sb2NhbDpcXG4xMjIyOlxcdFxcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XFxuMTIyMzpcXHRcXG4xMjI0OlxcdGV4aXQ6XFxuMTIyNTpcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuMTIyNjpcXHRcXG4xMjI3OlxcdFxcdG5mY19wdXRfZGV2aWNlKGRldik7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdHJldHVybiByYztcXG4xMjMwOlxcdH1cXG4xMjMxOlxcdFxcbjEyMzI6XFx0c3RhdGljIGludCBuZmNfZ2VubF9md19kb3dubG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjEyMzM6XFx0e1xcbjEyMzQ6XFx0XFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG4xMjM1OlxcdFxcdGludCByYztcXG4xMjM2OlxcdFxcdHUzMiBpZHg7XFxuMTIzNzpcXHRcXHRjaGFyIGZpcm13YXJlX25hbWVbTkZDX0ZJUk1XQVJFX05BTUVfTUFYU0laRSArIDFdO1xcbjEyMzg6XFx0XFxuMTIzOTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0gfHwgIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0ZJUk1XQVJFX05BTUVdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Nzo1MC44MzY5NDQ2NDlaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMzNDEzNzY4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgYW5kIGBzZHJlcV9saXN0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW50ZXJuYWxseSB3aXRoIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYHNkcmVxX2xpc3RgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGhhbmRsaW5nIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3RzIHdpdGhpbiB0aGUgTExDUCBwcm90b2NvbCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU0QgKFNlcnZpY2UgRGlzY292ZXJ5KSByZXF1ZXN0IGxpc3QuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgaG93IGl0J3MgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSByaWdodCB0byB0aGUgY3JpdGljYWwgcG9pbnRzIGludm9sdmluZyBgc2RyZXFfbGlzdGAuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0ODozNC4xNzgzMjcxMzFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzU1NDU4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwLmg9MjM4PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcC5oLTIzOS1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjI0MDppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3AuaC0yNDEtXFx0XFx0XFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jPTU2OT1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Mi1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1OTM6aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTk0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbilcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTExMzc9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTEyMTUtXFxubmV0L25mYy9uZXRsaW5rLmM6MTIxNjpcXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xcbm5ldC9uZmMvbmV0bGluay5jLTEyMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ4OjM2LjY1Mzg4MTc2N1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDUyMTczMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTExDUCBDb21tYW5kcyBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiBob3cgTExDUCBjb21tYW5kcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIE5GQyBzdGFjay4gSSd2ZSBnb3QgYSBzcGVjaWZpYyBsb2NhdGlvbiBpbiBtaW5kIC0gbGV0J3MgemVybyBpbiBvbiBgbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU5My4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgcHJvY2Vzc2luZyBsb2dpYyBraWNrcyBpbiwgb3IgYXQgbGVhc3QgdGhlIGJyYW5jaGluZyB0aGF0IGRlY2lkZXMgaG93IHRoaW5ncyBnZXQgcHJvY2Vzc2VkLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyBpbiBtb3JlIGRldGFpbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjZW50cmFsIGNvbW1hbmQgZGlzcGF0Y2gsIHRoZSBwYXJzaW5nIG9mIGluY29taW5nIExMQ1AgZnJhbWVzLCBvciBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBjZXJ0YWluIGNvbnRyb2wgbWVzc2FnZXMuIExpbmUgNTkzIGlzIGxpa2VseSB0byBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgb3BlcmF0aW9uIEknbSBpbnRlcmVzdGVkIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTE0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDg6NDUuNzA2MDU4NjIzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29tbWFuZHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODU6XFx0XFx0XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2KHNkcCk7XFxuIDU4NjpcXHRcXHR9XFxuIDU4NzpcXHRcXG4gNTg4OlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfcXVldWUsIHNrYik7XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdHJldHVybiAwO1xcbiA1OTE6XFx0fVxcbiA1OTI6XFx0XFxuIDU5MzpcXHRpbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4gNTk0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbilcXG4gNTk1OlxcdHtcXG4gNTk2OlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHJlcTtcXG4gNTk3OlxcdFxcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xcbiA1OTg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTk5OlxcdFxcbiA2MDA6XFx0XFx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XFxuIDYwMTpcXHRcXHRpZiAoSVNfRVJSKHNrYikpXFxuIDYwMjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihza2IpO1xcbiA2MDM6XFx0XFxuIDYwNDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlc2RyZXFfbG9jayk7XFxuIDYwNTpcXHRcXG4gNjA2OlxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2bG9jYWwtXFx1MDAzZXBlbmRpbmdfc2RyZXFzKSlcXG4gNjA3OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX3RpbWVyLFxcbiA2MDg6XFx0XFx0XFx0XFx0ICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygzICogbG9jYWwtXFx1MDAzZXJlbW90ZV9sdG8pKTtcXG4gNjA5OlxcdFxcbiA2MTA6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZHJlcSwgbiwgdGx2X2xpc3QsIG5vZGUpIHtcXG4gNjExOlxcdFxcdFxcdHByX2RlYnVnKFxcXCJ0aWQgJWQgZm9yICVzXFxcXG5cXFwiLCBzZHJlcS1cXHUwMDNldGlkLCBzZHJlcS1cXHUwMDNldXJpKTtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgc2RyZXEtXFx1MDAzZXRsdiwgc2RyZXEtXFx1MDAzZXRsdl9sZW4pO1xcbiA2MTQ6XFx0XFxuIDYxNTpcXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlKTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcXG4gNjE4OlxcdFxcdH1cXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlc2RyZXFfbG9jayk7XFxuIDYyMTpcXHRcXG4gNjIyOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfcXVldWUsIHNrYik7XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdHJldHVybiAwO1xcbiA2MjU6XFx0fVxcbiA2MjY6XFx0XFxuIDYyNzpcXHRpbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXFxuIDYyODpcXHR7XFxuIDYyOTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2MzA6XFx0XFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG4gNjMxOlxcdFxcdHUxNiBzaXplID0gMTsgLyogUmVhc29uIGNvZGUgKi9cXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0cHJfZGVidWcoXFxcIlNlbmRpbmcgRE0gcmVhc29uIDB4JXhcXFxcblxcXCIsIHJlYXNvbik7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdGlmIChsb2NhbCA9PSBOVUxMKVxcbiA2MzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdGRldiA9IGxvY2FsLVxcdTAwM2VkZXY7XFxuIDYzOTpcXHRcXHRpZiAoZGV2ID09IE5VTEwpXFxuIDY0MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0c2l6ZSArPSBMTENQX0hFQURFUl9TSVpFO1xcbiA2NDM6XFx0XFx0c2l6ZSArPSBkZXYtXFx1MDAzZXR4X2hlYWRyb29tICsgZGV2LVxcdTAwM2V0eF90YWlscm9vbSArIE5GQ19IRUFERVJfU0laRTtcXG4gNjQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0ODo0NS43MDYxODU0MjNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzkxNjk0ODg0MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGluIE5GQyBMTENQIFNlcnZpY2UgRGlzY292ZXJ5IFJlcXVlc3QgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIGlmIGBuZmNfbGxjcF9hbGxvY2F0ZV9zbmwobG9jYWwsIHRsdnNfbGVuKWAgZmFpbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHJldHVybmluZyBhbiBgRVJSX1BUUihza2IpYC4gQ3J1Y2lhbGx5LCBpdCByZXR1cm5zICpiZWZvcmUqIGNvbnN1bWluZyB0aGUgYHRsdl9saXN0YC4gVGhhdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGxlYWsuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHdoZXJlIHRoaXMgaXMgY2FsbGVkOiBgbmZjX2dlbmxfbGxjX3NkcmVxYC4gVGhlIG9yaWdpbmFsIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XG5cbnB1dF9sb2NhbDpcblx0bmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTtcbmBgYFxuXG5UaGUgb2xkIGZsb3cgdXNlZCB0byBoYXZlIGEgbG9vcCB0aGF0IGNoZWNrZWQ6IGBJZiByYyAhPSAwIG9yIHNkcmVxID09IE5VTExgOiBgZ290byBwdXRfbG9jYWw7YC4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBpZiB0aGVyZSdzIGFuIGVycm9yIGluIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgKGxpa2UgdGhlIGFsbG9jYXRpb24gZmFpbHVyZSBJIG1lbnRpb25lZCksIG9yIGlmIHRoZSByZXR1cm4gY29kZSBpcyBub24temVybywgdGhlIGNvZGUganVtcHMgdG8gYHB1dF9sb2NhbGAgKndpdGhvdXQqIGZyZWVpbmcgdGhlIGBzZHJlcV9saXN0YC4gIEFub3RoZXIgbGVhayFcblxuQnV0Li4uIHdoYXQgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBhY3R1YWxseSAqc3VjY2VlZHMqPyBMZXQncyB0cmFjZSBpdC4gSW5zaWRlIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIEkgc2VlIHRoaXMgY3JpdGljYWwgc25pcHBldDpcblxuYGBgY1xuXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RyZXEsIG4sIHRsdl9saXN0LCBub2RlKSB7XG5cdFx0XHRwcl9kZWJ1ZyhcInRpZCAlZCBmb3IgJXNcXG5cIiwgc2RyZXEtXHUwMDNldGlkLCBzZHJlcS1cdTAwM2V1cmkpO1xuXG5cdFx0XHRza2JfcHV0X2RhdGEoc2tiLCBzZHJlcS1cdTAwM2V0bHYsIHNkcmVxLVx1MDAzZXRsdl9sZW4pO1xuXG5cdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSk7XG5cblx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnNkcmVxLVx1MDAzZW5vZGUsIFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcblx0XHR9XG5gYGBcblxuQWhhISAgRWFjaCBlbnRyeSBpbiBgdGx2X2xpc3RgIGlzICptb3ZlZCogdG8gYGxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzYC4gIFNvLCBpZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgICpzdWNjZWVkcyosIHRoZSBvcmlnaW5hbCBgdGx2X2xpc3RgICh3aGljaCBpcyBgXHUwMDI2c2RyZXFfbGlzdGApIGlzIG5vdyAqZW1wdHkqISAoYGhsaXN0X2VtcHR5KFx1MDAyNnNkcmVxX2xpc3QpID09IHRydWVgKS4gU28sIG5vIGxlYWshICBUaGF0J3MgZ29vZC5cblxuU28sIHRoZSBjcml0aWNhbCBjYXNlcyBhcmUgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIHRob3NlIG5vbi16ZXJvIHJldHVybiBjb2RlcyAqYmVmb3JlKiB0aGUgbGlzdCBpcyBlbXB0aWVkLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgbGlzdCBpcyB1bHRpbWF0ZWx5IGNsZWFuZWQgdXAsIGxldCdzIGZpbmQgd2hlcmUgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBpcyB1c2VkIGFuZCBzZWUgaWYgaXQgaXMgYXBwcm9wcmlhdGVseSBjYWxsZWQuIEknbGwgbmVlZCB0byBkbyBzb21lIGdyZXBwaW5nIG5vdyB0byBiZSBzdXJlIG9mIHRoZSBmaW5hbCBjbGVhbnVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NTU6MTcuNDAxMDcyMjYyWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3MDc5NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcC5oPTIzMj12b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xcbm5ldC9uZmMvbGxjcC5oLTIzNC12b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3OS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODEte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzEtXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX3RpbWVvdXRfd29yayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcyk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzMtfVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTQyMy1cXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc2RyZXNfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtNDI1LVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XFxubmV0L25mYy9uZXRsaW5rLmM6MTIxOTpcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtMTIyMC1cXG4tLVxcbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XFxubmV0L25mYy9uZmMuaDo1OTp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKTtcXG5uZXQvbmZjL25mYy5oLTYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo1NToxOC45MTgxNjE4MzhaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ2OTE4ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIGxsY3BfY29tbWFuZHMuYyBDb2RlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AgYW5kIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBTRFAgVExWIGxpc3RzLCBhbmQgdGhpcyBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgZnJlZSBvcGVyYXRpb24sIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYW55IHN1YnRsZXRpZXMgb3IgcG90ZW50aWFsIGdvdGNoYXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo1NToyNC4zODczNTM5NTdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcbiAxNzE6XFx0XFx0cmV0dXJuIHNkcmVxO1xcbiAxNzI6XFx0fVxcbiAxNzM6XFx0XFxuIDE3NDpcXHR2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0a2ZyZWUoc2RwLVxcdTAwM2V0bHYpO1xcbiAxNzc6XFx0XFx0a2ZyZWUoc2RwKTtcXG4gMTc4OlxcdH1cXG4gMTc5OlxcdFxcbiAxODA6XFx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcXG4gMTgxOlxcdHtcXG4gMTgyOlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHA7XFxuIDE4MzpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZHAsIG4sIGhlYWQsIG5vZGUpIHtcXG4gMTg2OlxcdFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2c2RwLVxcdTAwM2Vub2RlKTtcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2KHNkcCk7XFxuIDE4OTpcXHRcXHR9XFxuIDE5MDpcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdGludCBuZmNfbGxjcF9wYXJzZV9nYl90bHYoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4gMTkzOlxcdFxcdFxcdFxcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pXFxuIDE5NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjU1OjI0LjM4NzQ0NDI4NloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTAxMjQ2ODkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgTGVhayBGaXggaW4gTkZDIE5ldGxpbmsgSW50ZXJmYWNlOiBLTVNBTiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uIGp1c3QgaXRlcmF0ZXMgdGhyb3VnaCBhIGxpc3QsIGRlbGV0ZXMgZWFjaCBlbGVtZW50LCBhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgbWVtb3J5LiBJZiB0aGUgbGlzdCBpcyBlbXB0eSBhZnRlciBhIHN1Y2Nlc3NmdWwgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCwgdGhlIGxvb3AgZG9lc24ndCBldmVuIHJ1bi4gIEFuZCwgY3J1Y2lhbGx5LCBhbnkgcmVtYWluaW5nIGVsZW1lbnRzIGluIGBzZHJlcV9saXN0YCBhcmUgYWxzbyBmcmVlZCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9yIHNlbmRpbmcgb2YgdGhlIFNEUkVRLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBtZW1vcnkgbGVhayBpbiBgbmZjX2dlbmxfbGxjX3NkcmVxKClgLiBJdCBsb29rcyBsaWtlIHdoZW4gYG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCgpYCBmYWlscywgb3IgYWxsb2NhdGlvbiBmYWlscyBpbiBgbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KClgLCBvciBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoKWAgaXRzZWxmIGZhaWxzLCB0aGUgY29kZSBwcmV2aW91c2x5IGp1bXBlZCB0byBgcHV0X2xvY2FsYCB3aXRob3V0IGNsZWFuaW5nIHVwIHRoZSBhbGxvY2F0ZWQgVExWcy4gTm93LCB0aGUgcGF0Y2ggY29ycmVjdGx5IGFkZHMgYSBgZnJlZV9saXN0OmAgbGFiZWwgdG8gY2FsbCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7YCBiZWZvcmUgYHB1dF9sb2NhbGAgZm9yIGEgY29uc2lzdGVudCBjbGVhbnVwLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IEtNU0FOLiBBcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmU/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFdlJ3JlIG5vdCBzZW5kaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBhbnkgb2YgdGhvc2UgbWV0aG9kcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIFRoZSBgc2RyZXFfbGlzdGAgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX0hMSVNUX0hFQUQoXHUwMDI2c2RyZXFfbGlzdCk7YCBhdCBsaW5lIDExNzMgYmVmb3JlIGFueSB1c2Ugb3IgYnJhbmNoLlxuMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBUaGlzIHBhdGNoICpvbmx5KiBmcmVlcyBtZW1vcnkuIE5vIG5ldyBhbGxvY2F0aW9ucyBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcz8qKiBEZWZpbml0ZWx5IG5vdC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggY2xlYW5pbmcgdXAgYWxsb2NhdGVkIG1lbW9yeS5cblxuU28sIG5vLCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gQWxsIHRoZSBwYXRjaCBkb2VzIGlzIGZyZWUgbWVtb3J5LCBhbmQgdGhhdCdzIGl0IVxuXG5CYXNpY2FsbHksIGl0J3MgYSBtZW1vcnkgbGVhayBmaXguIElmIGFueSBidWdzIGV4aXN0IGhlcmUsIHRoZXknZCBiZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIGxpa2UgZG91YmxlIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGludmFsaWQgbGlzdCBvcGVyYXRpb25zLiBLQVNBTi9TTFVCIGRlYnVnIGlzIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgY2F0Y2hpbmcgdGhvc2UuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gSXQgZG9lc24ndCBhcHBseSBoZXJlLlxuXG4qKlRoZXJlZm9yZSwgTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuKipcblxuVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBuZXRsaW5rIGludGVyZmFjZSdzIGBuZmNfZ2VubF9sbGNfc2RyZXEoKWAgZnVuY3Rpb24uIFByZXZpb3VzbHksIGFsbG9jYXRlZCBUTFYgb2JqZWN0cyB3aXRoaW4gdGhlIGBzZHJlcV9saXN0YCB3ZXJlIGxlYWtlZCB1bmRlciBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMgKGZhaWxlZCBhdHRyaWJ1dGUgcGFyc2luZywgYWxsb2NhdGlvbiBlcnJvcnMsIG9yIGZhaWx1cmUgb2YgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKClgKS4gVGhlIGZpeCByb3V0ZXMgZXJyb3IgcGF0aHMgdGhyb3VnaCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdClgIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBvYmplY3RzLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIHN0cmljdGx5IGZyZWVpbmcgaGVhcC1hbGxvY2F0ZWQgb2JqZWN0cy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBpbnZhbGlkIGxpc3Qgb3BlcmF0aW9ucyksIHdoaWNoIGFyZSBzcGVjaWZpY2FsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nIGZlYXR1cmVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBjb3B5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgc2RyZXFfbGlzdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IHBvdGVudGlhbCBgZ290byBmcmVlX2xpc3RgIHVzYWdlLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLCBhbmQgS0FTQU4gZnV6emluZyBpcyBhcHByb3ByaWF0ZS4gVGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgYmV0dGVyIHN1aXRlZCB0byBLQVNBTiB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjYzLCJPdXRwdXRUb2tlbnMiOjMxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo1NTozOS4zOTk5MTU5MDNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXFxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayBpbiBuZXQvbmZjL25ldGxpbmsuYyAobmZjX2dlbmxfbGxjX3NkcmVxKS4gSW4gdGhlIGV2ZW50IG9mIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyBmYWlsdXJlLCBUTFYgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciBzZW5kIGZhaWx1cmUsIHByZXZpb3VzbHkgYWxsb2NhdGVkIFRMViBlbnRyaWVzIGluIGBzZHJlcV9saXN0YCB3ZXJlIG5vdCBjbGVhbmVkIHVwIGJlZm9yZSByZXR1cm5pbmcuIFRoZSBmaXggaW50cm9kdWNlcyBhIGNhbGwgdG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFxcdTAwMjZzZHJlcV9saXN0KWAgb24gdGhlIGV4aXQgcGF0aCBhbmQgdXBkYXRlcyBlcnJvciBqdW1wIHRhcmdldHMgdG8gaXQuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhIChgc2RyZXFfbGlzdGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBJTklUX0hMSVNUX0hFQURgIGJlZm9yZSBhbnkgZXJyb3IgYnJhbmNoZXMpLlxcbi0gVGhlIGNoYW5nZXMgc29sZWx5IGludm9sdmUgZXJyb3IgY2xlYW51cCBhbmQgZnJlZWluZyBoZWFwIG1lbW9yeSAoYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCkuIEFueSBwb3RlbnRpYWwgYnVncyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29ycnVwdGVkIGxpc3QgdHJhdmVyc2FsKSBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBTTFVCIGRlYnVnLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowpn7hx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 12:53:35 +0000 UTC FinishedAt: 2026-09-14 13:55:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_SIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_SIM" ], "series_id": "e15ecc43-78e5-4c9e-b08c-893a4888b671" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_genl_llc_sdreq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdClgIG9uIHRoZSBleGl0IHBhdGggYW5kIHVwZGF0ZXMgZXJyb3IganVtcCB0YXJnZXRzIHRvIGl0LlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSAoYHNkcmVxX2xpc3RgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgSU5JVF9ITElTVF9IRUFEYCBiZWZvcmUgYW55IGVycm9yIGJyYW5jaGVzKS5cbi0gVGhlIGNoYW5nZXMgc29sZWx5IGludm9sdmUgZXJyb3IgY2xlYW51cCBhbmQgZnJlZWluZyBoZWFwIG1lbW9yeSAoYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCkuIEFueSBwb3RlbnRpYWwgYnVncyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29ycnVwdGVkIGxpc3QgdHJhdmVyc2FsKSBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBTTFVCIGRlYnVnLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWM4NDZhM2Q3YjY0Y2VmM2JkMTczOTU2ZTA1Y2E2ZDVhNzMxMDk2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjMxOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmV0bGluay5jIGIvbmV0L25mYy9uZXRsaW5rLmNcbmluZGV4IDBjNTg4MjRjYjE1MGQuLjIyNGJkZmEyZGQwZGMgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uZXRsaW5rLmNcbkBAIC0xMTgxLDcgJiM0MzsxMTgxLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdFx0aWYgKHJjICE9IDApIHtcbiBcdFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBwdXRfbG9jYWw7XG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9saXN0O1xuIFx0XHR9XG4gXG4gXHRcdGlmICghc2RwX2F0dHJzW05GQ19TRFBfQVRUUl9VUkldKVxuQEAgLTEyMDAsNyAmIzQzOzEyMDAsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRzZHJlcSA9IG5mY19sbGNwX2J1aWxkX3NkcmVxX3Rsdih0aWQsIHVyaSwgdXJpX2xlbik7XG4gXHRcdGlmIChzZHJlcSA9PSBOVUxMKSB7XG4gXHRcdFx0cmMgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gcHV0X2xvY2FsO1xuJiM0MztcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbiBcdFx0fVxuIFxuIFx0XHR0bHZzX2xlbiAmIzQzOz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbkBAIC0xMjE1LDYgJiM0MzsxMjE1LDkgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcbiBcbiYjNDM7ZnJlZV9saXN0OlxuJiM0MztcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpO1xuJiM0MztcbiBwdXRfbG9jYWw6XG4gXHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE1bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWM4NDZhM2Q3YjY0Y2VmM2JkMTczOTU2ZTA1Y2E2ZDVhNzMxMDk2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEzOjMxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uZXRsaW5rLmMgYi9uZXQvbmZjL25ldGxpbmsuYwppbmRleCAwYzU4ODI0Y2IxNTBkLi4yMjRiZGZhMmRkMGRjIDEwMDY0NAotLS0gYS9uZXQvbmZjL25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25ldGxpbmsuYwpAQCAtMTE4MSw3ICYjNDM7MTE4MSw3IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIAkJaWYgKHJjICE9IDApIHsKIAkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gcHV0X2xvY2FsOwomIzQzOwkJCWdvdG8gZnJlZV9saXN0OwogCQl9CiAKIAkJaWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pCkBAIC0xMjAwLDcgJiM0MzsxMjAwLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJc2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pOwogCQlpZiAoc2RyZXEgPT0gTlVMTCkgewogCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBwdXRfbG9jYWw7CiYjNDM7CQkJZ290byBmcmVlX2xpc3Q7CiAJCX0KIAogCQl0bHZzX2xlbiAmIzQzOz0gc2RyZXEtJmd0O3Rsdl9sZW47CkBAIC0xMjE1LDYgJiM0MzsxMjE1LDkgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCXJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsICZhbXA7c2RyZXFfbGlzdCwgdGx2c19sZW4pOwogCiYjNDM7ZnJlZV9saXN0OgomIzQzOwluZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCgmYW1wO3NkcmVxX2xpc3QpOwomIzQzOwogcHV0X2xvY2FsOgogCW5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GQyBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBpbiBgbmV0L25mYy9uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZGlmZiBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgYGdvdG9gIHRhcmdldCBmb3IgZXJyb3IgaGFuZGxpbmcgaXMgYmVpbmcgY2hhbmdlZCBmcm9tIGBwdXRfbG9jYWxgIHRvIGBmcmVlX2xpc3RgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVsYXRlZCB0byBmcmVlaW5nIGEgbGlzdCBvZiBTRFAgKFNlcnZpY2UgRGlzY292ZXJ5IFByb3RvY29sKSBUTFZzIChUeXBlLUxlbmd0aC1WYWx1ZSkuCgpOb3csIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMsIEkgc2hvdWxkIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9uZmMvbmV0bGluay5jYCwgYXJvdW5kIGxpbmUgMTE4MS4gSSBuZWVkIHRvIGtub3cgaG93IGBzZHJlcV9saXN0YCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgZW5zdXJlcyB0aGF0IHRoZSBgc2RyZXFfbGlzdGAgaXMgYWx3YXlzIGZyZWVkLCBldmVuIGlmIGFuIGVycm9yIG9jY3VycyBlYXJseSBpbiB0aGUgZnVuY3Rpb24uIEJlZm9yZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNhbGwsIHRoZSBgc2RyZXFfbGlzdGAgd291bGRuJiMzOTt0IGJlIGZyZWVkLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4ga2VybmVsIGNvZGUgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIHB1cnBvc2Ugb2YgdGhlIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3Igc2ltaWxhciBwYXR0ZXJucyBhbmQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0gfHxcbjExNTE6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tORkNfQVRUUl9MTENfU0RQXSlcbjExNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTUzOlx0XG4xMTU0Olx0XHRpZHggPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xuMTE1NTpcdFxuMTE1NjpcdFx0ZGV2ID0gbmZjX2dldF9kZXZpY2UoaWR4KTtcbjExNTc6XHRcdGlmICghZGV2KVxuMTE1ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjExNTk6XHRcbjExNjA6XHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTE2MTpcdFxuMTE2MjpcdFx0aWYgKGRldi1cdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xuMTE2MzpcdFx0XHRyYyA9IC1FTk9MSU5LO1xuMTE2NDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTY1Olx0XHR9XG4xMTY2Olx0XG4xMTY3Olx0XHRsb2NhbCA9IG5mY19sbGNwX2ZpbmRfbG9jYWwoZGV2KTtcbjExNjg6XHRcdGlmICghbG9jYWwpIHtcbjExNjk6XHRcdFx0cmMgPSAtRU5PREVWO1xuMTE3MDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2c2RyZXFfbGlzdCk7XG4xMTc0Olx0XG4xMTc1Olx0XHR0bHZzX2xlbiA9IDA7XG4xMTc2Olx0XG4xMTc3Olx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xuMTE3ODpcdFx0XHRyYyA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzZHBfYXR0cnMsIE5GQ19TRFBfQVRUUl9NQVgsXG4xMTc5Olx0XHRcdFx0XHRcdFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXG4xMTgwOlx0XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbjExODE6XHRcbjExODI6XHRcdFx0aWYgKHJjICE9IDApIHtcbjExODM6XHRcdFx0XHRyYyA9IC1FSU5WQUw7XG4xMTg0Olx0XHRcdFx0Z290byBmcmVlX2xpc3Q7XG4xMTg1Olx0XHRcdH1cbjExODY6XHRcbjExODc6XHRcdFx0aWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pXG4xMTg4Olx0XHRcdFx0Y29udGludWU7XG4xMTg5Olx0XG4xMTkwOlx0XHRcdHVyaV9sZW4gPSBubGFfbGVuKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTkxOlx0XHRcdGlmICh1cmlfbGVuID09IDApXG4xMTkyOlx0XHRcdFx0Y29udGludWU7XG4xMTkzOlx0XG4xMTk0Olx0XHRcdHVyaSA9IG5sYV9kYXRhKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTk1Olx0XHRcdGlmICgqdXJpID09IDApXG4xMTk2Olx0XHRcdFx0Y29udGludWU7XG4xMTk3Olx0XG4xMTk4Olx0XHRcdHRpZCA9IGxvY2FsLVx1MDAzZXNkcmVxX25leHRfdGlkJiM0MzsmIzQzOztcbjExOTk6XHRcbjEyMDA6XHRcdFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xuMTIwMTpcdFx0XHRpZiAoc2RyZXEgPT0gTlVMTCkge1xuMTIwMjpcdFx0XHRcdHJjID0gLUVOT01FTTtcbjEyMDM6XHRcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbjEyMDQ6XHRcdFx0fVxuMTIwNTpcdFxuMTIwNjpcdFx0XHR0bHZzX2xlbiAmIzQzOz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbjEyMDc6XHRcbjEyMDg6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSwgXHUwMDI2c2RyZXFfbGlzdCk7XG4xMjA5Olx0XHR9XG4xMjEwOlx0XG4xMjExOlx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2c2RyZXFfbGlzdCkpIHtcbjEyMTI6XHRcdFx0cmMgPSAtRUlOVkFMO1xuMTIxMzpcdFx0XHRnb3RvIHB1dF9sb2NhbDtcbjEyMTQ6XHRcdH1cbjEyMTU6XHRcbjEyMTY6XHRcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcbjEyMTc6XHRcbjEyMTg6XHRmcmVlX2xpc3Q6XG4xMjE5Olx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KTtcbjEyMjA6XHRcbjEyMjE6XHRwdXRfbG9jYWw6XG4xMjIyOlx0XHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuMTIyMzpcdFxuMTIyNDpcdGV4aXQ6XG4xMjI1Olx0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTIyNjpcdFxuMTIyNzpcdFx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbjEyMjg6XHRcbjEyMjk6XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTY5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTExDIFNEUkVRIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBmdW5jdGlvbiwgcHJlLXBhdGNoLCBpdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgZXhpc3RzLiBTcGVjaWZpY2FsbHksIGlmIGBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWRgIChsaW5lIDExODIpIG9yIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIChsaW5lIDEyMDEpIGVuY291bnRlcnMgYW4gZXJyb3IsIHRoZSBjb2RlIGp1bXBzIGRpcmVjdGx5IHRvIGBwdXRfbG9jYWxgLiBUaGUgcHJvYmxlbT8gQW55IGVsZW1lbnRzIGFscmVhZHkgYXBwZW5kZWQgdG8gYHNkcmVxX2xpc3RgIHdvdWxkIGJlIG9ycGhhbmVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4KCkhhbmcgb24uLi4gdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgSSBuZWVkIHRvIGNvbnNpZGVyLiBMb29rIGF0IHRoZSBwb3N0LWxvb3Agc3RydWN0dXJlOgoKYGBgYwoJcmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgJmFtcDtzZHJlcV9saXN0LCB0bHZzX2xlbik7CgpwdXRfbG9jYWw6CgluZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpOwpgYGAKClRoZSBjYWxsIHRvIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgY29tZXMgKmJlZm9yZSogYHB1dF9sb2NhbGAuIE5vdywgSSYjMzk7bSBxdWVzdGlvbmluZyB3aGV0aGVyIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgYWN0dWFsbHkgY29uc3VtZXMgdGhlIGBzZHJlcV9saXN0YCBvciBub3QuIElzIHRoZSBsaXN0JiMzOTtzIGRhdGEgYmVpbmcgcHJvcGVybHkgaGFuZGxlZCBhZnRlciB0aGUgY2FsbD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlIGxpc3QgaXMgYmVpbmcgZnJlZWQsIG1vdmVkLCBvciBjb3BpZWQgdGhlcmUuIEkgY2Fubm90IHZlcmlmeSB0aGlzIHVubGVzcyBJIGNoZWNrIHRoZSBmdW5jdGlvbiBib2R5LiBUaGUgbGVhaywgb3IgbGFjayBvZiBsZWFrLCBkZXBlbmRzIG9uIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3VyLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2Ugb2YgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCByaWdodCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3NlbmRfc25sX3NkcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTIzOD1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTIzOS1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQwOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwLmgtMjQxLVx0XHRcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTY5PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Mi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5MzppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5NC1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTEyMTUtXG5uZXQvbmZjL25ldGxpbmsuYzoxMjE2Olx0cmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xubmV0L25mYy9uZXRsaW5rLmMtMTIxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjIwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNgOgoKKipBbmFseXppbmcgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCoqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgLiBMZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIHNpdHRpbmcgdGhlcmUgaW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwgZ2l2ZW4gdGhlIG5hbWUsIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgc2VuZGluZyBvZiBhICYjMzQ7U2VydmljZSBOYW1lIExvb2t1cCAoU05MKSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSkmIzM0OyBtZXNzYWdlIHdpdGhpbiB0aGUgTExDUCAoTGluayBMYXllciBDb250cm9sIFByb3RvY29sKSBjb250ZXh0LiBMTENQLCBhcyBJIGtub3cgaXQsIGlzIHRoYXQgY3J1Y2lhbCBsYXllciBzaXR0aW5nIGFib3ZlIE5GQyBhbmQgb2ZmZXJpbmcgY29ubmVjdGlvbi1vcmllbnRlZCBjb21tdW5pY2F0aW9uLgoKVGhlcmVmb3JlLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBmb2xsb3dpbmcgcG9pbnRzLCBhcyB0aGlzIGtpbmQgb2YgcmVxdWVzdCBpcyB0aGUga2V5IHRvIHNlcnZpY2UgZGlzY292ZXJ5OgoqICAgKipQdXJwb3NlOioqIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgYWJvdXQgc2VhcmNoaW5nIGZvciBhdmFpbGFibGUgTkZDIHNlcnZpY2VzIG9uIGEgcmVtb3RlIGRldmljZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBTZXJ2aWNlIE5hbWUgTG9va3VwIHByb2Nlc3MuCiogICAqKkxMQ1AgQ29udGV4dDoqKiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmZhY2VzIGRpcmVjdGx5IHdpdGggdGhlIExMQ1AgcHJvdG9jb2wgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgZm9ybWF0cyBhbmQgdHJhbnNtaXRzIHRoZSBTRFJFUSBtZXNzYWdlIGF0IHRoZSBMTENQIGxldmVsLiBQcm9iYWJseSB1c2luZyBzcGVjaWZpYyBMTENQIHByaW1pdGl2ZXMvQVBJcywgbm90IHJhdyBORkMgc2lnbmFsaW5nLgoqICAgKipEYXRhIFN0cnVjdHVyZToqKiBJJiMzOTttIGd1ZXNzaW5nIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGFuIFNEUkVRLCBob2xkaW5nIHRoZSBzZXJ2aWNlIG5hbWUgdG8gYmUgbG9va2VkIHVwIChvciBwZXJoYXBzIGEgd2lsZGNhcmQgaW5kaWNhdGluZyBhIGJyb2FkIHNlYXJjaCkuIFRoZSBmdW5jdGlvbiBtaWdodCBwb3B1bGF0ZSB0aGlzIHN0cnVjdHVyZSBhbmQgdGhlbiBwYXNzIGl0IHRvIHRoZSBsb3dlciBsYXllcnMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFNlbmRpbmcgYSByZXF1ZXN0IGlzIG9uZSB0aGluZywgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBlcnJvcnMgYW5kIHRpbWVvdXRzIGlzIGFub3RoZXIuIEkmIzM5O2xsIGJlIGN1cmlvdXMgdG8gc2VlIGhvdyBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGhhbmRsZXMgdGhpbmdzIGlmIHRoZSBjb21tdW5pY2F0aW9uIGZhaWxzLCBvciBpZiB0aGVyZSYjMzk7cyBubyByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlLiBBcmUgdGhlcmUgcmV0cnkgbWVjaGFuaXNtcz8gVGltZW91dHM/IEVycm9yIGNvZGVzIHBhc3NlZCBiYWNrPwoqICAgKipBc3luY2hyb25vdXMgTmF0dXJlOioqIExMQ1AgYW5kIE5GQyBhcmUgb2Z0ZW4gYXN5bmNocm9ub3VzLiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGtpY2sgb2ZmIHRoZSBTRFJFUSB0cmFuc21pc3Npb24gYW5kIHRoZW4gcmV0dXJuLCB3aXRoIGEgY2FsbGJhY2sgb3IgY29tcGxldGlvbiBoYW5kbGVyIGJlaW5nIHVzZWQgdG8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgbGF0ZXIuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIHByb3RlY3Qgc2hhcmVkIHJlc291cmNlcywgaWYgYW55LgoqICAgKipJbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmdW5jdGlvbnM6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gb3RoZXIgTExDUCBmdW5jdGlvbnMgb3IgTkZDIHN0YWNrIGNvbXBvbmVudHM/IERvZXMgaXQgY2FsbCBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIGBsbGNwX2NvbW1hbmRzLmNgIG9yIGVsc2V3aGVyZSB0byBjb25zdHJ1Y3QgdGhlIFNEUkVRPyBEb2VzIGl0IGNhbGwgYSBmdW5jdGlvbiB0byByZWNlaXZlIHRoZSBTRFJFUz8KCkxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGlzIGZ1bmN0aW9uLiBJIGFtIHJlYWR5IHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3BfY29tbWFuZHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0XHRyZXR1cm4gMDtcbiA1OTE6XHR9XG4gNTkyOlx0XG4gNTkzOlx0aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG4gNTk0Olx0XHRcdFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKVxuIDU5NTpcdHtcbiA1OTY6XHRcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHJlcTtcbiA1OTc6XHRcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuIDU5ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1OTk6XHRcbiA2MDA6XHRcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xuIDYwMTpcdFx0aWYgKElTX0VSUihza2IpKVxuIDYwMjpcdFx0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuIDYwMzpcdFxuIDYwNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV9sb2NrKTtcbiA2MDU6XHRcbiA2MDY6XHRcdGlmIChobGlzdF9lbXB0eShcdTAwMjZsb2NhbC1cdTAwM2VwZW5kaW5nX3NkcmVxcykpXG4gNjA3Olx0XHRcdG1vZF90aW1lcihcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV90aW1lcixcbiA2MDg6XHRcdFx0XHQgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcygzICogbG9jYWwtXHUwMDNlcmVtb3RlX2x0bykpO1xuIDYwOTpcdFxuIDYxMDpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZHJlcSwgbiwgdGx2X2xpc3QsIG5vZGUpIHtcbiA2MTE6XHRcdFx0cHJfZGVidWcoXCYjMzQ7dGlkICVkIGZvciAlc1xcblwmIzM0Oywgc2RyZXEtXHUwMDNldGlkLCBzZHJlcS1cdTAwM2V1cmkpO1xuIDYxMjpcdFxuIDYxMzpcdFx0XHRza2JfcHV0X2RhdGEoc2tiLCBzZHJlcS1cdTAwM2V0bHYsIHNkcmVxLVx1MDAzZXRsdl9sZW4pO1xuIDYxNDpcdFxuIDYxNTpcdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSk7XG4gNjE2Olx0XG4gNjE3Olx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnNkcmVxLVx1MDAzZW5vZGUsIFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcbiA2MTg6XHRcdH1cbiA2MTk6XHRcbiA2MjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV9sb2NrKTtcbiA2MjE6XHRcbiA2MjI6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmxvY2FsLVx1MDAzZXR4X3F1ZXVlLCBza2IpO1xuIDYyMzpcdFxuIDYyNDpcdFx0cmV0dXJuIDA7XG4gNjI1Olx0fVxuIDYyNjpcdFxuIDYyNzpcdGludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbilcbiA2Mjg6XHR7XG4gNjI5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSkgVHJhbnNtaXNzaW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBmdW5jdGlvbi4gSG1tLCB0aGUgZmlyc3Qgc3RlcCBpcyBhbGxvY2F0aW5nIGEgc29ja2V0IGJ1ZmZlciAoYHNrYmApIHVzaW5nIGBuZmNfbGxjcF9hbGxvY2F0ZV9zbmxgLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIGFuIGVycm9yIHBvaW50ZXIsIGBQVFJfRVJSKHNrYilgLiBJbXBvcnRhbnRseSwgaW4gdGhpcyBmYWlsdXJlIHNjZW5hcmlvLCB0aGUgYHNkcmVxX2xpc3RgIGlzbiYjMzk7dCB0b3VjaGVkLCByZW1haW5pbmcgYXMgaXQgd2FzLiBIb3dldmVyLCBpZiB0aGUgYWxsb2NhdGlvbiAqc3VjY2VlZHMqLCB0aGUgY29kZSBtb3ZlcyB0aGUgZWxlbWVudHMgZnJvbSBgc2RyZXFfbGlzdGAgdG8gYGxvY2FsLSZndDtwZW5kaW5nX3NkcmVxc2AuIFRoaXMgbWVhbnMgYHNkcmVxX2xpc3RgIGlzIG5vdyBlbXB0eS4gR29vZC4gVGhlIGBzZHJlcV9sb2NrYCBtdXRleCBpcyBhbHNvIGFjcXVpcmVkLCBhbmQgdGhlIGBzZHJlcV90aW1lcmAgaXMgc3RhcnRlZCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgcGVuZGluZyBTRFJFUXMsIGFuZCBlYWNoIFNEUkVRIGlzIHByb2Nlc3NlZC4KCk5vdywgbG9va2luZyBhdCBgbmZjX2dlbmxfbGxjX3NkcmVxYCwgaXQgY2FsbHMgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCB3aXRoIGBzZHJlcV9saXN0YC4gVGhlbiwgYWZ0ZXIgdGhlIGNhbGwsIGl0IGhpdHMgYGZyZWVfbGlzdDpgIGFuZCBjYWxscyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtzZHJlcV9saXN0KWAuCgpIb2xkIG9uLiBXZSBqdXN0IGVzdGFibGlzaGVkIHRoYXQgdGhlIGBzZHJlcV9saXN0YCBpcyAqZW1wdHkqIGFmdGVyIGEgKnN1Y2Nlc3NmdWwqIHRyYW5zbWlzc2lvbi4gU28sIHdoYXQgaXMgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBkb2luZz8gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgbGllcywgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgY2xlYW51cCBtaWdodCBiZS4gSXQmIzM5O3MgaW1wZXJhdGl2ZSB0aGF0IEkgdmVyaWZ5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBvciBtZW1vcnkgY29ycnVwdGlvbi4gSSBtdXN0IGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgdGhlIGxpc3QgaXMgdHJ1bHkgZnJlZWQsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgU0RSRVEgbGlmZWN5Y2xlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3AuaD0yMzI9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xubmV0L25mYy9sbGNwLmgtMjM0LXZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE4MS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTcxLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV90aW1lb3V0X3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZsb2NhbC1cdTAwM2VwZW5kaW5nX3NkcmVxcyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3My19XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy00MjMtXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzZHJlc19saXN0KTtcbm5ldC9uZmMvbmV0bGluay5jLTQyNS1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYz0xMTM3PXN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XG5uZXQvbmZjL25ldGxpbmsuYzoxMjE5Olx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7XG5uZXQvbmZjL25ldGxpbmsuYy0xMjIwLVxuLS1cbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL25mYy5oOjU5OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpO1xubmV0L25mYy9uZmMuaC02MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTExMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBmdW5jdGlvbi4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AgYW5kIGhhdmUgYSBsb29rLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgZmFpcmx5IHN0YW5kYXJkIG1lbW9yeSBkZWFsbG9jYXRpb24gcm91dGluZSwgcHJlc3VtYWJseSBjbGVhbmluZyB1cCBhIGxpbmtlZCBsaXN0IG9yIGFuIGFycmF5IG9mIHNvbWUgc29ydCByZWxhdGVkIHRvIFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIFRMVnMgKFR5cGUtTGVuZ3RoLVZhbHVlKS4gS25vd2luZyB0aGUgY29udGV4dCBpcyBhbHdheXMga2V5IHdpdGggdGhlc2UgTkZDIGltcGxlbWVudGF0aW9ucywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIGJvdW5kYXJ5IGNoZWNrcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIExldCYjMzk7cyBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgdGhlIGNsZWFudXAsIGVzcGVjaWFsbHkgaW4gcG90ZW50aWFsbHkgZXJyb3ItcHJvbmUgc2NlbmFyaW9zLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eSBncml0dHkgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb21tYW5kcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzQ6XHR2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxuIDE3NTpcdHtcbiAxNzY6XHRcdGtmcmVlKHNkcC1cdTAwM2V0bHYpO1xuIDE3NzpcdFx0a2ZyZWUoc2RwKTtcbiAxNzg6XHR9XG4gMTc5Olx0XG4gMTgwOlx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbiAxODE6XHR7XG4gMTgyOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xuIDE4MzpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gMTg0Olx0XG4gMTg1Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcCwgbiwgaGVhZCwgbm9kZSkge1xuIDE4NjpcdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RwLVx1MDAzZW5vZGUpO1xuIDE4NzpcdFxuIDE4ODpcdFx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHYoc2RwKTtcbiAxODk6XHRcdH1cbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0aW50IG5mY19sbGNwX3BhcnNlX2diX3RsdihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIDE5MzpcdFx0XHRcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pXG4gMTk0Olx0e1xuIDE5NTpcdFx0Y29uc3QgdTggKnRsdiA9IHRsdl9hcnJheTtcbiAxOTY6XHRcdHU4IHR5cGUsIGxlbmd0aDtcbiAxOTc6XHRcdHUxNiBvZmZzZXQgPSAwO1xuIDE5ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTExDUCBTRFAgUmVxdWVzdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtzZHJlcV9saXN0KWAgZnVuY3Rpb24uIEl0JiMzOTtzIHN1cHBvc2VkIHRvIGNsZWFuIHVwIHRoZSBgc2RyZXFfbGlzdGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZhaWxzLCB3aGV0aGVyIGR1ZSB0byBhbiBhbGxvY2F0aW9uIGVycm9yIG9yIHNvbWV0aGluZyB3aXRoaW4gdGhlIGxvb3AgaXRzZWxmICh0aGF0IGBnb3RvIGZyZWVfbGlzdGApLCBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgYW55IHJlbWFpbmluZyBpdGVtcyBpbiBgc2RyZXFfbGlzdGAuICBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQsIG9mIGNvdXJzZSwgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCAqc3VjY2VlZHMqLCB0aGUgYHNkcmVxX2xpc3RgIHNob3VsZCBiZSBlbXB0eSwgc28gdGhlIGBmcmVlX3NkcGAgY2FsbCBpcywgZWZmZWN0aXZlbHksIGEgbm8tb3AuIFN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkJ1dCB0aGVuLCBob2xkIG9uLi4uIGxpbmUgMTIxMS4gIEl0IGNoZWNrcyBpZiBgaGxpc3RfZW1wdHkoJmFtcDtzZHJlcV9saXN0KWAgYW5kLCBpZiBzbywgcmV0dXJucyBhbiBgRUlOVkFMYCAqYW5kKiBqdW1wcyB0byBgcHV0X2xvY2FsYC4gSG1tLCBzbyBpZiBgc2RyZXFfbGlzdGAgaXMgZW1wdHksIGdvaW5nIHRvIGBwdXRfbG9jYWxgIG9yIGBmcmVlX2xpc3RgIGlzIHRoZSBzYW1lIHRoaW5nLCBiZWNhdXNlIGl0JiMzOTtzIGFscmVhZHkgZW1wdHkhIEl0JiMzOTtzIGEgcmVkdW5kYW50IGNoZWNrLCB3aGljaCAqY291bGQqIGJlIGEgYnVnIGJ1dCBwcm9iYWJseSBpc24mIzM5O3QgYSAqc2VyaW91cyogb25lLiBJdCBkb2VzIHJhaXNlIGEgcXVlc3Rpb24gdGhvdWdoLgoKTm93LCBsZXQmIzM5O3MgYmFjayB1cC4gV2hlcmUgZG9lcyBgbmZjX2dlbmxfbGxjX3NkcmVxYCBldmVuIGdldCBjYWxsZWQ/ICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBDYW4gSSB0cmlnZ2VyIGl0IGVhc2lseSBpbiBhIHN5emthbGxlciBzZXR1cCBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChRRU1VL0dDRSk/IFdhaXQsIHRoYXQmIzM5O3MgcmlnaHQuLi4gTkZDIGhhcyB2aXJ0dWFsIGRldmljZXMsIGFuZCBJIGJlbGlldmUgbmV0bGluayBjb21tYW5kcy4gQ2FuIG5ldGxpbmsgTkZDIGNvbW1hbmRzIGJlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2U/IFRoYXQmIzM5O3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQuIEJldHRlciBsb29rIGF0IGBuZXQvbmZjL25ldGxpbmsuY2AgYW5kIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZjX2dlbmxfbGxjX3NkcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYz0xMDY4PXN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NldF9wYXJhbXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xMTM2LVxubmV0L25mYy9uZXRsaW5rLmM6MTEzNzpzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L25mYy9uZXRsaW5rLmMtMTEzOC17XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIG5mY19nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3NjMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC9uZmMvbmV0bGluay5jOjE3NjQ6XHRcdC5kb2l0ID0gbmZjX2dlbmxfbGxjX3NkcmVxLFxubmV0L25mYy9uZXRsaW5rLmMtMTc2NS1cdFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIGludG8gTkZDIEdlbmVyaWMgTmV0bGluayBhbmQgU3l6a2FsbGVyKioKCk9rYXksIHNvIGBuZmNfZ2VubF9sbGNfc2RyZXFgIC0gdGhhdCYjMzk7cyB0aGUgaGFuZGxlciBmb3IgdGhlIGBORkNfQ01EX0xMQ19TRFJFUWAgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSB3b25kZXIgaWYgU3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlIE5GQyBuZXRsaW5rIGludGVyZmFjZT8gVGhhdCYjMzk7cyBhIGdvb2QgcXVlc3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHN1cHBvcnQgZnJvbSBTeXprYWxsZXIgYWxyZWFkeSwgb3IgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyB2aXJ0dWFsIE5GQyBkZXZpY2VzLiBPciwgcGVyaGFwcywgZ2VuZXJpYyBuZXRsaW5rIGNhbiBiZSBzZW50IGV2ZW4gd2l0aG91dCBhbnkgYWN0dWFsIGhhcmR3YXJlIG9yIHRocm91Z2ggc29tZSB2aXJ0dWFsIHNldHVwPwoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRldmljZSBkcml2ZXJzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL25mY2AgYW5kIGBuZXQvbmZjYCBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIGFueSBraW5kIG9mIE5GQyBzaW11bGF0b3IsIHZpcnR1YWwgZGV2aWNlLCBvciBldmVuIGEgVVNCIGRvbmdsZSBleGlzdC4gRmluZGluZyBhIHZpcnR1YWwgZGV2aWNlIHdvdWxkIGJlIGlkZWFsIGZvciByZXByb2R1Y2libGUgZnV6emluZy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgbGVhZCBtZSB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19zaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjQ1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTkZDIGRyaXZlciBzaXR1YXRpb24gd2l0aGluIHRoaXMgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiB0aGUgYGRyaXZlcnMvbmZjYCBkaXJlY3RvcnkuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYXZhaWxhYmxlIGJ1aWxkaW5nIGJsb2NrcyBhcmUsIGhvdyBtYW55IGRpZmZlcmVudCBjaGlwc2V0cyBhcmUgc3VwcG9ydGVkLCBhbmQgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgc29mdHdhcmUgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmlsZXM6IGxpa2VseSB0aGUgY29yZSBORkMgZHJpdmVyIGVudHJ5IHBvaW50cywgZGV2aWNlLXNwZWNpZmljIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgKHRob3NlIHdpbGwgYmUgdGhlIG9uZXMgd2l0aCB0aGUgY2hpcCBuYW1lcyBpbiB0aGVpciBmaWxlIG5hbWVzKSwgYW55IHJlbGV2YW50IGZyYW1ld29yayBjb2RlLCBhbmQgcG90ZW50aWFsbHkgYW55IGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gaW5mZXIgd2hhdCBraW5kIG9mIGFyY2hpdGVjdHVyZSBoYXMgYmVlbiB1c2VkLCB3aGV0aGVyIGl0IHVzZXMgYSB0eXBpY2FsIGxheWVyZWQgbW9kZWwgKE5GQyBjb3JlLCBjb250cm9sbGVyIGRyaXZlcnMsIHNwZWNpZmljIGNoaXAgZHJpdmVycyksIG9yIGlmIHRoZXkmIzM5O3ZlIHRha2VuIGEgbW9yZSBtb25vbGl0aGljIGFwcHJvYWNoLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgY29tbW9uYWxpdGllcyBiZXR3ZWVuIGNoaXAgZHJpdmVycywgYW5kIHBlcmhhcHMgd2hpY2ggaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZC4gVWx0aW1hdGVseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHVuZGVyc3RhbmRpbmcgc28gSSBjYW4gZGl2ZSBkZWVwZXIgaW50byBhbnl0aGluZyB0aGF0IGNhdGNoZXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O21laV9waHkuYyYjMzQ7LAogICAgJiMzNDttZWlfcGh5LmgmIzM0OywKICAgICYjMzQ7bmZjc2ltLmMmIzM0OywKICAgICYjMzQ7cG9ydDEwMC5jJiMzNDssCiAgICAmIzM0O3RyZjc5NzBhLmMmIzM0OywKICAgICYjMzQ7dmlydHVhbF9uY2lkZXYuYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDtmZHAmIzM0OywKICAgICYjMzQ7bWljcm9yZWFkJiMzNDssCiAgICAmIzM0O25mY21ydmwmIzM0OywKICAgICYjMzQ7bnhwLW5jaSYjMzQ7LAogICAgJiMzNDtwbjUzMyYjMzQ7LAogICAgJiMzNDtwbjU0NCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41JiMzNDssCiAgICAmIzM0O3N0LW5jaSYjMzQ7LAogICAgJiMzNDtzdDIxbmZjYSYjMzQ7LAogICAgJiMzNDtzdDk1aGYmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GQyBTdWJzeXN0ZW0gZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBORkMgc3Vic3lzdGVtIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRvIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuIEkgc2VlIGEgZmV3IGtleSBwaWVjZXM6IGBuZmNzaW0uY2AsIGB2aXJ0dWFsX25jaWRldi5jYCwgYW5kIFVTQiBkcml2ZXJzIGxpa2UgYHBvcnQxMDAuY2AgYW5kIGBwbjUzMy91c2IuY2AuIGB2aXJ0dWFsX25jaWRldi5jYCBpcyBhIHZpcnR1YWwgTkNJIGRldmljZSwgYW5kIGBuZmNzaW0uY2AgaXMgYW4gTkZDIHNpbXVsYXRvciwgaW50ZXJlc3RpbmcuIFRoZW4gdGhlcmUmIzM5O3Mgc3l6a2FsbGVyIHdpdGggcHNldWRvLXN5c2NhbGxzIGZvciBORkMgbmV0bGluaywgcmF3LWdhZGdldCBVU0IgTkZDLCBldGMuIFRoYXQgZ2l2ZXMgbWUgYSBoZWFkIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLgoKTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgZmlndXJpbmcgb3V0IGlmIEkgY2FuIHRyaWdnZXIgYG5mY19nZW5sX2xsY19zZHJlcWAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHNhdGlzZmllZC4gRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIGdlbmVyaWMgbmV0bGluayBzb2NrZXQgc2VuZGluZyBgTkZDX0NNRF9MTENfU0RSRVFgIGRpcmVjdGx5IHJlYWNoZXMgdGhpcyBmdW5jdGlvbi4gT2theSwgdGhhdCYjMzk7cyBwcm9taXNpbmcuCgpOb3csIHRvIGFjdHVhbGx5IGdldCBpbnRvIHRoYXQgbG9vcCwgYG5mY19nZXRfZGV2aWNlKGlkeClgIG5lZWRzIHRvIHJldHVybiBhIHZhbGlkIE5GQyBkZXZpY2UuIFRoZSBkZXZpY2UmIzM5O3MgYGRlcF9saW5rX3VwYCBmbGFnIG5lZWRzIHRvIGJlIHRydWUsIGFuZCBgbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpYCBoYXMgdG8gcmV0dXJuIGEgYGxvY2FsYCBwb2ludGVyLiBUaGUgYGlkeGAgY29tZXMgZnJvbSB0aGUgbmV0bGluayBtZXNzYWdlLCBhbmQgYG5mY19nZXRfZGV2aWNlYCBtdXN0IGZpbmQgc29tZXRoaW5nIGJhc2VkIG9uIHRoYXQgaW5kZXguCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyBob3cgZG9lcyBgZGVwX2xpbmtfdXBgIGdldCBzZXQgdG8gdHJ1ZT8gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlci4gSSBuZWVkIHRvIGdyZXAgZm9yIGBkZXBfbGlua191cGAgaW4gYm90aCBgbmV0L25mY2AgYW5kIGBkcml2ZXJzL25mY2AgdG8gZmlndXJlIG91dCB3aGF0IHNldHMgdGhpcyBmbGFnLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBfbGlua191cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0PTY0PWVudHJ5IHBvaW50czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdC03Mi1cdFx0XHQgICB1MzIgaW1fcHJvdG9jb2xzLCB1MzIgdG1fcHJvdG9jb2xzKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9uZmMvbmZjLWhjaS5yc3Q6NzM6XHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdC03NC1cdFx0XHQgICB1OCBjb21tX21vZGUsIHU4ICpnYiwgc2l6ZV90IGdiX2xlbik7XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdC05Ny0gIG1lY2hhbmlzbSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgSENJIHN0YW5kYXJkLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL25mYy9uZmMtaGNpLnJzdDo5ODotIGRlcF9saW5rX3VwKCkgaXMgY2FsbGVkIGFmdGVyIGEgcDJwIHRhcmdldCBoYXMgYmVlbiBkZXRlY3RlZCwgdG8gZmluaXNoXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTk5LSAgdGhlIHAycCBjb25uZWN0aW9uIHNldHVwIHdpdGggaGFyZHdhcmUgcGFyYW1ldGVycyB0aGF0IG5lZWQgdG8gYmUgcGFzc2VkIGJhY2tcbi0tXG5kcml2ZXJzL25mYy9taWNyb3JlYWQvbWljcm9yZWFkLmM9MjI0PXN0YXRpYyBpbnQgbWljcm9yZWFkX3N0YXJ0X3BvbGwoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LFxuLS1cbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy0yOTktXG5kcml2ZXJzL25mYy9taWNyb3JlYWQvbWljcm9yZWFkLmM6MzAwOnN0YXRpYyBpbnQgbWljcm9yZWFkX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldixcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy0zMDEtXHRcdFx0XHRzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LCB1OCBjb21tX21vZGUsXG4tLVxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jPTY1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIG1pY3JvcmVhZF9oY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy02NTktXHQuc3RhcnRfcG9sbCA9IG1pY3JvcmVhZF9zdGFydF9wb2xsLFxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jOjY2MDpcdC5kZXBfbGlua191cCA9IG1pY3JvcmVhZF9kZXBfbGlua191cCxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy02NjEtXHQuZGVwX2xpbmtfZG93biA9IG1pY3JvcmVhZF9kZXBfbGlua19kb3duLFxuLS1cbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM9MTg3OD1zdGF0aWMgdm9pZCBwbjUzM19kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldixcbi0tXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTE5MDctXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jOjE5MDg6c3RhdGljIGludCBwbjUzM19pbl9kZXBfbGlua191cF9jb21wbGV0ZShzdHJ1Y3QgcG41MzMgKmRldiwgdm9pZCAqYXJnLFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0xOTA5LVx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXG4tLVxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYz0xOTcxPXN0YXRpYyBpbnQgcG41MzNfcmZfZmllbGQoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHU4IHJmKTtcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MTk3MjpzdGF0aWMgaW50IHBuNTMzX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0xOTczLVx0XHRcdCAgICAgdTggY29tbV9tb2RlLCB1OCAqZ2IsIHNpemVfdCBnYl9sZW4pXG4tLVxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yMDQzLVx0cmMgPSBwbjUzM19zZW5kX2NtZF9hc3luYyhkZXYsIFBONTMzX0NNRF9JTl9KVU1QX0ZPUl9ERVAsIHNrYixcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MjA0NDpcdFx0XHRcdCAgcG41MzNfaW5fZGVwX2xpbmtfdXBfY29tcGxldGUsIGFyZyk7XG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTIwNDUtXG4tLVxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYz0yNjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBwbjUzM19uZmNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMjY0Mi1cdC5kZXZfZG93biA9IHBuNTMzX2Rldl9kb3duLFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYzoyNjQzOlx0LmRlcF9saW5rX3VwID0gcG41MzNfZGVwX2xpbmtfdXAsXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTI2NDQtXHQuZGVwX2xpbmtfZG93biA9IHBuNTMzX2RlcF9saW5rX2Rvd24sXG4tLVxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYz0zMzI9c3RhdGljIGludCBwbjU0NF9oY2lfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXG4tLVxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy00NDItXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jOjQ0MzpzdGF0aWMgaW50IHBuNTQ0X2hjaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jLTQ0NC1cdFx0XHRcdHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsIHU4IGNvbW1fbW9kZSxcbi0tXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jPTg4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIHBuNTQ0X2hjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy04ODgtXHQuc3RhcnRfcG9sbCA9IHBuNTQ0X2hjaV9zdGFydF9wb2xsLFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYzo4ODk6XHQuZGVwX2xpbmtfdXAgPSBwbjU0NF9oY2lfZGVwX2xpbmtfdXAsXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jLTg5MC1cdC5kZXBfbGlua19kb3duID0gcG41NDRfaGNpX2RlcF9saW5rX2Rvd24sXG4tLVxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jPTU2OD1zdGF0aWMgaW50IHN0MjFuZmNhX2dldF9pc28xNTY5M19pbnZlbnRvcnkoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LFxuLS1cbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy01OTUtXG5kcml2ZXJzL25mYy9zdDIxbmZjYS9jb3JlLmM6NTk2OnN0YXRpYyBpbnQgc3QyMW5mY2FfaGNpX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldixcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy01OTctXHRcdFx0XHQgICAgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxuLS1cbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYz05MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfaGNpX29wcyBzdDIxbmZjYV9oY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy05MjEtXHQuc3RvcF9wb2xsID0gc3QyMW5mY2FfaGNpX3N0b3BfcG9sbCxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYzo5MjI6XHQuZGVwX2xpbmtfdXAgPSBzdDIxbmZjYV9oY2lfZGVwX2xpbmtfdXAsXG5kcml2ZXJzL25mYy9zdDIxbmZjYS9jb3JlLmMtOTIzLVx0LmRlcF9saW5rX2Rvd24gPSBzdDIxbmZjYV9oY2lfZGVwX2xpbmtfZG93bixcbi0tXG5pbmNsdWRlL25ldC9uZmMvaGNpLmg9MTU9c3RydWN0IG5mY19oY2lfb3BzIHtcbi0tXG5pbmNsdWRlL25ldC9uZmMvaGNpLmgtMjgtXHR2b2lkICgqc3RvcF9wb2xsKSAoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KTtcbmluY2x1ZGUvbmV0L25mYy9oY2kuaDoyOTpcdGludCAoKmRlcF9saW5rX3VwKShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG5pbmNsdWRlL25ldC9uZmMvaGNpLmgtMzAtXHRcdFx0ICAgdTggY29tbV9tb2RlLCB1OCAqZ2IsIHNpemVfdCBnYl9sZW4pO1xuLS1cbmluY2x1ZGUvbmV0L25mYy9uZmMuaD00OD1zdHJ1Y3QgbmZjX29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTUzLVx0dm9pZCAoKnN0b3BfcG9sbCkoc3RydWN0IG5mY19kZXYgKmRldik7XG5pbmNsdWRlL25ldC9uZmMvbmZjLmg6NTQ6XHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbmluY2x1ZGUvbmV0L25mYy9uZmMuaC01NS1cdFx0XHQgICB1OCBjb21tX21vZGUsIHU4ICpnYiwgc2l6ZV90IGdiX2xlbik7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25mYy5oPTE2Nz1zdHJ1Y3QgbmZjX2RldiB7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTE3OC1cdHN0cnVjdCBuZmNfdGFyZ2V0ICphY3RpdmVfdGFyZ2V0O1xuaW5jbHVkZS9uZXQvbmZjL25mYy5oOjE3OTpcdGJvb2wgZGVwX2xpbmtfdXA7XG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtMTgwLVx0c3RydWN0IG5mY19nZW5sX2RhdGEgZ2VubF9kYXRhO1xuLS1cbm5ldC9uZmMvY29yZS5jPTI2OD1zdGF0aWMgc3RydWN0IG5mY190YXJnZXQgKm5mY19maW5kX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeClcbi0tXG5uZXQvbmZjL2NvcmUuYy0yNzktXG5uZXQvbmZjL2NvcmUuYzoyODA6aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2luZGV4LCB1OCBjb21tX21vZGUpXG5uZXQvbmZjL2NvcmUuYy0yODEte1xuLS1cbm5ldC9uZmMvY29yZS5jLTI4OC1cbm5ldC9uZmMvY29yZS5jOjI4OTpcdGlmICghZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXBfbGlua191cClcbm5ldC9uZmMvY29yZS5jLTI5MC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZmMvY29yZS5jLTI5OC1cbm5ldC9uZmMvY29yZS5jOjI5OTpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gdHJ1ZSkge1xubmV0L25mYy9jb3JlLmMtMzAwLVx0XHRyYyA9IC1FQUxSRUFEWTtcbi0tXG5uZXQvbmZjL2NvcmUuYy0zMTUtXG5uZXQvbmZjL2NvcmUuYzozMTY6XHRyYyA9IGRldi1cdTAwM2VvcHMtXHUwMDNlZGVwX2xpbmtfdXAoZGV2LCB0YXJnZXQsIGNvbW1fbW9kZSwgZ2IsIGdiX2xlbik7XG5uZXQvbmZjL2NvcmUuYy0zMTctXHRpZiAoIXJjKSB7XG4tLVxubmV0L25mYy9jb3JlLmM9MzI3PWludCBuZmNfZGVwX2xpbmtfZG93bihzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuLS1cbm5ldC9uZmMvY29yZS5jLTM0Mi1cbm5ldC9uZmMvY29yZS5jOjM0MzpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvY29yZS5jLTM0NC1cdFx0cmMgPSAtRUFMUkVBRFk7XG4tLVxubmV0L25mYy9jb3JlLmMtMzQ5LVx0aWYgKCFyYykge1xubmV0L25mYy9jb3JlLmM6MzUwOlx0XHRkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPSBmYWxzZTtcbm5ldC9uZmMvY29yZS5jLTM1MS1cdFx0ZGV2LVx1MDAzZWFjdGl2ZV90YXJnZXQgPSBOVUxMO1xuLS1cbm5ldC9uZmMvY29yZS5jPTM2Mz1pbnQgbmZjX2RlcF9saW5rX2lzX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxuLS1cbm5ldC9uZmMvY29yZS5jLTM2NS17XG5uZXQvbmZjL2NvcmUuYzozNjY6XHRkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPSB0cnVlO1xubmV0L25mYy9jb3JlLmMtMzY3LVxuLS1cbm5ldC9uZmMvY29yZS5jLTM4Mi1cbm5ldC9uZmMvY29yZS5jOjM4MzpcdHJldHVybiBuZmNfZ2VubF9kZXBfbGlua191cF9ldmVudChkZXYsIHRhcmdldF9pZHgsIGNvbW1fbW9kZSwgcmZfbW9kZSk7XG5uZXQvbmZjL2NvcmUuYy0zODQtfVxuLS1cbm5ldC9uZmMvY29yZS5jPTY1NT1pbnQgbmZjX3RtX2RhdGFfcmVjZWl2ZWQoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2NvcmUuYy02NTctXHQvKiBPbmx5IExMQ1AgdGFyZ2V0IG1vZGUgZm9yIG5vdyAqL1xubmV0L25mYy9jb3JlLmM6NjU4Olx0aWYgKGRldi1cdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xubmV0L25mYy9jb3JlLmMtNjU5LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbmZjL2NvcmUuYz02OTY9aW50IG5mY190bV9kZWFjdGl2YXRlZChzdHJ1Y3QgbmZjX2RldiAqZGV2KVxubmV0L25mYy9jb3JlLmMtNjk3LXtcbm5ldC9uZmMvY29yZS5jOjY5ODpcdGRldi1cdTAwM2VkZXBfbGlua191cCA9IGZhbHNlO1xubmV0L25mYy9jb3JlLmMtNjk5LVx0ZGV2LVx1MDAzZXJmX21vZGUgPSBORkNfUkZfTk9ORTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTU4Nj1zdGF0aWMgaW50IGRpZ2l0YWxfZGV2X2Rvd24oc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01OTQtXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjU5NTpzdGF0aWMgaW50IGRpZ2l0YWxfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTU5Ni1cdFx0XHQgICAgICAgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgZGlnaXRhbF9uZmNfb3BzID0ge1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNzQ4LVx0LnN0b3BfcG9sbCA9IGRpZ2l0YWxfc3RvcF9wb2xsLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo3NDk6XHQuZGVwX2xpbmtfdXAgPSBkaWdpdGFsX2RlcF9saW5rX3VwLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy03NTAtXHQuZGVwX2xpbmtfZG93biA9IGRpZ2l0YWxfZGVwX2xpbmtfZG93bixcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NjUyPXN0YXRpYyB2b2lkIGhjaV9zdG9wX3BvbGwoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTY2Mi1cbm5ldC9uZmMvaGNpL2NvcmUuYzo2NjM6c3RhdGljIGludCBoY2lfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjY0LVx0XHRcdFx0X191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy02NjctXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjY4Olx0aWYgKCFoZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXBfbGlua191cClcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjktXHRcdHJldHVybiAwO1xubmV0L25mYy9oY2kvY29yZS5jLTY3MC1cbm5ldC9uZmMvaGNpL2NvcmUuYzo2NzE6XHRyZXR1cm4gaGRldi1cdTAwM2VvcHMtXHUwMDNlZGVwX2xpbmtfdXAoaGRldiwgdGFyZ2V0LCBjb21tX21vZGUsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjcyLVx0XHRcdFx0ICAgICAgZ2IsIGdiX2xlbik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgaGNpX25mY19vcHMgPSB7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTk0NS1cdC5zdG9wX3BvbGwgPSBoY2lfc3RvcF9wb2xsLFxubmV0L25mYy9oY2kvY29yZS5jOjk0NjpcdC5kZXBfbGlua191cCA9IGhjaV9kZXBfbGlua191cCxcbm5ldC9uZmMvaGNpL2NvcmUuYy05NDctXHQuZGVwX2xpbmtfZG93biA9IGhjaV9kZXBfbGlua19kb3duLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmM9NjYxPXN0YXRpYyBpbnQgbGxjcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKl9hZGRyLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA1LVx0ZGV2aWNlX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWRldik7XG5uZXQvbmZjL2xsY3Bfc29jay5jOjcwNjpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA3LVx0XHRyZXQgPSAtRU5PTElOSztcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmM9OTcwPXN0YXRpYyB2b2lkIG5jaV9kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldixcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtOTk1LVxubmV0L25mYy9uY2kvY29yZS5jOjk5NjpzdGF0aWMgaW50IG5jaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbm5ldC9uZmMvbmNpL2NvcmUuYy05OTctXHRcdFx0ICAgX191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBuY2lfbmZjX29wcyA9IHtcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1My1cdC5zdG9wX3BvbGwgPSBuY2lfc3RvcF9wb2xsLFxubmV0L25mYy9uY2kvY29yZS5jOjExNTQ6XHQuZGVwX2xpbmtfdXAgPSBuY2lfZGVwX2xpbmtfdXAsXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1NS1cdC5kZXBfbGlua19kb3duID0gbmNpX2RlcF9saW5rX2Rvd24sXG4tLVxubmV0L25mYy9uY2kvbnRmLmM9NzA5PXN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tLVxubmV0L25mYy9uY2kvbnRmLmMtODY1LVxubmV0L25mYy9uY2kvbnRmLmM6ODY2Olx0XHQvKiBzdG9yZSBnZW5lcmFsIGJ5dGVzIHRvIGJlIHJlcG9ydGVkIGxhdGVyIGluIGRlcF9saW5rX3VwICovXG5uZXQvbmZjL25jaS9udGYuYy04NjctXHRcdGlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDX0RFUCkge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jPTY0MD1zdGF0aWMgaW50IG5mY19nZW5sX2R1bXBfZGV2aWNlc19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy02NTEtXG5uZXQvbmZjL25ldGxpbmsuYzo2NTI6aW50IG5mY19nZW5sX2RlcF9saW5rX3VwX2V2ZW50KHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxubmV0L25mYy9uZXRsaW5rLmMtNjUzLVx0XHRcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtNjc4LVxubmV0L25mYy9uZXRsaW5rLmM6Njc5Olx0ZGV2LVx1MDAzZWRlcF9saW5rX3VwID0gdHJ1ZTtcbm5ldC9uZmMvbmV0bGluay5jLTY4MC1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYz05MTE9c3RhdGljIGludCBuZmNfZ2VubF9kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTkzNS1cbm5ldC9uZmMvbmV0bGluay5jOjkzNjpzdGF0aWMgaW50IG5mY19nZW5sX2RlcF9saW5rX3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvbmZjL25ldGxpbmsuYy05Mzcte1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTk2My1cbm5ldC9uZmMvbmV0bGluay5jOjk2NDpcdHJjID0gbmZjX2RlcF9saW5rX3VwKGRldiwgdGd0X2lkeCwgY29tbSk7XG5uZXQvbmZjL25ldGxpbmsuYy05NjUtXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTA2OD1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZXRfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTExMS1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0xMQ19QQVJBTV9MVE9dKSB7XG5uZXQvbmZjL25ldGxpbmsuYzoxMTEyOlx0XHRpZiAoZGV2LVx1MDAzZWRlcF9saW5rX3VwKSB7XG5uZXQvbmZjL25ldGxpbmsuYy0xMTEzLVx0XHRcdHJjID0gLUVJTlBST0dSRVNTO1xuLS1cbm5ldC9uZmMvbmV0bGluay5jPTExMzc9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xMTYxLVxubmV0L25mYy9uZXRsaW5rLmM6MTE2MjpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvbmV0bGluay5jLTExNjMtXHRcdHJjID0gLUVOT0xJTks7XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIG5mY19nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3MzMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC9uZmMvbmV0bGluay5jOjE3MzQ6XHRcdC5kb2l0ID0gbmZjX2dlbmxfZGVwX2xpbmtfdXAsXG5uZXQvbmZjL25ldGxpbmsuYy0xNzM1LVx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4tLVxubmV0L25mYy9uZmMuaD04Mj1pbnQgbmZjX2dlbmxfZGV2aWNlX3JlbW92ZWQoc3RydWN0IG5mY19kZXYgKmRldik7XG5uZXQvbmZjL25mYy5oLTgzLVxubmV0L25mYy9uZmMuaDo4NDppbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXG5uZXQvbmZjL25mYy5oLTg1LVx0XHRcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpO1xuLS1cbm5ldC9uZmMvbmZjLmg9MTM1PWludCBuZmNfc3RvcF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xubmV0L25mYy9uZmMuaC0xMzYtXG5uZXQvbmZjL25mYy5oOjEzNzppbnQgbmZjX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGludCB0YXJnZXRfaWR4LCB1OCBjb21tX21vZGUpO1xubmV0L25mYy9uZmMuaC0xMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIHRoZSBORkMgTmV0bGluayBDb21tYW5kIEhhbmRsZXIgYW5kIFZpcnR1YWwgRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIGBuZmNfZ2VubF9kZXBfbGlua191cGAgaXMgYWN0dWFsbHkgYW5vdGhlciBpbXBsZW1lbnRhdGlvbiBvZiBhIGdlbmVyaWMgbmV0bGluayBjb21tYW5kLCBzcGVjaWZpY2FsbHkgYE5GQ19DTURfREVQX0xJTktfVVBgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgbGluay11cCBldmVudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0bGluayBmcmFtZXdvcmsuIEl0JiMzOTtzIG5vdCBqdXN0IHNvbWUgaXNvbGF0ZWQgZnVuY3Rpb247IGl0JiMzOTtzIHBhcnQgb2YgYSBsYXJnZXIsIHdlbGwtZGVmaW5lZCBuZXRsaW5rIGNvbW1hbmQgc3RydWN0dXJlLgoKQW5kLCBldmVuIG1vcmUgaW50ZXJlc3RpbmcsIGB2aXJ0dWFsX25jaWRldi5jYCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyB2aXJ0dWFsIE5GQyBkZXZpY2UuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB3ZSYjMzk7cmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIHRocm91Z2gsIHNheSwgYC9kZXYvbmNpYC4gVGhpcyBpbXBsaWVzIGl0JiMzOTtzIHdoZXJlIHRoZSB2aXJ0dWFsIGRldmljZSYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQgYW5kIGl0cyBjYXBhYmlsaXRpZXMgZW11bGF0ZWQuIE5vdyBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgdmlydHVhbCBkZXZpY2UgaXMgY29uc3RydWN0ZWQuIExldCYjMzk7cyBkaWcgaW50byBgdmlydHVhbF9uY2lkZXYuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0OiNpbmNsdWRlIFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFx1MDAzZVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNS1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIzLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyNDpzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2IHtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjU6XHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjYtXHRzdHJ1Y3QgbXV0ZXggbXR4O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzMte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozNDpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTM1LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjQwOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfY2xvc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQxLXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy00My1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTUyLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1MzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NTU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTc1LVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NzpcdC5vcGVuID0gdmlydHVhbF9uY2lfb3BlbixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XHQuY2xvc2UgPSB2aXJ0dWFsX25jaV9jbG9zZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzk6XHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODAtfTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg2LVx0c2l6ZV90IGFjdHVhbF9sZW47XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMTc6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExOC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMjgtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEyOTpcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXHUwMDNlbmRldiwgc2tiKTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMwLVx0cmV0dXJuIGNvdW50O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMyLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzM6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzQte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzUtXHRpbnQgcmV0ID0gMDtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTM2Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldjtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM3LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQwLVx0XHRyZXR1cm4gLUVOT01FTTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTQxOlx0dmRldi1cdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcdTAwMjZ2aXJ0dWFsX25jaV9vcHMsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0Mi1cdFx0VklSVFVBTF9ORkNfUFJPVE9DT0xTLCAwLCAwKTtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1MC1cdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gdmRldjtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTUxOlx0bmNpX3NldF9kcnZkYXRhKHZkZXYtXHUwMDNlbmRldiwgdmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1Mi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTUzOlx0cmV0ID0gbmNpX3JlZ2lzdGVyX2RldmljZSh2ZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNTQtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE1NTpcdFx0bmNpX2ZyZWVfZGV2aWNlKHZkZXYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1Ni1cdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjY6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2Ny1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY4Olx0bmNpX3VucmVnaXN0ZXJfZGV2aWNlKHZkZXYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2OTpcdG5jaV9mcmVlX2RldmljZSh2ZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzAtXHRtdXRleF9kZXN0cm95KFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc2OnN0YXRpYyBsb25nIHZpcnR1YWxfbmNpZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3OC17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3OTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTgwLVx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXHQubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwMzpcdC5uYW1lID0gXCYjMzQ7dmlydHVhbF9uY2lcJiMzNDssXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcdC5mb3BzID0gXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVx0Lm1vZGUgPSAwNjAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkZDIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGAvZGV2L3ZpcnR1YWxfbmNpYCBpcyB0aGUga2V5IOKAkyB0aGF0JiMzOTtzIG15IGVudHJ5IHBvaW50LCBpdCBsb29rcyBsaWtlLCBmb3IgYW4gTkNJIGRldmljZSwgd2hpY2ggaXMgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gIEl0JiMzOTtzIGFsc28gd29ydGggbm90aW5nIHRoZSBwcmVzZW5jZSBvZiB0aGUgcG41MzMgVVNCIGdhZGdldC9yYXctZ2FkZ2V0OyB0aGF0JiMzOTtzIGFub3RoZXIgcGllY2Ugb2YgdGhlIHB1enpsZS4gIEFuZCwgc3l6a2FsbGVyIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYm90aCBuZXRsaW5rIGFuZCBORkMgLSBleGNlbGxlbnQ7IHRoYXQgdGVsbHMgbWUgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyBhcmUgbGlrZWx5IHRvIGJlLgoKTm93LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIE5GQywgTExDUCwgYW5kIHNvIG9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLCBzdGFydGluZyB3aXRoIGBuZXQvbmZjL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBORkMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORkNcbiAgIDc6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgIDg6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgOTpcdFx0ZGVmYXVsdCBuXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTkZDIChOZWFyIGZpZWxkXG4gIDEyOlx0XHQgIGNvbW11bmljYXRpb24pIGRldmljZXMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTU6XHRcdCAgYmUgY2FsbGVkIG5mYy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTkZDX0RJR0lUQUxcbiAgMTg6XHRcdGRlcGVuZHMgb24gTkZDXG4gIDE5Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDIwOlx0XHRzZWxlY3QgQ1JDX0lUVV9UXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtORkMgRGlnaXRhbCBQcm90b2NvbCBzdGFjayBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZWZhdWx0IG5cbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cbiAgMjU6XHRcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XG4gIDI2Olx0XHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxuICAyNzpcdFxuICAyODpcdFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDI5Olx0XHQgIGJlIGNhbGxlZCBuZmNfZGlnaXRhbC5cbiAgMzA6XHRcbiAgMzE6XHRzb3VyY2UgXCYjMzQ7bmV0L25mYy9uY2kvS2NvbmZpZ1wmIzM0O1xuICAzMjpcdHNvdXJjZSBcJiMzNDtuZXQvbmZjL2hjaS9LY29uZmlnXCYjMzQ7XG4gIDMzOlx0XG4gIDM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIE5GQyBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBORkMgY29tcG9uZW50cywgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGBuZXQvbmZjL01ha2VmaWxlYC4gVGhpcyBmaWxlIGlzIHRoZSBjZW50cmFsIHBvaW50IG9mIGNvbnRyb2wsIHJpZ2h0PyBJdCYjMzk7cyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgYXJlIGFsbCBvcmNoZXN0cmF0ZWQgZm9yIHRoZXNlIE5GQy1yZWxhdGVkIG1vZHVsZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZXNlIHRoaW5ncywgYW55IHNwZWNpZmljIG1vZHVsZXMgaXQmIzM5O3MgY3JlYXRpbmcsIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBhcmUgYW55IHVudXN1YWwgYnVpbGQgZmxhZ3Mgb3IgY3VzdG9tIHJ1bGVzIHRoYXQgbWlnaHQgaW5kaWNhdGUgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggTkZDIHN1YnN5c3RlbS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX05GQykgJiM0Mzs9IG5mYy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX05GQ19OQ0kpICYjNDM7PSBuY2kvXG4gICA4Olx0b2JqLSQoQ09ORklHX05GQ19IQ0kpICYjNDM7PSBoY2kvXG4gICA5Olx0b2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSAmIzQzOz0gbmZjX2RpZ2l0YWwub1xuICAxMDpcdFxuICAxMTpcdG5mYy1vYmpzIDo9IGNvcmUubyBuZXRsaW5rLm8gYWZfbmZjLm8gcmF3c29jay5vIGxsY3BfY29yZS5vIGxsY3BfY29tbWFuZHMubyBcXFxuICAxMjpcdFx0XHRsbGNwX3NvY2sub1xuICAxMzpcdFxuICAxNDpcdG5mY19kaWdpdGFsLW9ianMgOj0gZGlnaXRhbF9jb3JlLm8gZGlnaXRhbF90ZWNobm9sb2d5Lm8gZGlnaXRhbF9kZXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgbmV0bGluay5vYCBnZXRzIGNvbXBpbGVkIHdoZW4gTkZDIGlzIHR1cm5lZCBvbiDigJMgZWl0aGVyIGJ1aWx0IGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZSwgYW5kIHN5emthbGxlciB1c2VzIGl0IGFzIGEgYnVpbHQtaW4gbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlcGVuZGVuY3kgbW9yZSBkZWVwbHkuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJREVWYC4gVGhpcyBjb3VsZCBwcm92aWRlIGluc2lnaHQgaW50byBleGFjdGx5ICp3aHkqIGBuZXRsaW5rLm9gIGlzIGJlaW5nIGluY2x1ZGVkIGluIGEgc3BlY2lmaWMgYnVpbGQsIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjb25maWd1cmF0aW9uIGZsYWdzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB2aXJ0dWFsIE5GQyBkZXZpY2VzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBhbmQgcG90ZW50aWFsIGJ1Z3Mgb2Z0ZW4gbGllLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VklSVFVBTF9OQ0lERVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGB2aXJ0dWFsX25jaWRldmAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBORkMgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBvZiBjb3Vyc2UsIGlzIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZS4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgY29uZmlndXJhdGlvbiBzeW1ib2wuIEhvcGVmdWxseSwgaXQmIzM5O3MgZGVmaW5lZCBkaXJlY3RseSB0aGVyZSwgb3IgYXQgbGVhc3QgaW5jbHVkZWQgZnJvbSBhIGZpbGUgd2l0aGluIHRoZSBORkMgZGlyZWN0b3J5LiBGcm9tIGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBvdXQgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgTkZDIGZlYXR1cmVzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgcXVpY2sgbG9va3VwLCBidXQgeW91IG5ldmVyIGtub3cuIEl0IG1pZ2h0IGJlIGEgYml0IGJ1cmllZCwgb3IgaXQgY291bGQgYmUgZGVmaW5lZCBpbiBhIG1vcmUgZ2VuZXJpYyBjb25maWcgZmlsZSBzb21ld2hlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnR1YWxfbmNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcdCYjNDM7PSB2aXJ0dWFsX25jaWRldi5vXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMy1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjQ6c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTI1LVx0c3RydWN0IG5jaV9kZXYgKm5kZXY7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MzI6c3RhdGljIGludCB2aXJ0dWFsX25jaV9vcGVuKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMy17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjM0Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzUtXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zOS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDA6c3RhdGljIGludCB2aXJ0dWFsX25jaV9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNDEte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo0MjpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQzLVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjUzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfc2VuZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTQte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1NTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU2LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNzUtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyB2aXJ0dWFsX25jaV9vcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc3Olx0Lm9wZW4gPSB2aXJ0dWFsX25jaV9vcGVuLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3ODpcdC5jbG9zZSA9IHZpcnR1YWxfbmNpX2Nsb3NlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3OTpcdC5zZW5kID0gdmlydHVhbF9uY2lfc2VuZFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MC19O1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODI6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODMtXHRcdFx0XHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODQte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo4NTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODYtXHRzaXplX3QgYWN0dWFsX2xlbjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTQtXHRcdFx0XHQgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExNi17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExNzpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE4LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTMzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM1LVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzNjpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXY7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNy1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0MTpcdHZkZXYtXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXHUwMDI2dmlydHVhbF9uY2lfb3BzLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDItXHRcdFZJUlRVQUxfTkZDX1BST1RPQ09MUywgMCwgMCk7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjY6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2Ny1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc2OnN0YXRpYyBsb25nIHZpcnR1YWxfbmNpZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3OC17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3OTpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTgwLVx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVx1MDAzZW5kZXYtXHUwMDNlbmZjX2Rldjtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXHQubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwMzpcdC5uYW1lID0gXCYjMzQ7dmlydHVhbF9uY2lcJiMzNDssXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcdC5mb3BzID0gXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVx0Lm1vZGUgPSAwNjAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5GQyBWaXJ0dWFsIE5DSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhhdCBLY29uZmlnIHRvIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYE5GQ19WSVJUVUFMX05DSWAuIEkga25vdyB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBwcmV0dHkgd2VsbCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBpZiBpdCYjMzk7cyB0cmlzdGF0ZSBvciBib29sZWFuLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiB3aGF0IGVuYWJsaW5nIGl0IGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgYWxzbyBiZSBtZW50YWxseSBub3RpbmcgYW55IHJlbGF0ZWQgb3B0aW9ucyBpbiB0aGUgdmljaW5pdHksIGJlY2F1c2UgdGhlIEtjb25maWcgb2Z0ZW4gZ3JvdXBzIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSB0cnlpbmcgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlICpjb250ZXh0KiBvZiB0aGlzIHZpcnR1YWwgTkNJIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBORkMgc3Vic3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyB2aXJ0dWFsIE5DSSByZWxhdGVzIHRvIGVtdWxhdGluZyBhbiBOQ0kgaW50ZXJmYWNlLCBwcm9iYWJseSBmb3IgdGVzdGluZyBvciBzaW11bGF0aW9uIHB1cnBvc2VzLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgd2hhdCBJJiMzOTttIHNlZWtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfVklSVFVBTF9OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxuLS1cbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBORkMgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUyLiBJJiMzOTttIGJldHRpbmcgdGhhdCBhcmVhIGxpa2VseSBob2xkcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBORkMgc3Vic3lzdGVtLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBtb2R1bGFyaXR5LCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGRlc2lnbiBkZWNpc2lvbnMgZW5jb2RlZCBpbiB0aGlzIEtjb25maWcgZmlsZSwgYXMgdGhpcyBpcyB3aGVyZSB0aGUgTkZDIG9wdGlvbnMgYXJlIGxpa2VseSB0byBiZSBkZWNsYXJlZCBhbmQgc3RydWN0dXJlZC4gRnJvbSBoZXJlLCBJIHdpbGwgYmVnaW4gdG8gdHJhY2UgaG93IHRoZSBvcHRpb25zIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBhcmUgdGllZCB0byBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBORkMgc3RhY2sgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU29ueSBQb3J0LTEwMCBjaGlwIGJhc2VkIFVTQiBkZXZpY2VzIHN1Y2ggYXMgdGhlXG4gIDQ4Olx0XHQgIFJDLVMzODAgZG9uZ2xlLlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBORkNfVklSVFVBTF9OQ0lcbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxuICA1NzpcdFx0ICBJdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgTkNJIG1vZHVsZSBhbmQgYXBwbGljYXRpb25zLlxuICA1ODpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHZpcnR1YWwgTkNJIGRldmljZSBhbmRcbiAgNTk6XHRcdCAgbW9kdWxlLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MjpcdFxuICA2MzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9mZHAvS2NvbmZpZ1wmIzM0O1xuICA2NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9wbjU0NC9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTE2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIE5GQ3NpbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhhdCBgbmZjc2ltYCB0b29sLCBzaGFsbCB3ZT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCBvZmZlcnMuIEkga25vdyBJIHVzZWQgaXQgYmVmb3JlIGZvciBbaW5zZXJ0IHJlbGV2YW50IHRlY2huaWNhbCB1c2FnZSwgZS5nLiwgc2ltdWxhdGluZyBORkMgdGFnIGludGVyYWN0aW9ucywgdGVzdGluZyByZWFkZXIgaW1wbGVtZW50YXRpb25zLCBkZWJ1Z2dpbmcgY29tbXVuaWNhdGlvbiBwcm90b2NvbHNdLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0RvZXMgaXQgc3RpbGwgb2ZmZXIgdGhlIGZlYXR1cmVzIEkgbmVlZCBmb3IgW3NwZWNpZmljIHByb2plY3Qgb3IgdGFza10/JiMzNDsgSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBpcyBzdGlsbCBpbnR1aXRpdmUgb3IgaWYgdGhlcmUgaGF2ZSBiZWVuIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCBtaWdodCBpbXBhY3QgbXkgd29ya2Zsb3cuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaWYgYG5mY3NpbWAgc3RpbGwgYWxpZ25zIHdpdGggbXkgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZHMgYW55IHVuZXhwZWN0ZWQgcm9hZGJsb2Nrcy4gSSBhbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBpZiBpdCBzdXBwb3J0cyB0aGUgcmVjZW50IGFkdmFuY2VtZW50cyBpbiBORkMgdGVjaG5vbG9neSB3aGljaCBJIGFtIGN1cnJlbnRseSBpbnZvbHZlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvbmZjc2ltLmMtMTUtXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoxNjojZGVmaW5lIE5GQ1NJTV9FUlIoZCwgZm10LCBhcmdzLi4uKSBuZmNfZXJyKFx1MDAyNmQtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBcXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTctXHRcdFx0XHRcdCAgICBcJiMzNDslczogXCYjMzQ7IGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOC1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjE5OiNkZWZpbmUgTkZDU0lNX0RCRyhkLCBmbXQsIGFyZ3MuLi4pIGRldl9kYmcoXHUwMDI2ZC1cdTAwM2VuZmNfZGlnaXRhbF9kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yMC1cdFx0XHRcdFx0ICAgIFwmIzM0OyVzOiBcJiMzNDsgZm10LCBfX2Z1bmNfXywgIyMgYXJncylcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIxLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjI6I2RlZmluZSBORkNTSU1fVkVSU0lPTiBcJiMzNDswLjJcJiMzNDtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIzLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjQ6I2RlZmluZSBORkNTSU1fTU9ERV9OT05FXHQwXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNTojZGVmaW5lIE5GQ1NJTV9NT0RFX0lOSVRJQVRPUlx0MVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjY6I2RlZmluZSBORkNTSU1fTU9ERV9UQVJHRVRcdDJcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI3LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mjg6I2RlZmluZSBORkNTSU1fQ0FQQUJJTElUSUVTIChORkNfRElHSVRBTF9EUlZfQ0FQU19JTl9DUkMgICB8IFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yOS1cdFx0XHQgICAgIE5GQ19ESUdJVEFMX0RSVl9DQVBTX1RHX0NSQylcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0xMDQ9c3RhdGljIHZvaWQgbmZjc2ltX2xpbmtfcmVjdl9jYW5jZWwoc3RydWN0IG5mY3NpbV9saW5rICpsaW5rKVxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTEwNy1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjEwODpcdGxpbmstXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX05PTkU7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xMDktXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTE1PXN0YXRpYyB2b2lkIG5mY3NpbV9saW5rX3NodXRkb3duKHN0cnVjdCBuZmNzaW1fbGluayAqbGluaylcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xMTktXHRsaW5rLVx1MDAzZXNodXRkb3duID0gMTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjEyMDpcdGxpbmstXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX05PTkU7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xMjEtXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTgyPXN0YXRpYyB2b2lkIG5mY3NpbV9yZWN2X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOTAtXHRpZiAoIWRldi1cdTAwM2V1cCkge1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTkxOlx0XHRORkNTSU1fRVJSKGRldiwgXCYjMzQ7RGV2aWNlIGlzIGRvd25cXG5cJiMzNDspO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTkyLVxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jPTIwMT1zdGF0aWMgaW50IG5mY3NpbV9zZW5kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjA3LVx0aWYgKCFkZXYtXHUwMDNldXApIHtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjIwODpcdFx0TkZDU0lNX0VSUihkZXYsIFwmIzM0O0RldmljZSBpcyBkb3duXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIwOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjE4LVx0aWYgKGRldi1cdTAwM2Vkcm9wZnJhbWUpIHtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjIxOTpcdFx0TkZDU0lNX0RCRyhkZXYsIFwmIzM0O2Ryb3BwaW5nIGZyYW1lIChvdXQgb2YgJWQpXFxuXCYjMzQ7LCBkZXYtXHUwMDNlZHJvcGZyYW1lKTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIyMC1cdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jPTI1Nj1zdGF0aWMgaW50IG5mY3NpbV9pbl9jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNjMtXHRcdGRldi1cdTAwM2V1cCA9IHRydWU7XG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNjQ6XHRcdGRldi1cdTAwM2Vtb2RlID0gTkZDU0lNX01PREVfSU5JVElBVE9SO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjY1LVx0XHRkZXYtXHUwMDNlcmZfdGVjaCA9IHBhcmFtO1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI3MS1cdGRlZmF1bHQ6XG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNzI6XHRcdE5GQ1NJTV9FUlIoZGV2LCBcJiMzNDtJbnZhbGlkIGNvbmZpZ3VyYXRpb24gdHlwZTogJWRcXG5cJiMzNDssIHR5cGUpO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjczLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0yODY9c3RhdGljIGludCBuZmNzaW1fdGdfY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjkzLVx0XHRkZXYtXHUwMDNldXAgPSB0cnVlO1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mjk0Olx0XHRkZXYtXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX1RBUkdFVDtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5NS1cdFx0ZGV2LVx1MDAzZXJmX3RlY2ggPSBwYXJhbTtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zMDEtXHRkZWZhdWx0OlxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzAyOlx0XHRORkNTSU1fRVJSKGRldiwgXCYjMzQ7SW52YWxpZCBjb25maWd1cmF0aW9uIHR5cGU6ICVkXFxuXCYjMzQ7LCB0eXBlKTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMwMy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MzQ2PXN0YXRpYyB2b2lkIG5mY3NpbV9kZWJ1Z2ZzX2luaXRfZGV2KHN0cnVjdCBuZmNzaW0gKmRldilcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNTMtXHRpZiAoIW5mY3NpbV9kZWJ1Z2ZzX3Jvb3QpIHtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM1NDpcdFx0TkZDU0lNX0VSUihkZXYsIFwmIzM0O25mY3NpbSBkZWJ1Z2ZzIG5vdCBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNTUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNjAtXHRpZiAobiBcdTAwM2U9IHNpemVvZihkZXZuYW1lKSkge1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzYxOlx0XHRORkNTSU1fRVJSKGRldiwgXCYjMzQ7Q291bGQgbm90IGNvbXB1dGUgZGV2IG5hbWUgZm9yIGRldiAlZFxcblwmIzM0OywgaWR4KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM2Mi1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jPTM3MD1zdGF0aWMgc3RydWN0IG5mY3NpbSAqbmZjc2ltX2RldmljZV9uZXcoc3RydWN0IG5mY3NpbV9saW5rICpsaW5rX2luLFxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4NS1cdFx0XHRcdFx0XHQgICAgTkZDX1BST1RPX05GQ19ERVBfTUFTSyxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM4NjpcdFx0XHRcdFx0XHQgICAgTkZDU0lNX0NBUEFCSUxJVElFUyxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4Ny1cdFx0XHRcdFx0XHQgICAgMCwgMCk7XG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9NDMxPXN0YXRpYyBpbnQgX19pbml0IG5mY3NpbV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDU4LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDU5Olx0cHJfaW5mbyhcJiMzNDtuZmNzaW0gXCYjMzQ7IE5GQ1NJTV9WRVJTSU9OIFwmIzM0OyBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy00NjAtXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9NDkxPW1vZHVsZV9leGl0KG5mY3NpbV9leGl0KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQ5Mi1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjQ5MzpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TkZDU2ltIGRyaXZlciB2ZXIgXCYjMzQ7IE5GQ1NJTV9WRVJTSU9OKTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjQ5NDpNT0RVTEVfVkVSU0lPTihORkNTSU1fVkVSU0lPTik7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy00OTUtTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTkZDIFNpbXVsYXRvciBEcml2ZXIgQWN0aXZhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX05GQ19TSU1gLi4uIHRoYXQmIzM5O3MgKmFub3RoZXIqIHNpbXVsYXRvciBkcml2ZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYG5mY3NpbS5jYCBtb2R1bGUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2ltdWxhdG9yIGlzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIE5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hlbiBpdCB3b3VsZCBiZSB1c2VkIGluIGEgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNzaW1cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX05GQ19NRUlfUEhZKVx0JiM0Mzs9IG1laV9waHkub1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX05GQ19TSU0pXHRcdCYjNDM7PSBuZmNzaW0ub1xuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX05GQ19QT1JUMTAwKVx0JiM0Mzs9IHBvcnQxMDAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIE5GQ19TSU0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGBORkNfU0lNYCBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IG5lc3RsZWQgd2l0aGluIHRoZSBORkMgZHJpdmVyIHN0cnVjdHVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHVzdWFsIHBsYWNlIGZvciB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgc28gSSYjMzk7bGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEhvcGVmdWxseSwgaXQmIzM5O3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GQ19TSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTIxPWNvbmZpZyBORkNfTUVJX1BIWVxuLS1cbmRyaXZlcnMvbmZjL0tjb25maWctMzAtXG5kcml2ZXJzL25mYy9LY29uZmlnOjMxOmNvbmZpZyBORkNfU0lNXG5kcml2ZXJzL25mYy9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgTkZDIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTkZDIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxLiBLbm93aW5nIHRoaXMgc2VjdGlvbiBpcyBjcml0aWNhbDsgaXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGZlYXR1cmUgZW5hYmxlL2Rpc2FibGUgZGlyZWN0aXZlcyBhcmUgZGVmaW5lZC4gVGltZSB0byBmaWd1cmUgb3V0IHdoYXQgbW9kdWxlcyBhbmQgZmVhdHVyZXMgYXJlIGJlaW5nIGNvbnNpZGVyZWQgaGVyZSBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBjb21wb25lbnRzIGFyZSBtb2R1bGFyLCBidWlsdC1pbiwgb3IgcG90ZW50aWFsbHkgZXhjbHVkZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzdHJlYW1saW5lZCBhbmQgb3B0aW1pemVkIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE5GQ19TSU1cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxuICAzNjpcdFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXG4gIDM3Olx0XHQgIGFsbCBwYWNrZXRzIHNlbnQgZnJvbSBvbmUgZGV2aWNlIGlzIHNlbnQgYmFjayB0byB0aGUgb3RoZXIsIGFjdGluZyBhc1xuICAzODpcdFx0ICBsb29wYmFjayBkZXZpY2VzLlxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORkNfUE9SVDEwMFxuICA0MzpcdFx0dHJpc3RhdGUgXCYjMzQ7U29ueSBORkMgUG9ydC0xMDAgU2VyaWVzIFVTQiBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBVU0JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5NTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE5GQyBOZXRsaW5rIFNlcnZpY2UgRGlzY292ZXJ5IFJlcXVlc3QgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgbmV0L25mYy9uZXRsaW5rLmNgIGZvY3VzZXMgb24gZml4aW5nIGEgbWVtb3J5IGxlYWsgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBORkMgZGV2aWNlcywgZW1wbG95aW5nIHRoZSBORkMtREVQIHByb3RvY29sLiBMTENQIGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZXNlIHZpcnR1YWwgZGV2aWNlcywgYW5kIHBhY2tldHMgYXJlIGxvb3BlZCBiYWNrLiBTeXprYWxsZXIgc3VwcG9ydHMgTkZDIGFuZCByZWxhdGVkIG5ldGxpbmsgbWVjaGFuaXNtcywgaW5jbHVkaW5nIHNpbXVsYXRlZCBkZXZpY2VzLCB3aGljaCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQuIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGl0ZXJhdGVzIHRocm91Z2ggU0RQIGF0dHJpYnV0ZXMgcmVjZWl2ZWQgdmlhIG5ldGxpbmsuICBDcnVjaWFsbHksIGl0IGJ1aWxkcyBTRFAgVExWcyAoVHlwZS1MZW5ndGgtVmFsdWUpIHVzaW5nIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIGFuZCBhZGRzIHRoZW0gdG8gYSBsaXN0LCBgc2RyZXFfbGlzdGAuIFByZXZpb3VzbHksIGlmIGFuIGVycm9yIG9jY3VycmVkICphZnRlciogZWxlbWVudHMgd2VyZSBhZGRlZCB0byBgc2RyZXFfbGlzdGAgd2l0aGluIHRoZSBsb29wIG9yIGFmdGVyIGEgc3Vic2VxdWVudCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNhbGwsIHRoZSBmdW5jdGlvbiB3b3VsZCBzaW1wbHkgYGdvdG8gcHV0X2xvY2FsYCB3aGljaCBsZWFrZWQgdGhlIG1lbW9yeSBvZiB0aGUgYHNkcmVxX2xpc3RgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZ290byBmcmVlX2xpc3RgIHRvIGNvcnJlY3RseSBmcmVlIHRoZSBgc2RyZXFfbGlzdGAgd2hpY2ggcHJldmVudHMgdGhpcyBsZWFrLgoKTm93LCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNvbWVzIGludG8gcGxheS4gSWYgaXQgKnN1Y2NlZWRzKiwgaXQgbW92ZXMgdGhlIGVsZW1lbnRzIGZyb20gYHNkcmVxX2xpc3RgIHRvIGEgZGlmZmVyZW50IGxpc3QgYW5kICp0aGVuKiB0aGUgY29kZSBmYWxscyB0aHJvdWdoIHRvIGBmcmVlX2xpc3RgLCBlZmZlY3RpdmVseSBmcmVlaW5nIHRoZSAqZW1wdHkqIGBzZHJlcV9saXN0YCwgd2hpY2ggaXMgYSBuby1vcC4gSWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBmYWlscywgdGhlIGBzZHJlcV9saXN0YCB3b3VsZCBiZSBjb3JyZWN0bHkgZnJlZWQuCgpUaGlzIHBhdGNoIGxvb2tzIHNvdW5kIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhay4gTW9yZW92ZXIsIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgZnV6emFibGUuIE5GQyBuZXRsaW5rIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGFjY2Vzc2VkIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cywgYW5kIFN5emthbGxlciBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgY29kZSBwYXRoLiBFbmFibGluZyB0aGUgYE5GQ2AgY29uZmlnIG9wdGlvbiBpcyBlbm91Z2guIFRoZSBmdW5jdGlvbiBgbmZjX2dlbmxfbGxjX3NkcmVxYCBpcyBub3QgaW5saW5lZCBhbmQgd2lsbCBiZSB2aXNpYmxlIHRvIHN5bWJvbCBjb3ZlcmFnZSwgYXMgaXQgaXMgcGFydCBvZiB0aGUgYG5mY19nZW5sX29wc2AgYXJyYXkuIFRodXMsIGZ1enppbmcgYG5mY19nZW5sX2xsY19zZHJlcWAgaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYS4gVGhlIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTkZDIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBORkMgbmV0bGluayBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9uZmMvbmV0bGluay5jYCwgYW5kIEkmIzM5O20gbm90IHNlZWluZyBhbnkgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGVyZS4gSW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IgcHJvYmFibHkgaXNuJiMzOTt0IGNvbmRpdGlvbmFsIGJhc2VkIG9uIHByZXByb2Nlc3NvciBmbGFncywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5IHdpdGhpbiB0aGlzIGZpbGUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHNpbXVsYXRlZCBkZXZpY2VzIOKAkyBlc3BlY2lhbGx5IGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCDigJMgYXJlIGNvbmZpZ3VyZWQgdG8gYnJpbmcgdXAgdGhlIERFUCBsaW5rLiBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgYERFUGAgbGlua3Mgd291bGQgYmVjb21lIHJlYWNoYWJsZS4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGU/IEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgYENPTkZJR19ORkNfU0lNYCwgYENPTkZJR19ORkNfRElHSVRBTGAsIG9yIG1heWJlIGV2ZW4gYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLgoKRmlyc3QsIGEgcmVhbGl0eSBjaGVjazogd2hhdCBleGFjdGx5ICpkb2VzKiBgQ09ORklHX05GQ2AgZGVwZW5kIG9uLCBmdW5kYW1lbnRhbGx5PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvbmZjL0tjb25maWdgIGZpbGUuIEFoLCB0aGUgYG1lbnVjb25maWcgTkZDYCBibG9jay4gSSBzZWUgaXQgZGVwZW5kcyBvbiBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBSRktJTExgLCB3aGljaCBpcyBhIGJpdCBvZGQgYnV0IGZ1bmN0aW9uYWxseSBtYWtlcyBzZW5zZS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBiZWNhdXNlIGl0JiMzOTtzIHVuZGVyIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBpcyBsaWtlbHkgdXRpbGl6aW5nIG5ldGxpbmsuIFNvIGBORkNgIGlzIGVzc2VudGlhbGx5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGUgc2ltdWxhdGVkIGRldmljZSBvcHRpb25zLiBgTkZDX0RJR0lUQUxgLCBgTkZDX1NJTWAgKG9yIGBORkNfVklSVFVBTF9OQ0lgKSBhcmUgdGhlIGxpa2VseSBjdWxwcml0cyBmb3IgdmlydHVhbCBORkMgZGV2aWNlIHN1cHBvcnQsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGRlcGVuZGVuY2llcy4gRG9lcyBgTkZDX1NJTWAgZGVwZW5kIG9uIGBORkNfRElHSVRBTGA/IExldCYjMzk7cyBjb25maXJtIHdpdGggdGhlIEtjb25maWc6CgpZZXAsIGFuZCBpdCBpcyBhICpoYXJkKiBkZXBlbmRlbmN5LiBUaGUgS2NvbmZpZyBzbmlwcGV0IGNvbmZpcm1zIGl0IGRpcmVjdGx5LiBPa2F5LCBsZXQmIzM5O3Mgc2VlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGhpZXJhcmNoeTogYE5GQ19TSU1gIGRlcGVuZHMgb24gYE5GQ19ESUdJVEFMYCwgYW5kIGBORkNfRElHSVRBTGAgZGVwZW5kcyBvbiBgTkZDYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCB3aGF0IGFib3V0IGBORkNfVklSVFVBTF9OQ0lgPyBMb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoYXQsIGl0IGRlcGVuZHMgb24gYE5GQ19OQ0lgLgoKTGV0JiMzOTtzIG5vdyBpbnZlc3RpZ2F0ZSBgTkZDX05DSWAuIEl0IHNlZW1zIEkmIzM5O2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9uZmMvbmNpL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZDX05DSVxuICAgMzpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05DSSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRkZWZhdWx0IG5cbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXG4gICA4Olx0XHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxuICAgOTpcdFxuICAxMDpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTkNJIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXG4gIDExOlx0XHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChuY2kpLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBORkNfTkNJX1NQSVxuICAxNDpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbiAgMTU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O05DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRkZWZhdWx0IG5cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXG4gIDIwOlx0XHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjcxNQoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gTXkgdGFzayBpcyB0byBpZGVudGlmeSB0aGUgcHJlY2lzZSBgQ09ORklHX2Agb3B0aW9ucyBuZWVkZWQgdG8gZW5zdXJlIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGBuZmNfZ2VubF9sbGNfc2RyZXFgIHdpdGhpbiBgbmV0L25mYy9uZXRsaW5rLmNgLCBjb21waWxlcyBjb3JyZWN0bHkgYW5kIGlzIHJlYWNoYWJsZS4gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgdGhvcm91Z2huZXNzOiBubyBhc3N1bXB0aW9ucywgS2NvbmZpZyBpbnNwZWN0aW9uLCBhbmQgY29uc2lkZXJpbmcgZGVwZW5kZW5jaWVzLgoKRmlyc3QsIEkgc2VlIHRoYXQgYE5GQ2AgaXMgdGhlIGtleS4gVGhlIGNvZGUgY29tcGlsZXMgd2l0aGluIHRoZSBgTkZDYCBjb25maWd1cmF0aW9uIHNwYWNlLCBzbyBgTkZDYCBpcyBkZWZpbml0ZWx5IGVzc2VudGlhbC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYE5FVGAgaXNuJiMzOTt0IGEgcmVxdWlyZWQgcGFyZW50IHN1YnN5c3RlbSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBORkNgIGFuZCBwb3NzaWJseSBgTkZDX1NJTWAgYXMgdGhleSBtYXkgYmUgYmVuZWZpY2lhbCBhbmQgYXJlIGFsc28gZ29vZCBwcmFjdGljZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBhbGwgdGhlIGRldGFpbHMgYmVmb3JlIEkgc3VibWl0IG15IGZpbmRpbmdzIHdpdGggYHNldC1yZXN1bHRzYC4KCiogICBgV29ydGhGdXp6aW5nYDogQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLCBtZWFuaW5nIGl0JiMzOTtzIGhpZ2hseSBzdXNjZXB0aWJsZSB0byBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBpbmNvcnJlY3Qgc3RhdGVzLgoqICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmZjX2dlbmxfbGxjX3NkcmVxYCwgc28gdGhhdCYjMzk7cyBzcG90IG9uLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJJiMzOTt2ZSBnb3QgdGhpczogYFsmIzM0O05GQyYjMzQ7XWAuIEFuZCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgaW5jbHVkZSBgWyYjMzQ7TkZDJiMzNDssICYjMzQ7TkZDX1NJTSYjMzQ7XWAgdG8gbWF4aW1pemUgcmVhY2hhYmlsaXR5LgoqICAgYFJlYXNvbmluZ2A6IEhlcmUmIzM5O3MgdGhlIGNvcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG5mY19nZW5sX2xsY19zZHJlcSgpYC4gSXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBieSBlbnN1cmluZyB0aGUgcHJvcGVyIGZyZWVpbmcgb2YgU0RQIFRMViBsaXN0IGVudHJpZXMsIGJvdGggaW4gZXJyb3IgY2FzZXMgYW5kIGFmdGVyIHNlbmRpbmcgdGhlIFNOTCBTRFJFUSBtZXNzYWdlLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rLCBhbmQgaXQgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuCgpFdmVyeXRoaW5nIGlzIG1ldGljdWxvdXNseSBjaGVja2VkIGFuZCB2ZXJpZmllZC4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19nZW5sX2xsY19zZHJlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gbmV0L25mYy9uZXRsaW5rLmMgKG5mY19nZW5sX2xsY19zZHJlcSkuIEluIHRoZSBldmVudCBvZiBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgZmFpbHVyZSwgVExWIGFsbG9jYXRpb24gZmFpbHVyZSwgb3Igc2VuZCBmYWlsdXJlLCBwcmV2aW91c2x5IGFsbG9jYXRlZCBUTFYgZW50cmllcyBpbiBgc2RyZXFfbGlzdGAgd2VyZSBub3QgY2xlYW5lZCB1cCBiZWZvcmUgcmV0dXJuaW5nLiBUaGUgZml4IGludHJvZHVjZXMgYSBjYWxsIHRvIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KWAgb24gdGhlIGV4aXQgcGF0aCBhbmQgdXBkYXRlcyBlcnJvciBqdW1wIHRhcmdldHMgdG8gaXQuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhIChgc2RyZXFfbGlzdGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBJTklUX0hMSVNUX0hFQURgIGJlZm9yZSBhbnkgZXJyb3IgYnJhbmNoZXMpLlxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYzg0NmEzZDdiNjRjZWYzYmQxNzM5NTZlMDVjYTZkNWE3MzEwOTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTM6MzE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmZjL25ldGxpbmsuYyBiL25ldC9uZmMvbmV0bGluay5jCmluZGV4IDBjNTg4MjRjYjE1MGQuLjIyNGJkZmEyZGQwZGMgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmV0bGluay5jCkBAIC0xMTgxLDcgJiM0MzsxMTgxLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCQlpZiAocmMgIT0gMCkgewogCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBwdXRfbG9jYWw7CiYjNDM7CQkJZ290byBmcmVlX2xpc3Q7CiAJCX0KIAogCQlpZiAoIXNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSkKQEAgLTEyMDAsNyAmIzQzOzEyMDAsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlzZHJlcSA9IG5mY19sbGNwX2J1aWxkX3NkcmVxX3Rsdih0aWQsIHVyaSwgdXJpX2xlbik7CiAJCWlmIChzZHJlcSA9PSBOVUxMKSB7CiAJCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIHB1dF9sb2NhbDsKJiM0MzsJCQlnb3RvIGZyZWVfbGlzdDsKIAkJfQogCiAJCXRsdnNfbGVuICYjNDM7PSBzZHJlcS0mZ3Q7dGx2X2xlbjsKQEAgLTEyMTUsNiAmIzQzOzEyMTUsOSBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJcmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgJmFtcDtzZHJlcV9saXN0LCB0bHZzX2xlbik7CiAKJiM0MztmcmVlX2xpc3Q6CiYjNDM7CW5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KCZhbXA7c2RyZXFfbGlzdCk7CiYjNDM7CiBwdXRfbG9jYWw6CiAJbmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBjb2RlIGNoYW5nZXMgd2FycmFudCB0aGUgZXhwZW5zZSBvZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiAqKktNU0FOIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCAqb25seSogS01TQU4gY2FuIGRldGVjdC4qKiBBbnl0aGluZyBLQVNBTiwgTG9ja0RlcCwgb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgd291bGQgZmluZCBpcyBhIG5vLWdvIGZvciBLTVNBTi4gVGhhdCYjMzk7cyB0aGUgZ3VpZGluZyBwcmluY2lwbGUuCgpTbywgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBjcml0aWNhbCBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMsIHBhcnRpY3VsYXJseSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdGAgYW5kIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIGFyb3VuZCBsaW5lIDExODEgaW4gYG5ldC9uZmMvbmV0bGluay5jYC4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29kZSBmcm9tIGxpbmVzIDExNTAtMTI0MC4gSSB3aWxsIGxvb2sgZm9yIGFueSByZWQgZmxhZ3MsIGFueSBoaW50IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gYSB3YXkgdGhhdCAqb25seSogS01TQU4gY291bGQgdW5jb3Zlci4gVGhpcyBpcyB0aGUgY3J1eCBvZiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0gfHxcbjExNTE6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tORkNfQVRUUl9MTENfU0RQXSlcbjExNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTUzOlx0XG4xMTU0Olx0XHRpZHggPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xuMTE1NTpcdFxuMTE1NjpcdFx0ZGV2ID0gbmZjX2dldF9kZXZpY2UoaWR4KTtcbjExNTc6XHRcdGlmICghZGV2KVxuMTE1ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjExNTk6XHRcbjExNjA6XHRcdGRldmljZV9sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTE2MTpcdFxuMTE2MjpcdFx0aWYgKGRldi1cdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xuMTE2MzpcdFx0XHRyYyA9IC1FTk9MSU5LO1xuMTE2NDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTY1Olx0XHR9XG4xMTY2Olx0XG4xMTY3Olx0XHRsb2NhbCA9IG5mY19sbGNwX2ZpbmRfbG9jYWwoZGV2KTtcbjExNjg6XHRcdGlmICghbG9jYWwpIHtcbjExNjk6XHRcdFx0cmMgPSAtRU5PREVWO1xuMTE3MDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2c2RyZXFfbGlzdCk7XG4xMTc0Olx0XG4xMTc1Olx0XHR0bHZzX2xlbiA9IDA7XG4xMTc2Olx0XG4xMTc3Olx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xuMTE3ODpcdFx0XHRyYyA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzZHBfYXR0cnMsIE5GQ19TRFBfQVRUUl9NQVgsXG4xMTc5Olx0XHRcdFx0XHRcdFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXG4xMTgwOlx0XHRcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbjExODE6XHRcbjExODI6XHRcdFx0aWYgKHJjICE9IDApIHtcbjExODM6XHRcdFx0XHRyYyA9IC1FSU5WQUw7XG4xMTg0Olx0XHRcdFx0Z290byBmcmVlX2xpc3Q7XG4xMTg1Olx0XHRcdH1cbjExODY6XHRcbjExODc6XHRcdFx0aWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pXG4xMTg4Olx0XHRcdFx0Y29udGludWU7XG4xMTg5Olx0XG4xMTkwOlx0XHRcdHVyaV9sZW4gPSBubGFfbGVuKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTkxOlx0XHRcdGlmICh1cmlfbGVuID09IDApXG4xMTkyOlx0XHRcdFx0Y29udGludWU7XG4xMTkzOlx0XG4xMTk0Olx0XHRcdHVyaSA9IG5sYV9kYXRhKHNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSk7XG4xMTk1Olx0XHRcdGlmICgqdXJpID09IDApXG4xMTk2Olx0XHRcdFx0Y29udGludWU7XG4xMTk3Olx0XG4xMTk4Olx0XHRcdHRpZCA9IGxvY2FsLVx1MDAzZXNkcmVxX25leHRfdGlkJiM0MzsmIzQzOztcbjExOTk6XHRcbjEyMDA6XHRcdFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xuMTIwMTpcdFx0XHRpZiAoc2RyZXEgPT0gTlVMTCkge1xuMTIwMjpcdFx0XHRcdHJjID0gLUVOT01FTTtcbjEyMDM6XHRcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbjEyMDQ6XHRcdFx0fVxuMTIwNTpcdFxuMTIwNjpcdFx0XHR0bHZzX2xlbiAmIzQzOz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbjEyMDc6XHRcbjEyMDg6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSwgXHUwMDI2c2RyZXFfbGlzdCk7XG4xMjA5Olx0XHR9XG4xMjEwOlx0XG4xMjExOlx0XHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2c2RyZXFfbGlzdCkpIHtcbjEyMTI6XHRcdFx0cmMgPSAtRUlOVkFMO1xuMTIxMzpcdFx0XHRnb3RvIHB1dF9sb2NhbDtcbjEyMTQ6XHRcdH1cbjEyMTU6XHRcbjEyMTY6XHRcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcbjEyMTc6XHRcbjEyMTg6XHRmcmVlX2xpc3Q6XG4xMjE5Olx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KTtcbjEyMjA6XHRcbjEyMjE6XHRwdXRfbG9jYWw6XG4xMjIyOlx0XHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuMTIyMzpcdFxuMTIyNDpcdGV4aXQ6XG4xMjI1Olx0XHRkZXZpY2VfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuMTIyNjpcdFxuMTIyNzpcdFx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbjEyMjg6XHRcbjEyMjk6XHRcdHJldHVybiByYztcbjEyMzA6XHR9XG4xMjMxOlx0XG4xMjMyOlx0c3RhdGljIGludCBuZmNfZ2VubF9md19kb3dubG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTIzMzpcdHtcbjEyMzQ6XHRcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4xMjM1Olx0XHRpbnQgcmM7XG4xMjM2Olx0XHR1MzIgaWR4O1xuMTIzNzpcdFx0Y2hhciBmaXJtd2FyZV9uYW1lW05GQ19GSVJNV0FSRV9OQU1FX01BWFNJWkUgJiM0MzsgMV07XG4xMjM4Olx0XG4xMjM5Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkZDX0FUVFJfREVWSUNFX0lOREVYXSB8fCAhaW5mby1cdTAwM2VhdHRyc1tORkNfQVRUUl9GSVJNV0FSRV9OQU1FXSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGFuZCBgc2RyZXFfbGlzdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW50ZXJuYWxseSB3aXRoIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYHNkcmVxX2xpc3RgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBoYW5kbGluZyBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0cyB3aXRoaW4gdGhlIExMQ1AgcHJvdG9jb2wsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNEIChTZXJ2aWNlIERpc2NvdmVyeSkgcmVxdWVzdCBsaXN0LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgcmlnaHQgdG8gdGhlIGNyaXRpY2FsIHBvaW50cyBpbnZvbHZpbmcgYHNkcmVxX2xpc3RgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3NlbmRfc25sX3NkcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcC5oPTIzOD1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTIzOS1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQwOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwLmgtMjQxLVx0XHRcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTY5PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Mi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5MzppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5NC1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTEyMTUtXG5uZXQvbmZjL25ldGxpbmsuYzoxMjE2Olx0cmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xubmV0L25mYy9uZXRsaW5rLmMtMTIxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTExDUCBDb21tYW5kcyBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgaG93IExMQ1AgY29tbWFuZHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBORkMgc3RhY2suIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIGxvY2F0aW9uIGluIG1pbmQgLSBsZXQmIzM5O3MgemVybyBpbiBvbiBgbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU5My4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIHByb2Nlc3NpbmcgbG9naWMga2lja3MgaW4sIG9yIGF0IGxlYXN0IHRoZSBicmFuY2hpbmcgdGhhdCBkZWNpZGVzIGhvdyB0aGluZ3MgZ2V0IHByb2Nlc3NlZC4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgaW4gbW9yZSBkZXRhaWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgY29tbWFuZCBkaXNwYXRjaCwgdGhlIHBhcnNpbmcgb2YgaW5jb21pbmcgTExDUCBmcmFtZXMsIG9yIHBlcmhhcHMgdGhlIGhhbmRsaW5nIG9mIGNlcnRhaW4gY29udHJvbCBtZXNzYWdlcy4gTGluZSA1OTMgaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBvcGVyYXRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9jb21tYW5kcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODU6XHRcdFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2KHNkcCk7XG4gNTg2Olx0XHR9XG4gNTg3Olx0XG4gNTg4Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZsb2NhbC1cdTAwM2V0eF9xdWV1ZSwgc2tiKTtcbiA1ODk6XHRcbiA1OTA6XHRcdHJldHVybiAwO1xuIDU5MTpcdH1cbiA1OTI6XHRcbiA1OTM6XHRpbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbiA1OTQ6XHRcdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXG4gNTk1Olx0e1xuIDU5NjpcdFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xuIDU5NzpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gNTk4Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDU5OTpcdFxuIDYwMDpcdFx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XG4gNjAxOlx0XHRpZiAoSVNfRVJSKHNrYikpXG4gNjAyOlx0XHRcdHJldHVybiBQVFJfRVJSKHNrYik7XG4gNjAzOlx0XG4gNjA0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXNkcmVxX2xvY2spO1xuIDYwNTpcdFxuIDYwNjpcdFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKSlcbiA2MDc6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmxvY2FsLVx1MDAzZXNkcmVxX3RpbWVyLFxuIDYwODpcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDMgKiBsb2NhbC1cdTAwM2VyZW1vdGVfbHRvKSk7XG4gNjA5Olx0XG4gNjEwOlx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcmVxLCBuLCB0bHZfbGlzdCwgbm9kZSkge1xuIDYxMTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDt0aWQgJWQgZm9yICVzXFxuXCYjMzQ7LCBzZHJlcS1cdTAwM2V0aWQsIHNkcmVxLVx1MDAzZXVyaSk7XG4gNjEyOlx0XG4gNjEzOlx0XHRcdHNrYl9wdXRfZGF0YShza2IsIHNkcmVxLVx1MDAzZXRsdiwgc2RyZXEtXHUwMDNldGx2X2xlbik7XG4gNjE0Olx0XG4gNjE1Olx0XHRcdGhsaXN0X2RlbChcdTAwMjZzZHJlcS1cdTAwM2Vub2RlKTtcbiA2MTY6XHRcbiA2MTc6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSwgXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xuIDYxODpcdFx0fVxuIDYxOTpcdFxuIDYyMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXNkcmVxX2xvY2spO1xuIDYyMTpcdFxuIDYyMjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bG9jYWwtXHUwMDNldHhfcXVldWUsIHNrYik7XG4gNjIzOlx0XG4gNjI0Olx0XHRyZXR1cm4gMDtcbiA2MjU6XHR9XG4gNjI2Olx0XG4gNjI3Olx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxuIDYyODpcdHtcbiA2Mjk6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNjMwOlx0XHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuIDYzMTpcdFx0dTE2IHNpemUgPSAxOyAvKiBSZWFzb24gY29kZSAqL1xuIDYzMjpcdFxuIDYzMzpcdFx0cHJfZGVidWcoXCYjMzQ7U2VuZGluZyBETSByZWFzb24gMHgleFxcblwmIzM0OywgcmVhc29uKTtcbiA2MzQ6XHRcbiA2MzU6XHRcdGlmIChsb2NhbCA9PSBOVUxMKVxuIDYzNjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA2Mzc6XHRcbiA2Mzg6XHRcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiA2Mzk6XHRcdGlmIChkZXYgPT0gTlVMTClcbiA2NDA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNjQxOlx0XG4gNjQyOlx0XHRzaXplICYjNDM7PSBMTENQX0hFQURFUl9TSVpFO1xuIDY0MzpcdFx0c2l6ZSAmIzQzOz0gZGV2LVx1MDAzZXR4X2hlYWRyb29tICYjNDM7IGRldi1cdTAwM2V0eF90YWlscm9vbSAmIzQzOyBORkNfSEVBREVSX1NJWkU7XG4gNjQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgTGVha3MgaW4gTkZDIExMQ1AgU2VydmljZSBEaXNjb3ZlcnkgUmVxdWVzdCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIGlmIGBuZmNfbGxjcF9hbGxvY2F0ZV9zbmwobG9jYWwsIHRsdnNfbGVuKWAgZmFpbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHJldHVybmluZyBhbiBgRVJSX1BUUihza2IpYC4gQ3J1Y2lhbGx5LCBpdCByZXR1cm5zICpiZWZvcmUqIGNvbnN1bWluZyB0aGUgYHRsdl9saXN0YC4gVGhhdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGxlYWsuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgd2hlcmUgdGhpcyBpcyBjYWxsZWQ6IGBuZmNfZ2VubF9sbGNfc2RyZXFgLiBUaGUgb3JpZ2luYWwgY29kZSBsb29rZWQgbGlrZSB0aGlzOgoKYGBgYwoJcmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgJmFtcDtzZHJlcV9saXN0LCB0bHZzX2xlbik7CgpwdXRfbG9jYWw6CgluZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpOwpgYGAKClRoZSBvbGQgZmxvdyB1c2VkIHRvIGhhdmUgYSBsb29wIHRoYXQgY2hlY2tlZDogYElmIHJjICE9IDAgb3Igc2RyZXEgPT0gTlVMTGA6IGBnb3RvIHB1dF9sb2NhbDtgLiBUaGF0JiMzOTtzIGEgcHJvYmxlbSwgYmVjYXVzZSBpZiB0aGVyZSYjMzk7cyBhbiBlcnJvciBpbiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIChsaWtlIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUgSSBtZW50aW9uZWQpLCBvciBpZiB0aGUgcmV0dXJuIGNvZGUgaXMgbm9uLXplcm8sIHRoZSBjb2RlIGp1bXBzIHRvIGBwdXRfbG9jYWxgICp3aXRob3V0KiBmcmVlaW5nIHRoZSBgc2RyZXFfbGlzdGAuICBBbm90aGVyIGxlYWshCgpCdXQuLi4gd2hhdCBpZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGFjdHVhbGx5ICpzdWNjZWVkcyo/IExldCYjMzk7cyB0cmFjZSBpdC4gSW5zaWRlIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIEkgc2VlIHRoaXMgY3JpdGljYWwgc25pcHBldDoKCmBgYGMKCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcmVxLCBuLCB0bHZfbGlzdCwgbm9kZSkgewoJCQlwcl9kZWJ1ZygmIzM0O3RpZCAlZCBmb3IgJXNcbiYjMzQ7LCBzZHJlcS0mZ3Q7dGlkLCBzZHJlcS0mZ3Q7dXJpKTsKCgkJCXNrYl9wdXRfZGF0YShza2IsIHNkcmVxLSZndDt0bHYsIHNkcmVxLSZndDt0bHZfbGVuKTsKCgkJCWhsaXN0X2RlbCgmYW1wO3NkcmVxLSZndDtub2RlKTsKCgkJCWhsaXN0X2FkZF9oZWFkKCZhbXA7c2RyZXEtJmd0O25vZGUsICZhbXA7bG9jYWwtJmd0O3BlbmRpbmdfc2RyZXFzKTsKCQl9CmBgYAoKQWhhISAgRWFjaCBlbnRyeSBpbiBgdGx2X2xpc3RgIGlzICptb3ZlZCogdG8gYGxvY2FsLSZndDtwZW5kaW5nX3NkcmVxc2AuICBTbywgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCAqc3VjY2VlZHMqLCB0aGUgb3JpZ2luYWwgYHRsdl9saXN0YCAod2hpY2ggaXMgYCZhbXA7c2RyZXFfbGlzdGApIGlzIG5vdyAqZW1wdHkqISAoYGhsaXN0X2VtcHR5KCZhbXA7c2RyZXFfbGlzdCkgPT0gdHJ1ZWApLiBTbywgbm8gbGVhayEgIFRoYXQmIzM5O3MgZ29vZC4KClNvLCB0aGUgY3JpdGljYWwgY2FzZXMgYXJlIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmVzIGFuZCB0aG9zZSBub24temVybyByZXR1cm4gY29kZXMgKmJlZm9yZSogdGhlIGxpc3QgaXMgZW1wdGllZC4gTm93IEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGxpc3QgaXMgdWx0aW1hdGVseSBjbGVhbmVkIHVwLCBsZXQmIzM5O3MgZmluZCB3aGVyZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGlzIHVzZWQgYW5kIHNlZSBpZiBpdCBpcyBhcHByb3ByaWF0ZWx5IGNhbGxlZC4gSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGdyZXBwaW5nIG5vdyB0byBiZSBzdXJlIG9mIHRoZSBmaW5hbCBjbGVhbnVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3AuaD0yMzI9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xubmV0L25mYy9sbGNwLmgtMjM0LXZvaWQgbmZjX2xsY3BfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE4MS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTcxLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VzZHJlcV90aW1lb3V0X3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZsb2NhbC1cdTAwM2VwZW5kaW5nX3NkcmVxcyk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3My19XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy00MjMtXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzZHJlc19saXN0KTtcbm5ldC9uZmMvbmV0bGluay5jLTQyNS1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYz0xMTM3PXN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XG5uZXQvbmZjL25ldGxpbmsuYzoxMjE5Olx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7XG5uZXQvbmZjL25ldGxpbmsuYy0xMjIwLVxuLS1cbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XG5uZXQvbmZjL25mYy5oOjU5OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpO1xubmV0L25mYy9uZmMuaC02MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBsbGNwX2NvbW1hbmRzLmMgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AgYW5kIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBTRFAgVExWIGxpc3RzLCBhbmQgdGhpcyBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGZyZWUgb3BlcmF0aW9uLCBidXQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGFueSBzdWJ0bGV0aWVzIG9yIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX2NvbW1hbmRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFxuIDE3MTpcdFx0cmV0dXJuIHNkcmVxO1xuIDE3MjpcdH1cbiAxNzM6XHRcbiAxNzQ6XHR2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxuIDE3NTpcdHtcbiAxNzY6XHRcdGtmcmVlKHNkcC1cdTAwM2V0bHYpO1xuIDE3NzpcdFx0a2ZyZWUoc2RwKTtcbiAxNzg6XHR9XG4gMTc5Olx0XG4gMTgwOlx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcbiAxODE6XHR7XG4gMTgyOlx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xuIDE4MzpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gMTg0Olx0XG4gMTg1Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkcCwgbiwgaGVhZCwgbm9kZSkge1xuIDE4NjpcdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RwLVx1MDAzZW5vZGUpO1xuIDE4NzpcdFxuIDE4ODpcdFx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHYoc2RwKTtcbiAxODk6XHRcdH1cbiAxOTA6XHR9XG4gMTkxOlx0XG4gMTkyOlx0aW50IG5mY19sbGNwX3BhcnNlX2diX3RsdihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuIDE5MzpcdFx0XHRcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pXG4gMTk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjYzCgkJCQkJCQlvdXRwdXQ6IDMxMwoJCQkJCQkJdGhvdWdodHM6IDE1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTWVtb3J5IExlYWsgRml4IGluIE5GQyBOZXRsaW5rIEludGVyZmFjZTogS01TQU4gUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBmdW5jdGlvbiBqdXN0IGl0ZXJhdGVzIHRocm91Z2ggYSBsaXN0LCBkZWxldGVzIGVhY2ggZWxlbWVudCwgYW5kIGZyZWVzIHRoZSBhc3NvY2lhdGVkIG1lbW9yeS4gSWYgdGhlIGxpc3QgaXMgZW1wdHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIHRoZSBsb29wIGRvZXNuJiMzOTt0IGV2ZW4gcnVuLiAgQW5kLCBjcnVjaWFsbHksIGFueSByZW1haW5pbmcgZWxlbWVudHMgaW4gYHNkcmVxX2xpc3RgIGFyZSBhbHNvIGZyZWVkIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb3Igc2VuZGluZyBvZiB0aGUgU0RSRVEuCgpTbywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBtZW1vcnkgbGVhayBpbiBgbmZjX2dlbmxfbGxjX3NkcmVxKClgLiBJdCBsb29rcyBsaWtlIHdoZW4gYG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCgpYCBmYWlscywgb3IgYWxsb2NhdGlvbiBmYWlscyBpbiBgbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KClgLCBvciBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoKWAgaXRzZWxmIGZhaWxzLCB0aGUgY29kZSBwcmV2aW91c2x5IGp1bXBlZCB0byBgcHV0X2xvY2FsYCB3aXRob3V0IGNsZWFuaW5nIHVwIHRoZSBhbGxvY2F0ZWQgVExWcy4gTm93LCB0aGUgcGF0Y2ggY29ycmVjdGx5IGFkZHMgYSBgZnJlZV9saXN0OmAgbGFiZWwgdG8gY2FsbCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtzZHJlcV9saXN0KTtgIGJlZm9yZSBgcHV0X2xvY2FsYCBmb3IgYSBjb25zaXN0ZW50IGNsZWFudXAuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLTVNBTi4gQXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBoZXJlPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFdlJiMzOTtyZSBub3Qgc2VuZGluZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgYW55IG9mIHRob3NlIG1ldGhvZHMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIFRoZSBgc2RyZXFfbGlzdGAgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX0hMSVNUX0hFQUQoJmFtcDtzZHJlcV9saXN0KTtgIGF0IGxpbmUgMTE3MyBiZWZvcmUgYW55IHVzZSBvciBicmFuY2guCjMuICAqKkFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOby4gVGhpcyBwYXRjaCAqb25seSogZnJlZXMgbWVtb3J5LiBObyBuZXcgYWxsb2NhdGlvbnMgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGluaXRpYWxpemVkIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyLgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcz8qKiBEZWZpbml0ZWx5IG5vdC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggY2xlYW5pbmcgdXAgYWxsb2NhdGVkIG1lbW9yeS4KClNvLCBubywgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBBbGwgdGhlIHBhdGNoIGRvZXMgaXMgZnJlZSBtZW1vcnksIGFuZCB0aGF0JiMzOTtzIGl0IQoKQmFzaWNhbGx5LCBpdCYjMzk7cyBhIG1lbW9yeSBsZWFrIGZpeC4gSWYgYW55IGJ1Z3MgZXhpc3QgaGVyZSwgdGhleSYjMzk7ZCBiZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIGxpa2UgZG91YmxlIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGludmFsaWQgbGlzdCBvcGVyYXRpb25zLiBLQVNBTi9TTFVCIGRlYnVnIGlzIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgY2F0Y2hpbmcgdGhvc2UuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gSXQgZG9lc24mIzM5O3QgYXBwbHkgaGVyZS4KCioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4qKgoKVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBuZXRsaW5rIGludGVyZmFjZSYjMzk7cyBgbmZjX2dlbmxfbGxjX3NkcmVxKClgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBhbGxvY2F0ZWQgVExWIG9iamVjdHMgd2l0aGluIHRoZSBgc2RyZXFfbGlzdGAgd2VyZSBsZWFrZWQgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIChmYWlsZWQgYXR0cmlidXRlIHBhcnNpbmcsIGFsbG9jYXRpb24gZXJyb3JzLCBvciBmYWlsdXJlIG9mIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcSgpYCkuIFRoZSBmaXggcm91dGVzIGVycm9yIHBhdGhzIHRocm91Z2ggYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KCZhbXA7c2RyZXFfbGlzdClgIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBvYmplY3RzLgoKVGhlIGNoYW5nZXMgaW52b2x2ZSBzdHJpY3RseSBmcmVlaW5nIGhlYXAtYWxsb2NhdGVkIG9iamVjdHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgaW52YWxpZCBsaXN0IG9wZXJhdGlvbnMpLCB3aGljaCBhcmUgc3BlY2lmaWNhbGx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnZ2luZyBmZWF0dXJlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgY29weSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYHNkcmVxX2xpc3RgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBwb3RlbnRpYWwgYGdvdG8gZnJlZV9saXN0YCB1c2FnZS4gVGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCwgYW5kIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUuIFRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIG9mIHRoaXMgcGF0Y2ggYXJlIGJldHRlciBzdWl0ZWQgdG8gS0FTQU4gdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gbmV0L25mYy9uZXRsaW5rLmMgKG5mY19nZW5sX2xsY19zZHJlcSkuIEluIHRoZSBldmVudCBvZiBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgZmFpbHVyZSwgVExWIGFsbG9jYXRpb24gZmFpbHVyZSwgb3Igc2VuZCBmYWlsdXJlLCBwcmV2aW91c2x5IGFsbG9jYXRlZCBUTFYgZW50cmllcyBpbiBgc2RyZXFfbGlzdGAgd2VyZSBub3QgY2xlYW5lZCB1cCBiZWZvcmUgcmV0dXJuaW5nLiBUaGUgZml4IGludHJvZHVjZXMgYSBjYWxsIHRvIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcdTAwMjZzZHJlcV9saXN0KWAgb24gdGhlIGV4aXQgcGF0aCBhbmQgdXBkYXRlcyBlcnJvciBqdW1wIHRhcmdldHMgdG8gaXQuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhIChgc2RyZXFfbGlzdGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBJTklUX0hMSVNUX0hFQURgIGJlZm9yZSBhbnkgZXJyb3IgYnJhbmNoZXMpLlxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayBpbiBuZXQvbmZjL25ldGxpbmsuYyAobmZjX2dlbmxfbGxjX3NkcmVxKS4gSW4gdGhlIGV2ZW50IG9mIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyBmYWlsdXJlLCBUTFYgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciBzZW5kIGZhaWx1cmUsIHByZXZpb3VzbHkgYWxsb2NhdGVkIFRMViBlbnRyaWVzIGluIGBzZHJlcV9saXN0YCB3ZXJlIG5vdCBjbGVhbmVkIHVwIGJlZm9yZSByZXR1cm5pbmcuIFRoZSBmaXggaW50cm9kdWNlcyBhIGNhbGwgdG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXG4tIFRoZSBjaGFuZ2VzIHNvbGVseSBpbnZvbHZlIGVycm9yIGNsZWFudXAgYW5kIGZyZWVpbmcgaGVhcCBtZW1vcnkgKGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdGApLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSwgdXNlLWFmdGVyLWZyZWUsIG9yIGNvcnJ1cHRlZCBsaXN0IHRyYXZlcnNhbCkgYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIG1vbml0b3JlZCBieSBLQVNBTiBhbmQgU0xVQiBkZWJ1Zy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzE6MjQuMjA4MDQ1MzcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTE5MTkwNDE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfZ2VubF9sbGNfc2RyZXFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXFxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBhbmQgY29tcGxldGlvbiBoYW5kbGluZyBpbiBuZmNfZ2VubF9sbGNfc2RyZXEoKSBpbiBuZXQvbmZjL25ldGxpbmsuYyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBvZiBTRFAgVExWIGVsZW1lbnRzIHdoZW4gcHJvY2Vzc2luZyBORkNfQ01EX0xMQ19TRFJFUSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCBzb2Z0d2FyZS1lbXVsYXRlZCBORkMgZGV2aWNlcywgbWFraW5nIGl0IHdvcnRod2hpbGUgdG8gZnV6eiBmb3IgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBsaXN0IGhhbmRsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozMToyNC4yMDgwNTA2MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDU4MDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjODQ2YTNkN2I2NGNlZjNiZDE3Mzk1NmUwNWNhNmQ1YTczMTA5NjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6MzE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uZXRsaW5rLmMgYi9uZXQvbmZjL25ldGxpbmsuY1xcbmluZGV4IDBjNTg4MjRjYjE1MGQuLjIyNGJkZmEyZGQwZGMgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9uZXRsaW5rLmNcXG4rKysgYi9uZXQvbmZjL25ldGxpbmsuY1xcbkBAIC0xMTgxLDcgKzExODEsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0XFx0aWYgKHJjICE9IDApIHtcXG4gXFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIHB1dF9sb2NhbDtcXG4rXFx0XFx0XFx0Z290byBmcmVlX2xpc3Q7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICghc2RwX2F0dHJzW05GQ19TRFBfQVRUUl9VUkldKVxcbkBAIC0xMjAwLDcgKzEyMDAsNyBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRzZHJlcSA9IG5mY19sbGNwX2J1aWxkX3NkcmVxX3Rsdih0aWQsIHVyaSwgdXJpX2xlbik7XFxuIFxcdFxcdGlmIChzZHJlcSA9PSBOVUxMKSB7XFxuIFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0Z290byBwdXRfbG9jYWw7XFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR0bHZzX2xlbiArPSBzZHJlcS1cXHUwMDNldGx2X2xlbjtcXG5AQCAtMTIxNSw2ICsxMjE1LDkgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFxcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XFxuIFxcbitmcmVlX2xpc3Q6XFxuK1xcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFxcdTAwMjZzZHJlcV9saXN0KTtcXG4rXFxuIHB1dF9sb2NhbDpcXG4gXFx0bmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjMxOjI0LjcxOTQ3NDQxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTI1NjkxNzQ0Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19nZW5sX2xsY19zZHJlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGFuZCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIG5mY19nZW5sX2xsY19zZHJlcSgpIGluIG5ldC9uZmMvbmV0bGluay5jIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9mIFNEUCBUTFYgZWxlbWVudHMgd2hlbiBwcm9jZXNzaW5nIE5GQ19DTURfTExDX1NEUkVRIGdlbmVyaWMgbmV0bGluayBjb21tYW5kcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHNvZnR3YXJlLWVtdWxhdGVkIE5GQyBkZXZpY2VzLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGxpc3QgaGFuZGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWM4NDZhM2Q3YjY0Y2VmM2JkMTczOTU2ZTA1Y2E2ZDVhNzMxMDk2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjMxOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uZXRsaW5rLmMgYi9uZXQvbmZjL25ldGxpbmsuY1xuaW5kZXggMGM1ODgyNGNiMTUwZC4uMjI0YmRmYTJkZDBkYyAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbmV0bGluay5jXG4rKysgYi9uZXQvbmZjL25ldGxpbmsuY1xuQEAgLTExODEsNyArMTE4MSw3IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRcdGlmIChyYyAhPSAwKSB7XG4gXHRcdFx0cmMgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gcHV0X2xvY2FsO1xuK1x0XHRcdGdvdG8gZnJlZV9saXN0O1xuIFx0XHR9XG4gXG4gXHRcdGlmICghc2RwX2F0dHJzW05GQ19TRFBfQVRUUl9VUkldKVxuQEAgLTEyMDAsNyArMTIwMCw3IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdHNkcmVxID0gbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KHRpZCwgdXJpLCB1cmlfbGVuKTtcbiBcdFx0aWYgKHNkcmVxID09IE5VTEwpIHtcbiBcdFx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBwdXRfbG9jYWw7XG4rXHRcdFx0Z290byBmcmVlX2xpc3Q7XG4gXHRcdH1cbiBcbiBcdFx0dGx2c19sZW4gKz0gc2RyZXEtXHUwMDNldGx2X2xlbjtcbkBAIC0xMjE1LDYgKzEyMTUsOSBAQCBzdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0cmMgPSBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShsb2NhbCwgXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xuIFxuK2ZyZWVfbGlzdDpcbitcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpO1xuK1xuIHB1dF9sb2NhbDpcbiBcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozMToyNC43MTk0NzYxMDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjUyNzY0NTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGluIGBuZXQvbmZjL25ldGxpbmsuY2AsIHNwZWNpZmljYWxseSBpbiB0aGUgYG5mY19nZW5sX2xsY19zZHJlcWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBjaGFuZ2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgYGdvdG9gIHRhcmdldCBmb3IgZXJyb3IgaGFuZGxpbmcgaXMgYmVpbmcgY2hhbmdlZCBmcm9tIGBwdXRfbG9jYWxgIHRvIGBmcmVlX2xpc3RgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEl0IGxvb2tzIGxpa2UgaXQncyByZWxhdGVkIHRvIGZyZWVpbmcgYSBsaXN0IG9mIFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIFRMVnMgKFR5cGUtTGVuZ3RoLVZhbHVlKS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zLCBJIHNob3VsZCBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbmZjL25ldGxpbmsuY2AsIGFyb3VuZCBsaW5lIDExODEuIEkgbmVlZCB0byBrbm93IGhvdyBgc2RyZXFfbGlzdGAgaXMgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGVuc3VyZXMgdGhhdCB0aGUgYHNkcmVxX2xpc3RgIGlzIGFsd2F5cyBmcmVlZCwgZXZlbiBpZiBhbiBlcnJvciBvY2N1cnMgZWFybHkgaW4gdGhlIGZ1bmN0aW9uLiBCZWZvcmUsIGlmIGFuIGVycm9yIG9jY3VycmVkIGJlZm9yZSByZWFjaGluZyB0aGUgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBjYWxsLCB0aGUgYHNkcmVxX2xpc3RgIHdvdWxkbid0IGJlIGZyZWVkLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4ga2VybmVsIGNvZGUgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgcHVycG9zZSBvZiB0aGUgZml4LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHNpbWlsYXIgcGF0dGVybnMgYW5kIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBpcyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6MTcuMjQ3MTI1ODI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tORkNfQVRUUl9ERVZJQ0VfSU5ERVhdIHx8XFxuMTE1MTpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0xMQ19TRFBdKVxcbjExNTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdFxcdGlkeCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRkZXYgPSBuZmNfZ2V0X2RldmljZShpZHgpO1xcbjExNTc6XFx0XFx0aWYgKCFkZXYpXFxuMTE1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0ZGV2aWNlX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcXG4xMTYzOlxcdFxcdFxcdHJjID0gLUVOT0xJTks7XFxuMTE2NDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTE2NTpcXHRcXHR9XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGxvY2FsID0gbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpO1xcbjExNjg6XFx0XFx0aWYgKCFsb2NhbCkge1xcbjExNjk6XFx0XFx0XFx0cmMgPSAtRU5PREVWO1xcbjExNzA6XFx0XFx0XFx0Z290byBleGl0O1xcbjExNzE6XFx0XFx0fVxcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNkcmVxX2xpc3QpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHR0bHZzX2xlbiA9IDA7XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xcbjExNzg6XFx0XFx0XFx0cmMgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc2RwX2F0dHJzLCBORkNfU0RQX0FUVFJfTUFYLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXFxuMTE4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0XFx0aWYgKHJjICE9IDApIHtcXG4xMTgzOlxcdFxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMTg0OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjExODU6XFx0XFx0XFx0fVxcbjExODY6XFx0XFxuMTE4NzpcXHRcXHRcXHRpZiAoIXNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSlcXG4xMTg4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRcXHR1cmlfbGVuID0gbmxhX2xlbihzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTE6XFx0XFx0XFx0aWYgKHVyaV9sZW4gPT0gMClcXG4xMTkyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRcXHR1cmkgPSBubGFfZGF0YShzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTU6XFx0XFx0XFx0aWYgKCp1cmkgPT0gMClcXG4xMTk2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTc6XFx0XFxuMTE5ODpcXHRcXHRcXHR0aWQgPSBsb2NhbC1cXHUwMDNlc2RyZXFfbmV4dF90aWQrKztcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0XFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xcbjEyMDE6XFx0XFx0XFx0aWYgKHNkcmVxID09IE5VTEwpIHtcXG4xMjAyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4xMjAzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjEyMDQ6XFx0XFx0XFx0fVxcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRcXHR0bHZzX2xlbiArPSBzZHJlcS1cXHUwMDNldGx2X2xlbjtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlLCBcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIwOTpcXHRcXHR9XFxuMTIxMDpcXHRcXG4xMjExOlxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2c2RyZXFfbGlzdCkpIHtcXG4xMjEyOlxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMjEzOlxcdFxcdFxcdGdvdG8gcHV0X2xvY2FsO1xcbjEyMTQ6XFx0XFx0fVxcbjEyMTU6XFx0XFxuMTIxNjpcXHRcXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xcbjEyMTc6XFx0XFxuMTIxODpcXHRmcmVlX2xpc3Q6XFxuMTIxOTpcXHRcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdHB1dF9sb2NhbDpcXG4xMjIyOlxcdFxcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XFxuMTIyMzpcXHRcXG4xMjI0OlxcdGV4aXQ6XFxuMTIyNTpcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuMTIyNjpcXHRcXG4xMjI3OlxcdFxcdG5mY19wdXRfZGV2aWNlKGRldik7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6MTcuMjQ3MjUxMzY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI2MTczMzY4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMTEMgU0RSRVEgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIHRoZSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBmdW5jdGlvbiwgcHJlLXBhdGNoLCBpdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgZXhpc3RzLiBTcGVjaWZpY2FsbHksIGlmIGBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWRgIChsaW5lIDExODIpIG9yIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIChsaW5lIDEyMDEpIGVuY291bnRlcnMgYW4gZXJyb3IsIHRoZSBjb2RlIGp1bXBzIGRpcmVjdGx5IHRvIGBwdXRfbG9jYWxgLiBUaGUgcHJvYmxlbT8gQW55IGVsZW1lbnRzIGFscmVhZHkgYXBwZW5kZWQgdG8gYHNkcmVxX2xpc3RgIHdvdWxkIGJlIG9ycGhhbmVkLiBUaGF0J3MgYSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLlxuXG5IYW5nIG9uLi4uIHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2UgSSBuZWVkIHRvIGNvbnNpZGVyLiBMb29rIGF0IHRoZSBwb3N0LWxvb3Agc3RydWN0dXJlOlxuXG5gYGBjXG5cdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFx1MDAyNnNkcmVxX2xpc3QsIHRsdnNfbGVuKTtcblxucHV0X2xvY2FsOlxuXHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xuYGBgXG5cblRoZSBjYWxsIHRvIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgY29tZXMgKmJlZm9yZSogYHB1dF9sb2NhbGAuIE5vdywgSSdtIHF1ZXN0aW9uaW5nIHdoZXRoZXIgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBhY3R1YWxseSBjb25zdW1lcyB0aGUgYHNkcmVxX2xpc3RgIG9yIG5vdC4gSXMgdGhlIGxpc3QncyBkYXRhIGJlaW5nIHByb3Blcmx5IGhhbmRsZWQgYWZ0ZXIgdGhlIGNhbGw/IEkgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IHRoZSBsaXN0IGlzIGJlaW5nIGZyZWVkLCBtb3ZlZCwgb3IgY29waWVkIHRoZXJlLiBJIGNhbm5vdCB2ZXJpZnkgdGhpcyB1bmxlc3MgSSBjaGVjayB0aGUgZnVuY3Rpb24gYm9keS4gVGhlIGxlYWssIG9yIGxhY2sgb2YgbGVhaywgZGVwZW5kcyBvbiB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBvZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIHJpZ2h0IGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozMjo0OS44NjQ1OTE3NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5Mjg1OTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZmNfbGxjcF9zZW5kX3NubF9zZHJlcVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3AuaD0yMzg9aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVzKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmgtMjM5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbik7XFxubmV0L25mYy9sbGNwLmg6MjQwOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcC5oLTI0MS1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NTY5PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTkyLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5MzppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTQtXFx0XFx0XFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTIxNS1cXG5uZXQvbmZjL25ldGxpbmsuYzoxMjE2OlxcdHJjID0gbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEobG9jYWwsIFxcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XFxubmV0L25mYy9uZXRsaW5rLmMtMTIxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6NTEuNzU3NDYwMzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDkxNDEyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2A6XG5cbioqQW5hbHl6aW5nIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAuIExldCdzIGFzc3VtZSBpdCdzIHNpdHRpbmcgdGhlcmUgaW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiwgZ2l2ZW4gdGhlIG5hbWUsIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgc2VuZGluZyBvZiBhIFwiU2VydmljZSBOYW1lIExvb2t1cCAoU05MKSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSlcIiBtZXNzYWdlIHdpdGhpbiB0aGUgTExDUCAoTGluayBMYXllciBDb250cm9sIFByb3RvY29sKSBjb250ZXh0LiBMTENQLCBhcyBJIGtub3cgaXQsIGlzIHRoYXQgY3J1Y2lhbCBsYXllciBzaXR0aW5nIGFib3ZlIE5GQyBhbmQgb2ZmZXJpbmcgY29ubmVjdGlvbi1vcmllbnRlZCBjb21tdW5pY2F0aW9uLlxuXG5UaGVyZWZvcmUsIG15IG1pbmQgaXMgaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgdGhlIGZvbGxvd2luZyBwb2ludHMsIGFzIHRoaXMga2luZCBvZiByZXF1ZXN0IGlzIHRoZSBrZXkgdG8gc2VydmljZSBkaXNjb3Zlcnk6XG4qICAgKipQdXJwb3NlOioqIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBpcyBhYm91dCBzZWFyY2hpbmcgZm9yIGF2YWlsYWJsZSBORkMgc2VydmljZXMgb24gYSByZW1vdGUgZGV2aWNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIFNlcnZpY2UgTmFtZSBMb29rdXAgcHJvY2Vzcy5cbiogICAqKkxMQ1AgQ29udGV4dDoqKiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBpbnRlcmZhY2VzIGRpcmVjdGx5IHdpdGggdGhlIExMQ1AgcHJvdG9jb2wgc3RhY2suIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBmb3JtYXRzIGFuZCB0cmFuc21pdHMgdGhlIFNEUkVRIG1lc3NhZ2UgYXQgdGhlIExMQ1AgbGV2ZWwuIFByb2JhYmx5IHVzaW5nIHNwZWNpZmljIExMQ1AgcHJpbWl0aXZlcy9BUElzLCBub3QgcmF3IE5GQyBzaWduYWxpbmcuXG4qICAgKipEYXRhIFN0cnVjdHVyZToqKiBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBTRFJFUSwgaG9sZGluZyB0aGUgc2VydmljZSBuYW1lIHRvIGJlIGxvb2tlZCB1cCAob3IgcGVyaGFwcyBhIHdpbGRjYXJkIGluZGljYXRpbmcgYSBicm9hZCBzZWFyY2gpLiBUaGUgZnVuY3Rpb24gbWlnaHQgcG9wdWxhdGUgdGhpcyBzdHJ1Y3R1cmUgYW5kIHRoZW4gcGFzcyBpdCB0byB0aGUgbG93ZXIgbGF5ZXJzLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogU2VuZGluZyBhIHJlcXVlc3QgaXMgb25lIHRoaW5nLCBkZWFsaW5nIHdpdGggcG90ZW50aWFsIGVycm9ycyBhbmQgdGltZW91dHMgaXMgYW5vdGhlci4gSSdsbCBiZSBjdXJpb3VzIHRvIHNlZSBob3cgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBoYW5kbGVzIHRoaW5ncyBpZiB0aGUgY29tbXVuaWNhdGlvbiBmYWlscywgb3IgaWYgdGhlcmUncyBubyByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlLiBBcmUgdGhlcmUgcmV0cnkgbWVjaGFuaXNtcz8gVGltZW91dHM/IEVycm9yIGNvZGVzIHBhc3NlZCBiYWNrP1xuKiAgICoqQXN5bmNocm9ub3VzIE5hdHVyZToqKiBMTENQIGFuZCBORkMgYXJlIG9mdGVuIGFzeW5jaHJvbm91cy4gVGhpcyBmdW5jdGlvbiBtaWdodCBraWNrIG9mZiB0aGUgU0RSRVEgdHJhbnNtaXNzaW9uIGFuZCB0aGVuIHJldHVybiwgd2l0aCBhIGNhbGxiYWNrIG9yIGNvbXBsZXRpb24gaGFuZGxlciBiZWluZyB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlc3BvbnNlIGxhdGVyLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBwcm90ZWN0IHNoYXJlZCByZXNvdXJjZXMsIGlmIGFueS5cbiogICAqKkludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1bmN0aW9uczoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHJlbGF0ZSB0byBvdGhlciBMTENQIGZ1bmN0aW9ucyBvciBORkMgc3RhY2sgY29tcG9uZW50cz8gRG9lcyBpdCBjYWxsIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gYGxsY3BfY29tbWFuZHMuY2Agb3IgZWxzZXdoZXJlIHRvIGNvbnN0cnVjdCB0aGUgU0RSRVE/IERvZXMgaXQgY2FsbCBhIGZ1bmN0aW9uIHRvIHJlY2VpdmUgdGhlIFNEUkVTP1xuXG5MZXQncyBzZWUgd2hhdCdzIGluIHRoaXMgZnVuY3Rpb24uIEkgYW0gcmVhZHkgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjMyOjU4LjI0ODg3NTM5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU5MDpcXHRcXHRyZXR1cm4gMDtcXG4gNTkxOlxcdH1cXG4gNTkyOlxcdFxcbiA1OTM6XFx0aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuIDU5NDpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXFxuIDU5NTpcXHR7XFxuIDU5NjpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RyZXE7XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4gNTk4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDU5OTpcXHRcXG4gNjAwOlxcdFxcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xcbiA2MDE6XFx0XFx0aWYgKElTX0VSUihza2IpKVxcbiA2MDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2tiKTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX2xvY2spO1xcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcykpXFxuIDYwNzpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmxvY2FsLVxcdTAwM2VzZHJlcV90aW1lcixcXG4gNjA4OlxcdFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMyAqIGxvY2FsLVxcdTAwM2VyZW1vdGVfbHRvKSk7XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RyZXEsIG4sIHRsdl9saXN0LCBub2RlKSB7XFxuIDYxMTpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwidGlkICVkIGZvciAlc1xcXFxuXFxcIiwgc2RyZXEtXFx1MDAzZXRpZCwgc2RyZXEtXFx1MDAzZXVyaSk7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2IsIHNkcmVxLVxcdTAwM2V0bHYsIHNkcmVxLVxcdTAwM2V0bHZfbGVuKTtcXG4gNjE0OlxcdFxcbiA2MTU6XFx0XFx0XFx0aGxpc3RfZGVsKFxcdTAwMjZzZHJlcS1cXHUwMDNlbm9kZSk7XFxuIDYxNjpcXHRcXG4gNjE3OlxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZzZHJlcS1cXHUwMDNlbm9kZSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcyk7XFxuIDYxODpcXHRcXHR9XFxuIDYxOTpcXHRcXG4gNjIwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX2xvY2spO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3F1ZXVlLCBza2IpO1xcbiA2MjM6XFx0XFxuIDYyNDpcXHRcXHRyZXR1cm4gMDtcXG4gNjI1OlxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxcbiA2Mjg6XFx0e1xcbiA2Mjk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzI6NTguMjQ4OTcwNzQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzE1NzQ3MjY2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZXJ2aWNlIERpc2NvdmVyeSBSZXF1ZXN0IChTRFJFUSkgVHJhbnNtaXNzaW9uKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgZnVuY3Rpb24uIEhtbSwgdGhlIGZpcnN0IHN0ZXAgaXMgYWxsb2NhdGluZyBhIHNvY2tldCBidWZmZXIgKGBza2JgKSB1c2luZyBgbmZjX2xsY3BfYWxsb2NhdGVfc25sYC4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyBhbiBlcnJvciBwb2ludGVyLCBgUFRSX0VSUihza2IpYC4gSW1wb3J0YW50bHksIGluIHRoaXMgZmFpbHVyZSBzY2VuYXJpbywgdGhlIGBzZHJlcV9saXN0YCBpc24ndCB0b3VjaGVkLCByZW1haW5pbmcgYXMgaXQgd2FzLiBIb3dldmVyLCBpZiB0aGUgYWxsb2NhdGlvbiAqc3VjY2VlZHMqLCB0aGUgY29kZSBtb3ZlcyB0aGUgZWxlbWVudHMgZnJvbSBgc2RyZXFfbGlzdGAgdG8gYGxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzYC4gVGhpcyBtZWFucyBgc2RyZXFfbGlzdGAgaXMgbm93IGVtcHR5LiBHb29kLiBUaGUgYHNkcmVxX2xvY2tgIG11dGV4IGlzIGFsc28gYWNxdWlyZWQsIGFuZCB0aGUgYHNkcmVxX3RpbWVyYCBpcyBzdGFydGVkIGlmIHRoZXJlIGFyZSBubyBvdGhlciBwZW5kaW5nIFNEUkVRcywgYW5kIGVhY2ggU0RSRVEgaXMgcHJvY2Vzc2VkLlxuXG5Ob3csIGxvb2tpbmcgYXQgYG5mY19nZW5sX2xsY19zZHJlcWAsIGl0IGNhbGxzIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgd2l0aCBgc2RyZXFfbGlzdGAuIFRoZW4sIGFmdGVyIHRoZSBjYWxsLCBpdCBoaXRzIGBmcmVlX2xpc3Q6YCBhbmQgY2FsbHMgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNnNkcmVxX2xpc3QpYC5cblxuSG9sZCBvbi4gV2UganVzdCBlc3RhYmxpc2hlZCB0aGF0IHRoZSBgc2RyZXFfbGlzdGAgaXMgKmVtcHR5KiBhZnRlciBhICpzdWNjZXNzZnVsKiB0cmFuc21pc3Npb24uIFNvLCB3aGF0IGlzIGBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdGAgZG9pbmc/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGxpZXMsIGFuZCB3aGVyZSBhbnkgcG90ZW50aWFsIGNsZWFudXAgbWlnaHQgYmUuIEl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgdmVyaWZ5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBvciBtZW1vcnkgY29ycnVwdGlvbi4gSSBtdXN0IGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgdGhlIGxpc3QgaXMgdHJ1bHkgZnJlZWQsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgU0RSRVEgbGlmZWN5Y2xlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzQ6MDkuODIzNzAzMjUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1NDU3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcC5oPTIzMj12b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xcbm5ldC9uZmMvbGxjcC5oLTIzNC12b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3OS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODEte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzEtXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX3RpbWVvdXRfd29yayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcyk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzMtfVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTQyMy1cXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc2RyZXNfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtNDI1LVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XFxubmV0L25mYy9uZXRsaW5rLmM6MTIxOTpcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtMTIyMC1cXG4tLVxcbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XFxubmV0L25mYy9uZmMuaDo1OTp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKTtcXG5uZXQvbmZjL25mYy5oLTYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozNDoxMS44NTkxODIxOTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY1ODA1NTE0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCoqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYCBhbmQgaGF2ZSBhIGxvb2suIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGZhaXJseSBzdGFuZGFyZCBtZW1vcnkgZGVhbGxvY2F0aW9uIHJvdXRpbmUsIHByZXN1bWFibHkgY2xlYW5pbmcgdXAgYSBsaW5rZWQgbGlzdCBvciBhbiBhcnJheSBvZiBzb21lIHNvcnQgcmVsYXRlZCB0byBTRFAgKFNlcnZpY2UgRGlzY292ZXJ5IFByb3RvY29sKSBUTFZzIChUeXBlLUxlbmd0aC1WYWx1ZSkuIEtub3dpbmcgdGhlIGNvbnRleHQgaXMgYWx3YXlzIGtleSB3aXRoIHRoZXNlIE5GQyBpbXBsZW1lbnRhdGlvbnMsIHNvIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgb3IgYm91bmRhcnkgY2hlY2tzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTGV0J3Mgc2VlIGhvdyBlZmZpY2llbnRseSBpdCBoYW5kbGVzIHRoZSBjbGVhbnVwLCBlc3BlY2lhbGx5IGluIHBvdGVudGlhbGx5IGVycm9yLXByb25lIHNjZW5hcmlvcy4gSXQncyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eSBncml0dHkgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTExLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzQ6MjguNDM5NzM3MTE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29tbWFuZHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzQsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzQ6XFx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcXG4gMTc1OlxcdHtcXG4gMTc2OlxcdFxcdGtmcmVlKHNkcC1cXHUwMDNldGx2KTtcXG4gMTc3OlxcdFxcdGtmcmVlKHNkcCk7XFxuIDE3ODpcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdHZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpXFxuIDE4MTpcXHR7XFxuIDE4MjpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xcbiAxODM6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RwLCBuLCBoZWFkLCBub2RlKSB7XFxuIDE4NjpcXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnNkcC1cXHUwMDNlbm9kZSk7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdFxcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRpbnQgbmZjX2xsY3BfcGFyc2VfZ2JfdGx2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuIDE5MzpcXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKVxcbiAxOTQ6XFx0e1xcbiAxOTU6XFx0XFx0Y29uc3QgdTggKnRsdiA9IHRsdl9hcnJheTtcXG4gMTk2OlxcdFxcdHU4IHR5cGUsIGxlbmd0aDtcXG4gMTk3OlxcdFxcdHUxNiBvZmZzZXQgPSAwO1xcbiAxOTg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM0OjI4LjQzOTg1MDE3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE1MzU2MjA1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMTENQIFNEUCBSZXF1ZXN0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdClgIGZ1bmN0aW9uLiBJdCdzIHN1cHBvc2VkIHRvIGNsZWFuIHVwIHRoZSBgc2RyZXFfbGlzdGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZhaWxzLCB3aGV0aGVyIGR1ZSB0byBhbiBhbGxvY2F0aW9uIGVycm9yIG9yIHNvbWV0aGluZyB3aXRoaW4gdGhlIGxvb3AgaXRzZWxmICh0aGF0IGBnb3RvIGZyZWVfbGlzdGApLCBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgYW55IHJlbWFpbmluZyBpdGVtcyBpbiBgc2RyZXFfbGlzdGAuICBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQsIG9mIGNvdXJzZSwgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCAqc3VjY2VlZHMqLCB0aGUgYHNkcmVxX2xpc3RgIHNob3VsZCBiZSBlbXB0eSwgc28gdGhlIGBmcmVlX3NkcGAgY2FsbCBpcywgZWZmZWN0aXZlbHksIGEgbm8tb3AuIFN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuQnV0IHRoZW4sIGhvbGQgb24uLi4gbGluZSAxMjExLiAgSXQgY2hlY2tzIGlmIGBobGlzdF9lbXB0eShcdTAwMjZzZHJlcV9saXN0KWAgYW5kLCBpZiBzbywgcmV0dXJucyBhbiBgRUlOVkFMYCAqYW5kKiBqdW1wcyB0byBgcHV0X2xvY2FsYC4gSG1tLCBzbyBpZiBgc2RyZXFfbGlzdGAgaXMgZW1wdHksIGdvaW5nIHRvIGBwdXRfbG9jYWxgIG9yIGBmcmVlX2xpc3RgIGlzIHRoZSBzYW1lIHRoaW5nLCBiZWNhdXNlIGl0J3MgYWxyZWFkeSBlbXB0eSEgSXQncyBhIHJlZHVuZGFudCBjaGVjaywgd2hpY2ggKmNvdWxkKiBiZSBhIGJ1ZyBidXQgcHJvYmFibHkgaXNuJ3QgYSAqc2VyaW91cyogb25lLiBJdCBkb2VzIHJhaXNlIGEgcXVlc3Rpb24gdGhvdWdoLlxuXG5Ob3csIGxldCdzIGJhY2sgdXAuIFdoZXJlIGRvZXMgYG5mY19nZW5sX2xsY19zZHJlcWAgZXZlbiBnZXQgY2FsbGVkPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gQ2FuIEkgdHJpZ2dlciBpdCBlYXNpbHkgaW4gYSBzeXprYWxsZXIgc2V0dXAgb3IgYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAoUUVNVS9HQ0UpPyBXYWl0LCB0aGF0J3MgcmlnaHQuLi4gTkZDIGhhcyB2aXJ0dWFsIGRldmljZXMsIGFuZCBJIGJlbGlldmUgbmV0bGluayBjb21tYW5kcy4gQ2FuIG5ldGxpbmsgTkZDIGNvbW1hbmRzIGJlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2U/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZC4gQmV0dGVyIGxvb2sgYXQgYG5ldC9uZmMvbmV0bGluay5jYCBhbmQgZmlndXJlIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MDkuOTc1NDc0NzU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEyOTExMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2dlbmxfbGxjX3NkcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uZXRsaW5rLmM9MTA2OD1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZXRfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xMTM2LVxcbm5ldC9uZmMvbmV0bGluay5jOjExMzc6c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbmZjL25ldGxpbmsuYy0xMTM4LXtcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTE2OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBuZmNfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3NjMtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC9uZmMvbmV0bGluay5jOjE3NjQ6XFx0XFx0LmRvaXQgPSBuZmNfZ2VubF9sbGNfc2RyZXEsXFxubmV0L25mYy9uZXRsaW5rLmMtMTc2NS1cXHRcXHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjEwLjUwNjc3MzM3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDI0Mjg4NzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gTkZDIEdlbmVyaWMgTmV0bGluayBhbmQgU3l6a2FsbGVyKipcblxuT2theSwgc28gYG5mY19nZW5sX2xsY19zZHJlcWAgLSB0aGF0J3MgdGhlIGhhbmRsZXIgZm9yIHRoZSBgTkZDX0NNRF9MTENfU0RSRVFgIGdlbmVyaWMgbmV0bGluayBjb21tYW5kLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgd29uZGVyIGlmIFN5emthbGxlciBpcyBmdXp6aW5nIHRoZSBORkMgbmV0bGluayBpbnRlcmZhY2U/IFRoYXQncyBhIGdvb2QgcXVlc3Rpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgc3VwcG9ydCBmcm9tIFN5emthbGxlciBhbHJlYWR5LCBvciBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIHZpcnR1YWwgTkZDIGRldmljZXMuIE9yLCBwZXJoYXBzLCBnZW5lcmljIG5ldGxpbmsgY2FuIGJlIHNlbnQgZXZlbiB3aXRob3V0IGFueSBhY3R1YWwgaGFyZHdhcmUgb3IgdGhyb3VnaCBzb21lIHZpcnR1YWwgc2V0dXA/XG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBkZXZpY2UgZHJpdmVycy4gSSBuZWVkIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZmNgIGFuZCBgbmV0L25mY2AgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkga2luZCBvZiBORkMgc2ltdWxhdG9yLCB2aXJ0dWFsIGRldmljZSwgb3IgZXZlbiBhIFVTQiBkb25nbGUgZXhpc3QuIEZpbmRpbmcgYSB2aXJ0dWFsIGRldmljZSB3b3VsZCBiZSBpZGVhbCBmb3IgcmVwcm9kdWNpYmxlIGZ1enppbmcuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGxlYWQgbWUgdG93YXJkcyB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MjQuNzQ5NjY1NTgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQyMDU1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX3NpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MjQuODAyMDk3NDczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExODU0MDE4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORkMgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5GQyBkcml2ZXIgc2l0dWF0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHNjYW4gdGhlIGBkcml2ZXJzL25mY2AgZGlyZWN0b3J5LiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYXZhaWxhYmxlIGJ1aWxkaW5nIGJsb2NrcyBhcmUsIGhvdyBtYW55IGRpZmZlcmVudCBjaGlwc2V0cyBhcmUgc3VwcG9ydGVkLCBhbmQgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgc29mdHdhcmUgYXJjaGl0ZWN0dXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBmaWxlczogbGlrZWx5IHRoZSBjb3JlIE5GQyBkcml2ZXIgZW50cnkgcG9pbnRzLCBkZXZpY2Utc3BlY2lmaWMgZHJpdmVyIGltcGxlbWVudGF0aW9ucyAodGhvc2Ugd2lsbCBiZSB0aGUgb25lcyB3aXRoIHRoZSBjaGlwIG5hbWVzIGluIHRoZWlyIGZpbGUgbmFtZXMpLCBhbnkgcmVsZXZhbnQgZnJhbWV3b3JrIGNvZGUsIGFuZCBwb3RlbnRpYWxseSBhbnkgYm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIGluZmVyIHdoYXQga2luZCBvZiBhcmNoaXRlY3R1cmUgaGFzIGJlZW4gdXNlZCwgd2hldGhlciBpdCB1c2VzIGEgdHlwaWNhbCBsYXllcmVkIG1vZGVsIChORkMgY29yZSwgY29udHJvbGxlciBkcml2ZXJzLCBzcGVjaWZpYyBjaGlwIGRyaXZlcnMpLCBvciBpZiB0aGV5J3ZlIHRha2VuIGEgbW9yZSBtb25vbGl0aGljIGFwcHJvYWNoLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBjb21tb25hbGl0aWVzIGJldHdlZW4gY2hpcCBkcml2ZXJzLCBhbmQgcGVyaGFwcyB3aGljaCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkLiBVbHRpbWF0ZWx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdW5kZXJzdGFuZGluZyBzbyBJIGNhbiBkaXZlIGRlZXBlciBpbnRvIGFueXRoaW5nIHRoYXQgY2F0Y2hlcyBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MzYuNjU2MTE5NDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJtZWlfcGh5LmNcIixcbiAgICBcIm1laV9waHkuaFwiLFxuICAgIFwibmZjc2ltLmNcIixcbiAgICBcInBvcnQxMDAuY1wiLFxuICAgIFwidHJmNzk3MGEuY1wiLFxuICAgIFwidmlydHVhbF9uY2lkZXYuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJmZHBcIixcbiAgICBcIm1pY3JvcmVhZFwiLFxuICAgIFwibmZjbXJ2bFwiLFxuICAgIFwibnhwLW5jaVwiLFxuICAgIFwicG41MzNcIixcbiAgICBcInBuNTQ0XCIsXG4gICAgXCJzM2Z3cm41XCIsXG4gICAgXCJzdC1uY2lcIixcbiAgICBcInN0MjFuZmNhXCIsXG4gICAgXCJzdDk1aGZcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozOTozNi42NTYxODc2MzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTg4MTQwMDIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBTdWJzeXN0ZW0gZm9yIFZ1bG5lcmFiaWxpdHkgUmVzZWFyY2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgTkZDIHN1YnN5c3RlbSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGdldCB0byBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLiBJIHNlZSBhIGZldyBrZXkgcGllY2VzOiBgbmZjc2ltLmNgLCBgdmlydHVhbF9uY2lkZXYuY2AsIGFuZCBVU0IgZHJpdmVycyBsaWtlIGBwb3J0MTAwLmNgIGFuZCBgcG41MzMvdXNiLmNgLiBgdmlydHVhbF9uY2lkZXYuY2AgaXMgYSB2aXJ0dWFsIE5DSSBkZXZpY2UsIGFuZCBgbmZjc2ltLmNgIGlzIGFuIE5GQyBzaW11bGF0b3IsIGludGVyZXN0aW5nLiBUaGVuIHRoZXJlJ3Mgc3l6a2FsbGVyIHdpdGggcHNldWRvLXN5c2NhbGxzIGZvciBORkMgbmV0bGluaywgcmF3LWdhZGdldCBVU0IgTkZDLCBldGMuIFRoYXQgZ2l2ZXMgbWUgYSBoZWFkIHN0YXJ0LCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBmaWd1cmluZyBvdXQgaWYgSSBjYW4gdHJpZ2dlciBgbmZjX2dlbmxfbGxjX3NkcmVxYC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBuZWVkcyB0byBiZSBzYXRpc2ZpZWQuIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0IHNlbmRpbmcgYE5GQ19DTURfTExDX1NEUkVRYCBkaXJlY3RseSByZWFjaGVzIHRoaXMgZnVuY3Rpb24uIE9rYXksIHRoYXQncyBwcm9taXNpbmcuXG5cbk5vdywgdG8gYWN0dWFsbHkgZ2V0IGludG8gdGhhdCBsb29wLCBgbmZjX2dldF9kZXZpY2UoaWR4KWAgbmVlZHMgdG8gcmV0dXJuIGEgdmFsaWQgTkZDIGRldmljZS4gVGhlIGRldmljZSdzIGBkZXBfbGlua191cGAgZmxhZyBuZWVkcyB0byBiZSB0cnVlLCBhbmQgYG5mY19sbGNwX2ZpbmRfbG9jYWwoZGV2KWAgaGFzIHRvIHJldHVybiBhIGBsb2NhbGAgcG9pbnRlci4gVGhlIGBpZHhgIGNvbWVzIGZyb20gdGhlIG5ldGxpbmsgbWVzc2FnZSwgYW5kIGBuZmNfZ2V0X2RldmljZWAgbXVzdCBmaW5kIHNvbWV0aGluZyBiYXNlZCBvbiB0aGF0IGluZGV4LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyBob3cgZG9lcyBgZGVwX2xpbmtfdXBgIGdldCBzZXQgdG8gdHJ1ZT8gVGhhdCdzIHRoZSBnYXRla2VlcGVyLiBJIG5lZWQgdG8gZ3JlcCBmb3IgYGRlcF9saW5rX3VwYCBpbiBib3RoIGBuZXQvbmZjYCBhbmQgYGRyaXZlcnMvbmZjYCB0byBmaWd1cmUgb3V0IHdoYXQgc2V0cyB0aGlzIGZsYWcuIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjQyLjUzNzU5MjYyOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzAyMDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBfbGlua191cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0PTY0PWVudHJ5IHBvaW50czo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTcyLVxcdFxcdFxcdCAgIHUzMiBpbV9wcm90b2NvbHMsIHUzMiB0bV9wcm90b2NvbHMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9uZmMvbmZjLWhjaS5yc3Q6NzM6XFx0aW50ICgqZGVwX2xpbmtfdXApKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTc0LVxcdFxcdFxcdCAgIHU4IGNvbW1fbW9kZSwgdTggKmdiLCBzaXplX3QgZ2JfbGVuKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9uZmMvbmZjLWhjaS5yc3QtOTctICBtZWNoYW5pc20gc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIEhDSSBzdGFuZGFyZC5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0Ojk4Oi0gZGVwX2xpbmtfdXAoKSBpcyBjYWxsZWQgYWZ0ZXIgYSBwMnAgdGFyZ2V0IGhhcyBiZWVuIGRldGVjdGVkLCB0byBmaW5pc2hcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbmZjL25mYy1oY2kucnN0LTk5LSAgdGhlIHAycCBjb25uZWN0aW9uIHNldHVwIHdpdGggaGFyZHdhcmUgcGFyYW1ldGVycyB0aGF0IG5lZWQgdG8gYmUgcGFzc2VkIGJhY2tcXG4tLVxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYz0yMjQ9c3RhdGljIGludCBtaWNyb3JlYWRfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25mYy9taWNyb3JlYWQvbWljcm9yZWFkLmMtMjk5LVxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYzozMDA6c3RhdGljIGludCBtaWNyb3JlYWRfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LFxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy0zMDEtXFx0XFx0XFx0XFx0c3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxcbi0tXFxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jPTY1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIG1pY3JvcmVhZF9oY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jLTY1OS1cXHQuc3RhcnRfcG9sbCA9IG1pY3JvcmVhZF9zdGFydF9wb2xsLFxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYzo2NjA6XFx0LmRlcF9saW5rX3VwID0gbWljcm9yZWFkX2RlcF9saW5rX3VwLFxcbmRyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYy02NjEtXFx0LmRlcF9saW5rX2Rvd24gPSBtaWNyb3JlYWRfZGVwX2xpbmtfZG93bixcXG4tLVxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM9MTg3OD1zdGF0aWMgdm9pZCBwbjUzM19kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldixcXG4tLVxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMTkwNy1cXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jOjE5MDg6c3RhdGljIGludCBwbjUzM19pbl9kZXBfbGlua191cF9jb21wbGV0ZShzdHJ1Y3QgcG41MzMgKmRldiwgdm9pZCAqYXJnLFxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMTkwOS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXFxuLS1cXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jPTE5NzE9c3RhdGljIGludCBwbjUzM19yZl9maWVsZChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldiwgdTggcmYpO1xcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MTk3MjpzdGF0aWMgaW50IHBuNTMzX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmMtMTk3My1cXHRcXHRcXHQgICAgIHU4IGNvbW1fbW9kZSwgdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxcbi0tXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yMDQzLVxcdHJjID0gcG41MzNfc2VuZF9jbWRfYXN5bmMoZGV2LCBQTjUzM19DTURfSU5fSlVNUF9GT1JfREVQLCBza2IsXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYzoyMDQ0OlxcdFxcdFxcdFxcdCAgcG41MzNfaW5fZGVwX2xpbmtfdXBfY29tcGxldGUsIGFyZyk7XFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yMDQ1LVxcbi0tXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYz0yNjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBwbjUzM19uZmNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvcG41MzMvcG41MzMuYy0yNjQyLVxcdC5kZXZfZG93biA9IHBuNTMzX2Rldl9kb3duLFxcbmRyaXZlcnMvbmZjL3BuNTMzL3BuNTMzLmM6MjY0MzpcXHQuZGVwX2xpbmtfdXAgPSBwbjUzM19kZXBfbGlua191cCxcXG5kcml2ZXJzL25mYy9wbjUzMy9wbjUzMy5jLTI2NDQtXFx0LmRlcF9saW5rX2Rvd24gPSBwbjUzM19kZXBfbGlua19kb3duLFxcbi0tXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYz0zMzI9c3RhdGljIGludCBwbjU0NF9oY2lfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jLTQ0Mi1cXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jOjQ0MzpzdGF0aWMgaW50IHBuNTQ0X2hjaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy00NDQtXFx0XFx0XFx0XFx0c3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxcbi0tXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYz04ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfaGNpX29wcyBwbjU0NF9oY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy04ODgtXFx0LnN0YXJ0X3BvbGwgPSBwbjU0NF9oY2lfc3RhcnRfcG9sbCxcXG5kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jOjg4OTpcXHQuZGVwX2xpbmtfdXAgPSBwbjU0NF9oY2lfZGVwX2xpbmtfdXAsXFxuZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYy04OTAtXFx0LmRlcF9saW5rX2Rvd24gPSBwbjU0NF9oY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYz01Njg9c3RhdGljIGludCBzdDIxbmZjYV9nZXRfaXNvMTU2OTNfaW52ZW50b3J5KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldixcXG4tLVxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy01OTUtXFxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jOjU5NjpzdGF0aWMgaW50IHN0MjFuZmNhX2hjaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsXFxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jLTU5Ny1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCwgdTggY29tbV9tb2RlLFxcbi0tXFxuZHJpdmVycy9uZmMvc3QyMW5mY2EvY29yZS5jPTkxND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19oY2lfb3BzIHN0MjFuZmNhX2hjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25mYy9zdDIxbmZjYS9jb3JlLmMtOTIxLVxcdC5zdG9wX3BvbGwgPSBzdDIxbmZjYV9oY2lfc3RvcF9wb2xsLFxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYzo5MjI6XFx0LmRlcF9saW5rX3VwID0gc3QyMW5mY2FfaGNpX2RlcF9saW5rX3VwLFxcbmRyaXZlcnMvbmZjL3N0MjFuZmNhL2NvcmUuYy05MjMtXFx0LmRlcF9saW5rX2Rvd24gPSBzdDIxbmZjYV9oY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9oY2kuaD0xNT1zdHJ1Y3QgbmZjX2hjaV9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL2hjaS5oLTI4LVxcdHZvaWQgKCpzdG9wX3BvbGwpIChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpO1xcbmluY2x1ZGUvbmV0L25mYy9oY2kuaDoyOTpcXHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbmluY2x1ZGUvbmV0L25mYy9oY2kuaC0zMC1cXHRcXHRcXHQgICB1OCBjb21tX21vZGUsIHU4ICpnYiwgc2l6ZV90IGdiX2xlbik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZmMvbmZjLmg9NDg9c3RydWN0IG5mY19vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTUzLVxcdHZvaWQgKCpzdG9wX3BvbGwpKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbmluY2x1ZGUvbmV0L25mYy9uZmMuaDo1NDpcXHRpbnQgKCpkZXBfbGlua191cCkoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtNTUtXFx0XFx0XFx0ICAgdTggY29tbV9tb2RlLCB1OCAqZ2IsIHNpemVfdCBnYl9sZW4pO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25mYy5oPTE2Nz1zdHJ1Y3QgbmZjX2RldiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtMTc4LVxcdHN0cnVjdCBuZmNfdGFyZ2V0ICphY3RpdmVfdGFyZ2V0O1xcbmluY2x1ZGUvbmV0L25mYy9uZmMuaDoxNzk6XFx0Ym9vbCBkZXBfbGlua191cDtcXG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtMTgwLVxcdHN0cnVjdCBuZmNfZ2VubF9kYXRhIGdlbmxfZGF0YTtcXG4tLVxcbm5ldC9uZmMvY29yZS5jPTI2OD1zdGF0aWMgc3RydWN0IG5mY190YXJnZXQgKm5mY19maW5kX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeClcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTI3OS1cXG5uZXQvbmZjL2NvcmUuYzoyODA6aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2luZGV4LCB1OCBjb21tX21vZGUpXFxubmV0L25mYy9jb3JlLmMtMjgxLXtcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTI4OC1cXG5uZXQvbmZjL2NvcmUuYzoyODk6XFx0aWYgKCFkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVwX2xpbmtfdXApXFxubmV0L25mYy9jb3JlLmMtMjkwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTI5OC1cXG5uZXQvbmZjL2NvcmUuYzoyOTk6XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gdHJ1ZSkge1xcbm5ldC9uZmMvY29yZS5jLTMwMC1cXHRcXHRyYyA9IC1FQUxSRUFEWTtcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTMxNS1cXG5uZXQvbmZjL2NvcmUuYzozMTY6XFx0cmMgPSBkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVwX2xpbmtfdXAoZGV2LCB0YXJnZXQsIGNvbW1fbW9kZSwgZ2IsIGdiX2xlbik7XFxubmV0L25mYy9jb3JlLmMtMzE3LVxcdGlmICghcmMpIHtcXG4tLVxcbm5ldC9uZmMvY29yZS5jPTMyNz1pbnQgbmZjX2RlcF9saW5rX2Rvd24oc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM0Mi1cXG5uZXQvbmZjL2NvcmUuYzozNDM6XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcXG5uZXQvbmZjL2NvcmUuYy0zNDQtXFx0XFx0cmMgPSAtRUFMUkVBRFk7XFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0zNDktXFx0aWYgKCFyYykge1xcbm5ldC9uZmMvY29yZS5jOjM1MDpcXHRcXHRkZXYtXFx1MDAzZWRlcF9saW5rX3VwID0gZmFsc2U7XFxubmV0L25mYy9jb3JlLmMtMzUxLVxcdFxcdGRldi1cXHUwMDNlYWN0aXZlX3RhcmdldCA9IE5VTEw7XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz0zNjM9aW50IG5mY19kZXBfbGlua19pc191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeCxcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM2NS17XFxubmV0L25mYy9jb3JlLmM6MzY2OlxcdGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPSB0cnVlO1xcbm5ldC9uZmMvY29yZS5jLTM2Ny1cXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM4Mi1cXG5uZXQvbmZjL2NvcmUuYzozODM6XFx0cmV0dXJuIG5mY19nZW5sX2RlcF9saW5rX3VwX2V2ZW50KGRldiwgdGFyZ2V0X2lkeCwgY29tbV9tb2RlLCByZl9tb2RlKTtcXG5uZXQvbmZjL2NvcmUuYy0zODQtfVxcbi0tXFxubmV0L25mYy9jb3JlLmM9NjU1PWludCBuZmNfdG1fZGF0YV9yZWNlaXZlZChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9jb3JlLmMtNjU3LVxcdC8qIE9ubHkgTExDUCB0YXJnZXQgbW9kZSBmb3Igbm93ICovXFxubmV0L25mYy9jb3JlLmM6NjU4OlxcdGlmIChkZXYtXFx1MDAzZWRlcF9saW5rX3VwID09IGZhbHNlKSB7XFxubmV0L25mYy9jb3JlLmMtNjU5LVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L25mYy9jb3JlLmM9Njk2PWludCBuZmNfdG1fZGVhY3RpdmF0ZWQoc3RydWN0IG5mY19kZXYgKmRldilcXG5uZXQvbmZjL2NvcmUuYy02OTcte1xcbm5ldC9uZmMvY29yZS5jOjY5ODpcXHRkZXYtXFx1MDAzZWRlcF9saW5rX3VwID0gZmFsc2U7XFxubmV0L25mYy9jb3JlLmMtNjk5LVxcdGRldi1cXHUwMDNlcmZfbW9kZSA9IE5GQ19SRl9OT05FO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYz01ODY9c3RhdGljIGludCBkaWdpdGFsX2Rldl9kb3duKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2KVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01OTQtXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo1OTU6c3RhdGljIGludCBkaWdpdGFsX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTk2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYz03NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfb3BzIGRpZ2l0YWxfbmZjX29wcyA9IHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNzQ4LVxcdC5zdG9wX3BvbGwgPSBkaWdpdGFsX3N0b3BfcG9sbCxcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjc0OTpcXHQuZGVwX2xpbmtfdXAgPSBkaWdpdGFsX2RlcF9saW5rX3VwLFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNzUwLVxcdC5kZXBfbGlua19kb3duID0gZGlnaXRhbF9kZXBfbGlua19kb3duLFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTY1Mj1zdGF0aWMgdm9pZCBoY2lfc3RvcF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTY2Mi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjYzOnN0YXRpYyBpbnQgaGNpX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjQtXFx0XFx0XFx0XFx0X191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTY2Ny1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjY4OlxcdGlmICghaGRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXBfbGlua191cClcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjY5LVxcdFxcdHJldHVybiAwO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy02NzAtXFxubmV0L25mYy9oY2kvY29yZS5jOjY3MTpcXHRyZXR1cm4gaGRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXBfbGlua191cChoZGV2LCB0YXJnZXQsIGNvbW1fbW9kZSxcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjcyLVxcdFxcdFxcdFxcdCAgICAgIGdiLCBnYl9sZW4pO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgaGNpX25mY19vcHMgPSB7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTQ1LVxcdC5zdG9wX3BvbGwgPSBoY2lfc3RvcF9wb2xsLFxcbm5ldC9uZmMvaGNpL2NvcmUuYzo5NDY6XFx0LmRlcF9saW5rX3VwID0gaGNpX2RlcF9saW5rX3VwLFxcbm5ldC9uZmMvaGNpL2NvcmUuYy05NDctXFx0LmRlcF9saW5rX2Rvd24gPSBoY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM9NjYxPXN0YXRpYyBpbnQgbGxjcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKl9hZGRyLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy03MDUtXFx0ZGV2aWNlX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjcwNjpcXHRpZiAoZGV2LVxcdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xcbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA3LVxcdFxcdHJldCA9IC1FTk9MSU5LO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTk3MD1zdGF0aWMgdm9pZCBuY2lfZGVhY3RpdmF0ZV90YXJnZXQoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtOTk1LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzo5OTY6c3RhdGljIGludCBuY2lfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXFxubmV0L25mYy9uY2kvY29yZS5jLTk5Ny1cXHRcXHRcXHQgICBfX3U4IGNvbW1fbW9kZSwgX191OCAqZ2IsIHNpemVfdCBnYl9sZW4pXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTE0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgbmNpX25mY19vcHMgPSB7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1My1cXHQuc3RvcF9wb2xsID0gbmNpX3N0b3BfcG9sbCxcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTE1NDpcXHQuZGVwX2xpbmtfdXAgPSBuY2lfZGVwX2xpbmtfdXAsXFxubmV0L25mYy9uY2kvY29yZS5jLTExNTUtXFx0LmRlcF9saW5rX2Rvd24gPSBuY2lfZGVwX2xpbmtfZG93bixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jPTcwOT1zdGF0aWMgaW50IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi0tXFxubmV0L25mYy9uY2kvbnRmLmMtODY1LVxcbm5ldC9uZmMvbmNpL250Zi5jOjg2NjpcXHRcXHQvKiBzdG9yZSBnZW5lcmFsIGJ5dGVzIHRvIGJlIHJlcG9ydGVkIGxhdGVyIGluIGRlcF9saW5rX3VwICovXFxubmV0L25mYy9uY2kvbnRmLmMtODY3LVxcdFxcdGlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDX0RFUCkge1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9NjQwPXN0YXRpYyBpbnQgbmZjX2dlbmxfZHVtcF9kZXZpY2VzX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtNjUxLVxcbm5ldC9uZmMvbmV0bGluay5jOjY1MjppbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXFxubmV0L25mYy9uZXRsaW5rLmMtNjUzLVxcdFxcdFxcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy02NzgtXFxubmV0L25mYy9uZXRsaW5rLmM6Njc5OlxcdGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPSB0cnVlO1xcbm5ldC9uZmMvbmV0bGluay5jLTY4MC1cXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTkxMT1zdGF0aWMgaW50IG5mY19nZW5sX2RlYWN0aXZhdGVfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy05MzUtXFxubmV0L25mYy9uZXRsaW5rLmM6OTM2OnN0YXRpYyBpbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbmZjL25ldGxpbmsuYy05Mzcte1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtOTYzLVxcbm5ldC9uZmMvbmV0bGluay5jOjk2NDpcXHRyYyA9IG5mY19kZXBfbGlua191cChkZXYsIHRndF9pZHgsIGNvbW0pO1xcbm5ldC9uZmMvbmV0bGluay5jLTk2NS1cXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTEwNjg9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2V0X3BhcmFtcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTExMS1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1BBUkFNX0xUT10pIHtcXG5uZXQvbmZjL25ldGxpbmsuYzoxMTEyOlxcdFxcdGlmIChkZXYtXFx1MDAzZWRlcF9saW5rX3VwKSB7XFxubmV0L25mYy9uZXRsaW5rLmMtMTExMy1cXHRcXHRcXHRyYyA9IC1FSU5QUk9HUkVTUztcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTExMzc9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTExNjEtXFxubmV0L25mYy9uZXRsaW5rLmM6MTE2MjpcXHRpZiAoZGV2LVxcdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xcbm5ldC9uZmMvbmV0bGluay5jLTExNjMtXFx0XFx0cmMgPSAtRU5PTElOSztcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTE2OTk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBuZmNfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3MzMtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC9uZmMvbmV0bGluay5jOjE3MzQ6XFx0XFx0LmRvaXQgPSBuZmNfZ2VubF9kZXBfbGlua191cCxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzM1LVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG4tLVxcbm5ldC9uZmMvbmZjLmg9ODI9aW50IG5mY19nZW5sX2RldmljZV9yZW1vdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbm5ldC9uZmMvbmZjLmgtODMtXFxubmV0L25mYy9uZmMuaDo4NDppbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXFxubmV0L25mYy9uZmMuaC04NS1cXHRcXHRcXHQgICAgICAgdTggY29tbV9tb2RlLCB1OCByZl9tb2RlKTtcXG4tLVxcbm5ldC9uZmMvbmZjLmg9MTM1PWludCBuZmNfc3RvcF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xcbm5ldC9uZmMvbmZjLmgtMTM2LVxcbm5ldC9uZmMvbmZjLmg6MTM3OmludCBuZmNfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKmRldiwgaW50IHRhcmdldF9pZHgsIHU4IGNvbW1fbW9kZSk7XFxubmV0L25mYy9uZmMuaC0xMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjQ0LjQ3MDYyMDM0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTEzODYwMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgdGhlIE5GQyBOZXRsaW5rIENvbW1hbmQgSGFuZGxlciBhbmQgVmlydHVhbCBEZXZpY2UgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBgbmZjX2dlbmxfZGVwX2xpbmtfdXBgIGlzIGFjdHVhbGx5IGFub3RoZXIgaW1wbGVtZW50YXRpb24gb2YgYSBnZW5lcmljIG5ldGxpbmsgY29tbWFuZCwgc3BlY2lmaWNhbGx5IGBORkNfQ01EX0RFUF9MSU5LX1VQYC4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgbGluay11cCBldmVudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbmV0bGluayBmcmFtZXdvcmsuIEl0J3Mgbm90IGp1c3Qgc29tZSBpc29sYXRlZCBmdW5jdGlvbjsgaXQncyBwYXJ0IG9mIGEgbGFyZ2VyLCB3ZWxsLWRlZmluZWQgbmV0bGluayBjb21tYW5kIHN0cnVjdHVyZS5cblxuQW5kLCBldmVuIG1vcmUgaW50ZXJlc3RpbmcsIGB2aXJ0dWFsX25jaWRldi5jYCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyB2aXJ0dWFsIE5GQyBkZXZpY2UuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHdlJ3JlIGludGVyYWN0aW5nIHdpdGggdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSB0aHJvdWdoLCBzYXksIGAvZGV2L25jaWAuIFRoaXMgaW1wbGllcyBpdCdzIHdoZXJlIHRoZSB2aXJ0dWFsIGRldmljZSdzIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5lZCBhbmQgaXRzIGNhcGFiaWxpdGllcyBlbXVsYXRlZC4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyB2aXJ0dWFsIGRldmljZSBpcyBjb25zdHJ1Y3RlZC4gTGV0J3MgZGlnIGludG8gYHZpcnR1YWxfbmNpZGV2LmNgIHRvIHNlZSBob3cgaXQncyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg0MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjU0LjM4NDQ4NDI0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0OTI4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTQ6I2luY2x1ZGUgXFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFxcdTAwM2VcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1LVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMy1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjI0OnN0cnVjdCB2aXJ0dWFsX25jaV9kZXYge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjU6XFx0c3RydWN0IG5jaV9kZXYgKm5kZXY7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yNi1cXHRzdHJ1Y3QgbXV0ZXggbXR4O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTMzLXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjM0OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zNS1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo0MDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNDEte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQzLVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Mi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjUzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfc2VuZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjU1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzc6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaV9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XFx0LmNsb3NlID0gdmlydHVhbF9uY2lfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3OTpcXHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgwLX07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04My1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjg1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04Ni1cXHRzaXplX3QgYWN0dWFsX2xlbjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTEyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTE3OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTI4LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTI5OlxcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzAtXFx0cmV0dXJuIGNvdW50O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzM6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNS1cXHRpbnQgcmV0ID0gMDtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzNjpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2O1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM3LVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNDE6XFx0dmRldi1cXHUwMDNlbmRldiA9IG5jaV9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNnZpcnR1YWxfbmNpX29wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0Mi1cXHRcXHRWSVJUVUFMX05GQ19QUk9UT0NPTFMsIDAsIDApO1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNTAtXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gdmRldjtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE1MTpcXHRuY2lfc2V0X2RydmRhdGEodmRldi1cXHUwMDNlbmRldiwgdmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNTItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNTM6XFx0cmV0ID0gbmNpX3JlZ2lzdGVyX2RldmljZSh2ZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1NC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTU1OlxcdFxcdG5jaV9mcmVlX2RldmljZSh2ZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE1Ni1cXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ2ZGV2LVxcdTAwM2VtdHgpO1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjQ6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2NS17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjY6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2Ny1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2ODpcXHRuY2lfdW5yZWdpc3Rlcl9kZXZpY2UodmRldi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjk6XFx0bmNpX2ZyZWVfZGV2aWNlKHZkZXYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTcwLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnZkZXYtXFx1MDAzZW10eCk7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzgte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc5OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xODAtXFx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVxcdTAwM2VuZGV2LVxcdTAwM2VuZmNfZGV2O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcXHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XFx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3OlxcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XFx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXFx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjAzOlxcdC5uYW1lID0gXFxcInZpcnR1YWxfbmNpXFxcIixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcXHQuZm9wcyA9IFxcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVxcdC5tb2RlID0gMDYwMCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6NTQuNDM3OTg0MTQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNjcwOTAyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkZDIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYC9kZXYvdmlydHVhbF9uY2lgIGlzIHRoZSBrZXkg4oCTIHRoYXQncyBteSBlbnRyeSBwb2ludCwgaXQgbG9va3MgbGlrZSwgZm9yIGFuIE5DSSBkZXZpY2UsIHdoaWNoIGlzIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gIEl0J3MgYWxzbyB3b3J0aCBub3RpbmcgdGhlIHByZXNlbmNlIG9mIHRoZSBwbjUzMyBVU0IgZ2FkZ2V0L3Jhdy1nYWRnZXQ7IHRoYXQncyBhbm90aGVyIHBpZWNlIG9mIHRoZSBwdXp6bGUuICBBbmQsIHN5emthbGxlciBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGJvdGggbmV0bGluayBhbmQgTkZDIC0gZXhjZWxsZW50OyB0aGF0IHRlbGxzIG1lIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgYXJlIGxpa2VseSB0byBiZS5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIE5GQywgTExDUCwgYW5kIHNvIG9uLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIHN0YXJ0aW5nIHdpdGggYG5ldC9uZmMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDczLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDA6MTguMTA4ODkwMjgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBORkMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORkNcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4gICA4OlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgOTpcXHRcXHRkZWZhdWx0IG5cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciBORkMgKE5lYXIgZmllbGRcXG4gIDEyOlxcdFxcdCAgY29tbXVuaWNhdGlvbikgZGV2aWNlcy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAxNTpcXHRcXHQgIGJlIGNhbGxlZCBuZmMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBORkNfRElHSVRBTFxcbiAgMTg6XFx0XFx0ZGVwZW5kcyBvbiBORkNcXG4gIDE5OlxcdFxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUkNfSVRVX1RcXG4gIDIxOlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgRGlnaXRhbCBQcm90b2NvbCBzdGFjayBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVmYXVsdCBuXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE5GQyBkaWdpdGFsIHByb3RvY29sIHN0YWNrIHN1cHBvcnQuXFxuICAyNTpcXHRcXHQgIFRoaXMgaXMgbmVlZGVkIGJ5IE5GQyBjaGlwc2V0cyB3aG9zZSBmaXJtd2FyZSBvbmx5IGltcGxlbWVudFxcbiAgMjY6XFx0XFx0ICB0aGUgTkZDIGFuYWxvZyBsYXllci5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAyOTpcXHRcXHQgIGJlIGNhbGxlZCBuZmNfZGlnaXRhbC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0c291cmNlIFxcXCJuZXQvbmZjL25jaS9LY29uZmlnXFxcIlxcbiAgMzI6XFx0c291cmNlIFxcXCJuZXQvbmZjL2hjaS9LY29uZmlnXFxcIlxcbiAgMzM6XFx0XFxuICAzNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQwOjE4LjEwODk2ODYyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjkyNjk0ODM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIE5GQyBjb21wb25lbnRzLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBgbmV0L25mYy9NYWtlZmlsZWAuIFRoaXMgZmlsZSBpcyB0aGUgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLCByaWdodD8gSXQncyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgYXJlIGFsbCBvcmNoZXN0cmF0ZWQgZm9yIHRoZXNlIE5GQy1yZWxhdGVkIG1vZHVsZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZXNlIHRoaW5ncywgYW55IHNwZWNpZmljIG1vZHVsZXMgaXQncyBjcmVhdGluZywgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB1bnVzdWFsIGJ1aWxkIGZsYWdzIG9yIGN1c3RvbSBydWxlcyB0aGF0IG1pZ2h0IGluZGljYXRlIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQwOjUxLjAzNTkxOTU5N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpL1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4gICA5OlxcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgKz0gbmZjX2RpZ2l0YWwub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0bGxjcF9zb2NrLm9cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0bmZjX2RpZ2l0YWwtb2JqcyA6PSBkaWdpdGFsX2NvcmUubyBkaWdpdGFsX3RlY2hub2xvZ3kubyBkaWdpdGFsX2RlcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQwOjUxLjAzNTk3ODg5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDY4NjkwMzEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbmV0bGluay5vYCBnZXRzIGNvbXBpbGVkIHdoZW4gTkZDIGlzIHR1cm5lZCBvbiDigJMgZWl0aGVyIGJ1aWx0IGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZSwgYW5kIHN5emthbGxlciB1c2VzIGl0IGFzIGEgYnVpbHQtaW4gbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlcGVuZGVuY3kgbW9yZSBkZWVwbHkuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJREVWYC4gVGhpcyBjb3VsZCBwcm92aWRlIGluc2lnaHQgaW50byBleGFjdGx5ICp3aHkqIGBuZXRsaW5rLm9gIGlzIGJlaW5nIGluY2x1ZGVkIGluIGEgc3BlY2lmaWMgYnVpbGQsIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjb25maWd1cmF0aW9uIGZsYWdzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IHZpcnR1YWwgTkZDIGRldmljZXMgYXJlIGhhbmRsZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgbmV0bGluayBpbnRlcmZhY2UsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBidWdzIG9mdGVuIGxpZS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gY29uZmlndXJhdGlvbnMgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MDUuNzIyODg1MTI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcwNzI4ODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRVQUxfTkNJREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MTowNi4yODk5NzI3NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI5OTY2ODEyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGB2aXJ0dWFsX25jaWRldmAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIE5GQyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gc3ltYm9sLiBIb3BlZnVsbHksIGl0J3MgZGVmaW5lZCBkaXJlY3RseSB0aGVyZSwgb3IgYXQgbGVhc3QgaW5jbHVkZWQgZnJvbSBhIGZpbGUgd2l0aGluIHRoZSBORkMgZGlyZWN0b3J5LiBGcm9tIGhlcmUsIEknbGwgYmUgYWJsZSB0byB3b3JrIG91dCBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBORkMgZmVhdHVyZXMuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHF1aWNrIGxvb2t1cCwgYnV0IHlvdSBuZXZlciBrbm93LiBJdCBtaWdodCBiZSBhIGJpdCBidXJpZWQsIG9yIGl0IGNvdWxkIGJlIGRlZmluZWQgaW4gYSBtb3JlIGdlbmVyaWMgY29uZmlnIGZpbGUgc29tZXdoZXJlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODk3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MTkuMjg2NjU4NDg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDk5MDk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0dWFsX25jaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcXHQrPSBzdDk1aGYvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcXHQrPSB2aXJ0dWFsX25jaWRldi5vXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIzLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjQ6c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yNS1cXHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozMjpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX29wZW4oc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMy17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozNDpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzUtXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTM5LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDA6c3RhdGljIGludCB2aXJ0dWFsX25jaV9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQxLXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjQyOlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy00My1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1MzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01NC17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1NTpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNTYtXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTc1LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHZpcnR1YWxfbmNpX29wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc3OlxcdC5vcGVuID0gdmlydHVhbF9uY2lfb3BlbixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjc4OlxcdC5jbG9zZSA9IHZpcnR1YWxfbmNpX2Nsb3NlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzk6XFx0LnNlbmQgPSB2aXJ0dWFsX25jaV9zZW5kXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MC19O1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo4MjpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODMtXFx0XFx0XFx0XFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04NC17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo4NTpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODYtXFx0c2l6ZV90IGFjdHVhbF9sZW47XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExMi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExNC1cXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE2LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExNzpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE4LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzQte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTM1LVxcdGludCByZXQgPSAwO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTM2OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXY7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzctXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE0MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE0MTpcXHR2ZGV2LVxcdTAwM2VuZGV2ID0gbmNpX2FsbG9jYXRlX2RldmljZShcXHUwMDI2dmlydHVhbF9uY2lfb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQyLVxcdFxcdFZJUlRVQUxfTkZDX1BST1RPQ09MUywgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2My1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTY1LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NjpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTY3LVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzY6c3RhdGljIGxvbmcgdmlydHVhbF9uY2lkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzctXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc4LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3OTpcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTgwLVxcdGNvbnN0IHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2ID0gdmRldi1cXHUwMDNlbmRldi1cXHUwMDNlbmZjX2RldjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkxLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTMtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XFx0LnJlYWQgPSB2aXJ0dWFsX25jaWRldl9yZWFkLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk1OlxcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk2OlxcdC5vcGVuID0gdmlydHVhbF9uY2lkZXZfb3BlbixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcXHQucmVsZWFzZSA9IHZpcnR1YWxfbmNpZGV2X2Nsb3NlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk4OlxcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTktfTtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAyLVxcdC5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwMzpcXHQubmFtZSA9IFxcXCJ2aXJ0dWFsX25jaVxcXCIsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XFx0LmZvcHMgPSBcXHUwMDI2dmlydHVhbF9uY2lkZXZfZm9wcyxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cXHQubW9kZSA9IDA2MDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQxOjE5LjM0MTY1NzY4MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjE5MTAzNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORkMgVmlydHVhbCBOQ0kgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgS2NvbmZpZyB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBORkNfVklSVFVBTF9OQ0lgLiBJIGtub3cgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBwcmV0dHkgd2VsbCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHRoaXMgb3B0aW9uIGlzIGRlZmluZWQuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaWYgaXQncyB0cmlzdGF0ZSBvciBib29sZWFuLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiB3aGF0IGVuYWJsaW5nIGl0IGFjdHVhbGx5ICpkb2VzKi4gSSdsbCBhbHNvIGJlIG1lbnRhbGx5IG5vdGluZyBhbnkgcmVsYXRlZCBvcHRpb25zIGluIHRoZSB2aWNpbml0eSwgYmVjYXVzZSB0aGUgS2NvbmZpZyBvZnRlbiBncm91cHMgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJ20gdHJ5aW5nIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSAqY29udGV4dCogb2YgdGhpcyB2aXJ0dWFsIE5DSSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgTkZDIHN1YnN5c3RlbS4gSSdtIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyB2aXJ0dWFsIE5DSSByZWxhdGVzIHRvIGVtdWxhdGluZyBhbiBOQ0kgaW50ZXJmYWNlLCBwcm9iYWJseSBmb3IgdGVzdGluZyBvciBzaW11bGF0aW9uIHB1cnBvc2VzLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgd2hhdCBJJ20gc2Vla2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MToyNi41NjA3NjQ0MjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTA3NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfVklSVFVBTF9OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTEtXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MToyNi42MTQ2OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTU1ODQwOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORkMgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUyLiBJJ20gYmV0dGluZyB0aGF0IGFyZWEgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GQyBzdWJzeXN0ZW0uIEknbSBrZWVuIHRvIHNlZSB0aGUgbW9kdWxhcml0eSwgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBkZWZpbmVkIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBkZXNpZ24gZGVjaXNpb25zIGVuY29kZWQgaW4gdGhpcyBLY29uZmlnIGZpbGUsIGFzIHRoaXMgaXMgd2hlcmUgdGhlIE5GQyBvcHRpb25zIGFyZSBsaWtlbHkgdG8gYmUgZGVjbGFyZWQgYW5kIHN0cnVjdHVyZWQuIEZyb20gaGVyZSwgSSB3aWxsIGJlZ2luIHRvIHRyYWNlIGhvdyB0aGUgb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgYXJlIHRpZWQgdG8gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgTkZDIHN0YWNrIGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MzIuMTcwNTI1NzcyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU29ueSBQb3J0LTEwMCBjaGlwIGJhc2VkIFVTQiBkZXZpY2VzIHN1Y2ggYXMgdGhlXFxuICA0ODpcXHRcXHQgIFJDLVMzODAgZG9uZ2xlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXFxuICA1NzpcXHRcXHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxcbiAgNTk6XFx0XFx0ICBtb2R1bGUuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9mZHAvS2NvbmZpZ1xcXCJcXG4gIDY0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvcG41NDQvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6MzIuMTcwNjE3NjQyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5NDgwODM5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBORkNzaW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGF0IGBuZmNzaW1gIHRvb2wsIHNoYWxsIHdlPyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0IG9mZmVycy4gSSBrbm93IEkgdXNlZCBpdCBiZWZvcmUgZm9yIFtpbnNlcnQgcmVsZXZhbnQgdGVjaG5pY2FsIHVzYWdlLCBlLmcuLCBzaW11bGF0aW5nIE5GQyB0YWcgaW50ZXJhY3Rpb25zLCB0ZXN0aW5nIHJlYWRlciBpbXBsZW1lbnRhdGlvbnMsIGRlYnVnZ2luZyBjb21tdW5pY2F0aW9uIHByb3RvY29sc10uIEknbSB0aGlua2luZywgXCJEb2VzIGl0IHN0aWxsIG9mZmVyIHRoZSBmZWF0dXJlcyBJIG5lZWQgZm9yIFtzcGVjaWZpYyBwcm9qZWN0IG9yIHRhc2tdP1wiIEknbGwgbmVlZCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBpcyBzdGlsbCBpbnR1aXRpdmUgb3IgaWYgdGhlcmUgaGF2ZSBiZWVuIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCBtaWdodCBpbXBhY3QgbXkgd29ya2Zsb3cuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpZiBgbmZjc2ltYCBzdGlsbCBhbGlnbnMgd2l0aCBteSBzcGVjaWZpYyByZXF1aXJlbWVudHMgYW5kIGF2b2lkcyBhbnkgdW5leHBlY3RlZCByb2FkYmxvY2tzLiBJIGFtIHBhcnRpY3VsYXJseSBjdXJpb3VzIGlmIGl0IHN1cHBvcnRzIHRoZSByZWNlbnQgYWR2YW5jZW1lbnRzIGluIE5GQyB0ZWNobm9sb2d5IHdoaWNoIEkgYW0gY3VycmVudGx5IGludm9sdmVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkxNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6NDAuMTE4NzA1MjY2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQyMzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvbmZjc2ltLmMtMTUtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTY6I2RlZmluZSBORkNTSU1fRVJSKGQsIGZtdCwgYXJncy4uLikgbmZjX2VycihcXHUwMDI2ZC1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIFxcXFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xNy1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIiVzOiBcXFwiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTgtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTk6I2RlZmluZSBORkNTSU1fREJHKGQsIGZtdCwgYXJncy4uLikgZGV2X2RiZyhcXHUwMDI2ZC1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIFxcXFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yMC1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIiVzOiBcXFwiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjEtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjI6I2RlZmluZSBORkNTSU1fVkVSU0lPTiBcXFwiMC4yXFxcIlxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIzLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjI0OiNkZWZpbmUgTkZDU0lNX01PREVfTk9ORVxcdDBcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNTojZGVmaW5lIE5GQ1NJTV9NT0RFX0lOSVRJQVRPUlxcdDFcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNjojZGVmaW5lIE5GQ1NJTV9NT0RFX1RBUkdFVFxcdDJcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNy1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyODojZGVmaW5lIE5GQ1NJTV9DQVBBQklMSVRJRVMgKE5GQ19ESUdJVEFMX0RSVl9DQVBTX0lOX0NSQyAgIHwgXFxcXFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5LVxcdFxcdFxcdCAgICAgTkZDX0RJR0lUQUxfRFJWX0NBUFNfVEdfQ1JDKVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTA0PXN0YXRpYyB2b2lkIG5mY3NpbV9saW5rX3JlY3ZfY2FuY2VsKHN0cnVjdCBuZmNzaW1fbGluayAqbGluaylcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTEwNy1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoxMDg6XFx0bGluay1cXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX05PTkU7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTA5LVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MTE1PXN0YXRpYyB2b2lkIG5mY3NpbV9saW5rX3NodXRkb3duKHN0cnVjdCBuZmNzaW1fbGluayAqbGluaylcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTExOS1cXHRsaW5rLVxcdTAwM2VzaHV0ZG93biA9IDE7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTIwOlxcdGxpbmstXFx1MDAzZW1vZGUgPSBORkNTSU1fTU9ERV9OT05FO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTEyMS1cXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jPTE4Mj1zdGF0aWMgdm9pZCBuZmNzaW1fcmVjdl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOTAtXFx0aWYgKCFkZXYtXFx1MDAzZXVwKSB7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTkxOlxcdFxcdE5GQ1NJTV9FUlIoZGV2LCBcXFwiRGV2aWNlIGlzIGRvd25cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTE5Mi1cXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jPTIwMT1zdGF0aWMgaW50IG5mY3NpbV9zZW5kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yMDctXFx0aWYgKCFkZXYtXFx1MDAzZXVwKSB7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjA4OlxcdFxcdE5GQ1NJTV9FUlIoZGV2LCBcXFwiRGV2aWNlIGlzIGRvd25cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIwOS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIxOC1cXHRpZiAoZGV2LVxcdTAwM2Vkcm9wZnJhbWUpIHtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyMTk6XFx0XFx0TkZDU0lNX0RCRyhkZXYsIFxcXCJkcm9wcGluZyBmcmFtZSAob3V0IG9mICVkKVxcXFxuXFxcIiwgZGV2LVxcdTAwM2Vkcm9wZnJhbWUpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIyMC1cXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0yNTY9c3RhdGljIGludCBuZmNzaW1faW5fY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNjMtXFx0XFx0ZGV2LVxcdTAwM2V1cCA9IHRydWU7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjY0OlxcdFxcdGRldi1cXHUwMDNlbW9kZSA9IE5GQ1NJTV9NT0RFX0lOSVRJQVRPUjtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNjUtXFx0XFx0ZGV2LVxcdTAwM2VyZl90ZWNoID0gcGFyYW07XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNzEtXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNzI6XFx0XFx0TkZDU0lNX0VSUihkZXYsIFxcXCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gdHlwZTogJWRcXFxcblxcXCIsIHR5cGUpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI3My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jPTI4Nj1zdGF0aWMgaW50IG5mY3NpbV90Z19jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5My1cXHRcXHRkZXYtXFx1MDAzZXVwID0gdHJ1ZTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyOTQ6XFx0XFx0ZGV2LVxcdTAwM2Vtb2RlID0gTkZDU0lNX01PREVfVEFSR0VUO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5NS1cXHRcXHRkZXYtXFx1MDAzZXJmX3RlY2ggPSBwYXJhbTtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMwMS1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjMwMjpcXHRcXHRORkNTSU1fRVJSKGRldiwgXFxcIkludmFsaWQgY29uZmlndXJhdGlvbiB0eXBlOiAlZFxcXFxuXFxcIiwgdHlwZSk7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzAzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MzQ2PXN0YXRpYyB2b2lkIG5mY3NpbV9kZWJ1Z2ZzX2luaXRfZGV2KHN0cnVjdCBuZmNzaW0gKmRldilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM1My1cXHRpZiAoIW5mY3NpbV9kZWJ1Z2ZzX3Jvb3QpIHtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozNTQ6XFx0XFx0TkZDU0lNX0VSUihkZXYsIFxcXCJuZmNzaW0gZGVidWdmcyBub3QgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM1NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNjAtXFx0aWYgKG4gXFx1MDAzZT0gc2l6ZW9mKGRldm5hbWUpKSB7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzYxOlxcdFxcdE5GQ1NJTV9FUlIoZGV2LCBcXFwiQ291bGQgbm90IGNvbXB1dGUgZGV2IG5hbWUgZm9yIGRldiAlZFxcXFxuXFxcIiwgaWR4KTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNjItXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MzcwPXN0YXRpYyBzdHJ1Y3QgbmZjc2ltICpuZmNzaW1fZGV2aWNlX25ldyhzdHJ1Y3QgbmZjc2ltX2xpbmsgKmxpbmtfaW4sXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zODUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5GQ19QUk9UT19ORkNfREVQX01BU0ssXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mzg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBORkNTSU1fQ0FQQUJJTElUSUVTLFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz00MzE9c3RhdGljIGludCBfX2luaXQgbmZjc2ltX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQ1OC1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzo0NTk6XFx0cHJfaW5mbyhcXFwibmZjc2ltIFxcXCIgTkZDU0lNX1ZFUlNJT04gXFxcIiBpbml0aWFsaXplZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDYwLVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM9NDkxPW1vZHVsZV9leGl0KG5mY3NpbV9leGl0KTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00OTItXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDkzOk1PRFVMRV9ERVNDUklQVElPTihcXFwiTkZDU2ltIGRyaXZlciB2ZXIgXFxcIiBORkNTSU1fVkVSU0lPTik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDk0Ok1PRFVMRV9WRVJTSU9OKE5GQ1NJTV9WRVJTSU9OKTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00OTUtTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MTo0MC4xNzIxMzczMThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc0MDk2MjA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBORkMgU2ltdWxhdG9yIERyaXZlciBBY3RpdmF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19ORkNfU0lNYC4uLiB0aGF0J3MgKmFub3RoZXIqIHNpbXVsYXRvciBkcml2ZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYG5mY3NpbS5jYCBtb2R1bGUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBzaW11bGF0b3IgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZC4gTmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGVuIGl0IHdvdWxkIGJlIHVzZWQgaW4gYSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDUxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDE6NTcuNTgxNzYyMzI3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY2MzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZmNzaW1cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX05GQ19NRUlfUEhZKVxcdCs9IG1laV9waHkub1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfU0lNKVxcdFxcdCs9IG5mY3NpbS5vXFxuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX05GQ19QT1JUMTAwKVxcdCs9IHBvcnQxMDAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0MTo1Ny42MzE0MzYyNjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE0Mzk1NDI5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIE5GQ19TSU0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRoaXMgc29ydGVkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYE5GQ19TSU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSBpdCdzIGxpa2VseSBuZXN0bGVkIHdpdGhpbiB0aGUgTkZDIGRyaXZlciBzdHJ1Y3R1cmUsIHNvIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdXN1YWwgcGxhY2UgZm9yIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLCBzbyBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBIb3BlZnVsbHksIGl0J3MgYWxsIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Mjo0OS4wNzA5ODI0OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MzY0MDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDX1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTIxPWNvbmZpZyBORkNfTUVJX1BIWVxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25mYy9LY29uZmlnOjMxOmNvbmZpZyBORkNfU0lNXFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zMi1cXHR0cmlzdGF0ZSBcXFwiTkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQyOjQ5LjQxNDYzMTU2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTMzMDUxNTMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE5GQyBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmZjL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBORkMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzEuIEtub3dpbmcgdGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIGVuYWJsZS9kaXNhYmxlIGRpcmVjdGl2ZXMgYXJlIGRlZmluZWQuIFRpbWUgdG8gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMgYW5kIGZlYXR1cmVzIGFyZSBiZWluZyBjb25zaWRlcmVkIGhlcmUgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggY29tcG9uZW50cyBhcmUgbW9kdWxhciwgYnVpbHQtaW4sIG9yIHBvdGVudGlhbGx5IGV4Y2x1ZGVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGEgc3RyZWFtbGluZWQgYW5kIG9wdGltaXplZCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Mzo1MC43NDUxNTE4ODlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgTkZDX1NJTVxcbiAgMzI6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIGRyaXZlciBkZWNsYXJlcyB0d28gdmlydHVhbCBORkMgZGV2aWNlcyBzdXBwb3J0aW5nIE5GQy1ERVBcXG4gIDM2OlxcdFxcdCAgcHJvdG9jb2wuIEFuIExMQ1AgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgYmV0d2VlbiB0aGVtIGFuZFxcbiAgMzc6XFx0XFx0ICBhbGwgcGFja2V0cyBzZW50IGZyb20gb25lIGRldmljZSBpcyBzZW50IGJhY2sgdG8gdGhlIG90aGVyLCBhY3RpbmcgYXNcXG4gIDM4OlxcdFxcdCAgbG9vcGJhY2sgZGV2aWNlcy5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZDX1BPUlQxMDBcXG4gIDQzOlxcdFxcdHRyaXN0YXRlIFxcXCJTb255IE5GQyBQb3J0LTEwMCBTZXJpZXMgVVNCIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDM6NTAuNzQ1Mjc3MTY5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxOTgwODgyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5GQyBOZXRsaW5rIFNlcnZpY2UgRGlzY292ZXJ5IFJlcXVlc3QgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYG5ldC9uZmMvbmV0bGluay5jYCBmb2N1c2VzIG9uIGZpeGluZyBhIG1lbW9yeSBsZWFrIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBgbmZjX2dlbmxfbGxjX3NkcmVxYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgTkZDIGRldmljZXMsIGVtcGxveWluZyB0aGUgTkZDLURFUCBwcm90b2NvbC4gTExDUCBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQgYmV0d2VlbiB0aGVzZSB2aXJ0dWFsIGRldmljZXMsIGFuZCBwYWNrZXRzIGFyZSBsb29wZWQgYmFjay4gU3l6a2FsbGVyIHN1cHBvcnRzIE5GQyBhbmQgcmVsYXRlZCBuZXRsaW5rIG1lY2hhbmlzbXMsIGluY2x1ZGluZyBzaW11bGF0ZWQgZGV2aWNlcywgd2hpY2ggbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IFNEUCAoU2VydmljZSBEaXNjb3ZlcnkgUHJvdG9jb2wpIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQuIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGl0ZXJhdGVzIHRocm91Z2ggU0RQIGF0dHJpYnV0ZXMgcmVjZWl2ZWQgdmlhIG5ldGxpbmsuICBDcnVjaWFsbHksIGl0IGJ1aWxkcyBTRFAgVExWcyAoVHlwZS1MZW5ndGgtVmFsdWUpIHVzaW5nIGBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHZgIGFuZCBhZGRzIHRoZW0gdG8gYSBsaXN0LCBgc2RyZXFfbGlzdGAuIFByZXZpb3VzbHksIGlmIGFuIGVycm9yIG9jY3VycmVkICphZnRlciogZWxlbWVudHMgd2VyZSBhZGRlZCB0byBgc2RyZXFfbGlzdGAgd2l0aGluIHRoZSBsb29wIG9yIGFmdGVyIGEgc3Vic2VxdWVudCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGNhbGwsIHRoZSBmdW5jdGlvbiB3b3VsZCBzaW1wbHkgYGdvdG8gcHV0X2xvY2FsYCB3aGljaCBsZWFrZWQgdGhlIG1lbW9yeSBvZiB0aGUgYHNkcmVxX2xpc3RgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZ290byBmcmVlX2xpc3RgIHRvIGNvcnJlY3RseSBmcmVlIHRoZSBgc2RyZXFfbGlzdGAgd2hpY2ggcHJldmVudHMgdGhpcyBsZWFrLlxuXG5Ob3csIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgY29tZXMgaW50byBwbGF5LiBJZiBpdCAqc3VjY2VlZHMqLCBpdCBtb3ZlcyB0aGUgZWxlbWVudHMgZnJvbSBgc2RyZXFfbGlzdGAgdG8gYSBkaWZmZXJlbnQgbGlzdCBhbmQgKnRoZW4qIHRoZSBjb2RlIGZhbGxzIHRocm91Z2ggdG8gYGZyZWVfbGlzdGAsIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlICplbXB0eSogYHNkcmVxX2xpc3RgLCB3aGljaCBpcyBhIG5vLW9wLiBJZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZhaWxzLCB0aGUgYHNkcmVxX2xpc3RgIHdvdWxkIGJlIGNvcnJlY3RseSBmcmVlZC5cblxuVGhpcyBwYXRjaCBsb29rcyBzb3VuZCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIE1vcmVvdmVyLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIGl0IGZ1enphYmxlLiBORkMgbmV0bGluayBmdW5jdGlvbmFsaXR5IGNhbiBiZSBhY2Nlc3NlZCB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMsIGFuZCBTeXprYWxsZXIgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC4gRW5hYmxpbmcgdGhlIGBORkNgIGNvbmZpZyBvcHRpb24gaXMgZW5vdWdoLiBUaGUgZnVuY3Rpb24gYG5mY19nZW5sX2xsY19zZHJlcWAgaXMgbm90IGlubGluZWQgYW5kIHdpbGwgYmUgdmlzaWJsZSB0byBzeW1ib2wgY292ZXJhZ2UsIGFzIGl0IGlzIHBhcnQgb2YgdGhlIGBuZmNfZ2VubF9vcHNgIGFycmF5LiBUaHVzLCBmdXp6aW5nIGBuZmNfZ2VubF9sbGNfc2RyZXFgIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEuIFRoZSBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ1OjEyLjcyNjE2MzkwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4ODI2MjgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ1OjEzLjE3NTAwMTkwOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NzUzMDQ5ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5GQyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIE5GQyBuZXRsaW5rIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L25mYy9uZXRsaW5rLmNgLCBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IGAjaWZgIG9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gdGhlcmUuIEludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZSBjb2RlJ3MgYmVoYXZpb3IgcHJvYmFibHkgaXNuJ3QgY29uZGl0aW9uYWwgYmFzZWQgb24gcHJlcHJvY2Vzc29yIGZsYWdzLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkgd2l0aGluIHRoaXMgZmlsZS4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc2ltdWxhdGVkIGRldmljZXMg4oCTIGVzcGVjaWFsbHkgZm9yIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50IOKAkyBhcmUgY29uZmlndXJlZCB0byBicmluZyB1cCB0aGUgREVQIGxpbmsuIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgREVQYCBsaW5rcyB3b3VsZCBiZWNvbWUgcmVhY2hhYmxlLiBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZT8gSSBpbW1lZGlhdGVseSB0aGluayBvZiBgQ09ORklHX05GQ19TSU1gLCBgQ09ORklHX05GQ19ESUdJVEFMYCwgb3IgbWF5YmUgZXZlbiBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAuXG5cbkZpcnN0LCBhIHJlYWxpdHkgY2hlY2s6IHdoYXQgZXhhY3RseSAqZG9lcyogYENPTkZJR19ORkNgIGRlcGVuZCBvbiwgZnVuZGFtZW50YWxseT8gTGV0J3MgY2hlY2sgdGhlIGBuZXQvbmZjL0tjb25maWdgIGZpbGUuIEFoLCB0aGUgYG1lbnVjb25maWcgTkZDYCBibG9jay4gSSBzZWUgaXQgZGVwZW5kcyBvbiBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBSRktJTExgLCB3aGljaCBpcyBhIGJpdCBvZGQgYnV0IGZ1bmN0aW9uYWxseSBtYWtlcyBzZW5zZS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBiZWNhdXNlIGl0J3MgdW5kZXIgdGhlIGBuZXQvYCBkaXJlY3RvcnkgYW5kIGlzIGxpa2VseSB1dGlsaXppbmcgbmV0bGluay4gU28gYE5GQ2AgaXMgZXNzZW50aWFsbHkgdGhlIGNvcmUgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgc2ltdWxhdGVkIGRldmljZSBvcHRpb25zLiBgTkZDX0RJR0lUQUxgLCBgTkZDX1NJTWAgKG9yIGBORkNfVklSVFVBTF9OQ0lgKSBhcmUgdGhlIGxpa2VseSBjdWxwcml0cyBmb3IgdmlydHVhbCBORkMgZGV2aWNlIHN1cHBvcnQsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGRlcGVuZGVuY2llcy4gRG9lcyBgTkZDX1NJTWAgZGVwZW5kIG9uIGBORkNfRElHSVRBTGA/IExldCdzIGNvbmZpcm0gd2l0aCB0aGUgS2NvbmZpZzpcblxuWWVwLCBhbmQgaXQgaXMgYSAqaGFyZCogZGVwZW5kZW5jeS4gVGhlIEtjb25maWcgc25pcHBldCBjb25maXJtcyBpdCBkaXJlY3RseS4gT2theSwgbGV0J3Mgc2VlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGhpZXJhcmNoeTogYE5GQ19TSU1gIGRlcGVuZHMgb24gYE5GQ19ESUdJVEFMYCwgYW5kIGBORkNfRElHSVRBTGAgZGVwZW5kcyBvbiBgTkZDYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCB3aGF0IGFib3V0IGBORkNfVklSVFVBTF9OQ0lgPyBMb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoYXQsIGl0IGRlcGVuZHMgb24gYE5GQ19OQ0lgLlxuXG5MZXQncyBub3cgaW52ZXN0aWdhdGUgYE5GQ19OQ0lgLiBJdCBzZWVtcyBJJ2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9uZmMvbmNpL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Njo0MC43MDU1MDQ1OTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19OQ0lcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXFxuICAgODpcXHRcXHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBOQ0kgc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDExOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKG5jaSkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORkNfTkNJX1NQSVxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMTU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxcbiAgMjA6XFx0XFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDY6NDAuNzA1NTcyMzQ3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1NjIwNTI5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIE15IHRhc2sgaXMgdG8gaWRlbnRpZnkgdGhlIHByZWNpc2UgYENPTkZJR19gIG9wdGlvbnMgbmVlZGVkIHRvIGVuc3VyZSB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBgbmZjX2dlbmxfbGxjX3NkcmVxYCB3aXRoaW4gYG5ldC9uZmMvbmV0bGluay5jYCwgY29tcGlsZXMgY29ycmVjdGx5IGFuZCBpcyByZWFjaGFibGUuIFRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXplIHRob3JvdWdobmVzczogbm8gYXNzdW1wdGlvbnMsIEtjb25maWcgaW5zcGVjdGlvbiwgYW5kIGNvbnNpZGVyaW5nIGRlcGVuZGVuY2llcy5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYE5GQ2AgaXMgdGhlIGtleS4gVGhlIGNvZGUgY29tcGlsZXMgd2l0aGluIHRoZSBgTkZDYCBjb25maWd1cmF0aW9uIHNwYWNlLCBzbyBgTkZDYCBpcyBkZWZpbml0ZWx5IGVzc2VudGlhbC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTkVUYCBpc24ndCBhIHJlcXVpcmVkIHBhcmVudCBzdWJzeXN0ZW0sIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBORkNgIGFuZCBwb3NzaWJseSBgTkZDX1NJTWAgYXMgdGhleSBtYXkgYmUgYmVuZWZpY2lhbCBhbmQgYXJlIGFsc28gZ29vZCBwcmFjdGljZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgYWxsIHRoZSBkZXRhaWxzIGJlZm9yZSBJIHN1Ym1pdCBteSBmaW5kaW5ncyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cbiogICBgV29ydGhGdXp6aW5nYDogQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLCBtZWFuaW5nIGl0J3MgaGlnaGx5IHN1c2NlcHRpYmxlIHRvIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGluY29ycmVjdCBzdGF0ZXMuXG4qICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZC4gSSdtIGZvY3VzaW5nIG9uIGBuZmNfZ2VubF9sbGNfc2RyZXFgLCBzbyB0aGF0J3Mgc3BvdCBvbi5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEkndmUgZ290IHRoaXM6IGBbXCJORkNcIl1gLiBBbmQgdG8gYmUgdGhvcm91Z2gsIEknbGwgaW5jbHVkZSBgW1wiTkZDXCIsIFwiTkZDX1NJTVwiXWAgdG8gbWF4aW1pemUgcmVhY2hhYmlsaXR5LlxuKiAgIGBSZWFzb25pbmdgOiBIZXJlJ3MgdGhlIGNvcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG5mY19nZW5sX2xsY19zZHJlcSgpYC4gSXQgcHJldmVudHMgYSBtZW1vcnkgbGVhayBieSBlbnN1cmluZyB0aGUgcHJvcGVyIGZyZWVpbmcgb2YgU0RQIFRMViBsaXN0IGVudHJpZXMsIGJvdGggaW4gZXJyb3IgY2FzZXMgYW5kIGFmdGVyIHNlbmRpbmcgdGhlIFNOTCBTRFJFUSBtZXNzYWdlLiBUaGlzIHJlYWNoYWJsZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rLCBhbmQgaXQgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cbkV2ZXJ5dGhpbmcgaXMgbWV0aWN1bG91c2x5IGNoZWNrZWQgYW5kIHZlcmlmaWVkLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjcxNSwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Njo1MC4yNjc2Mjk2NjFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM1ODQxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19nZW5sX2xsY19zZHJlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGFuZCBjb21wbGV0aW9uIGhhbmRsaW5nIGluIG5mY19nZW5sX2xsY19zZHJlcSgpIGluIG5ldC9uZmMvbmV0bGluay5jIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIG9mIFNEUCBUTFYgZWxlbWVudHMgd2hlbiBwcm9jZXNzaW5nIE5GQ19DTURfTExDX1NEUkVRIGdlbmVyaWMgbmV0bGluayBjb21tYW5kcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHNvZnR3YXJlLWVtdWxhdGVkIE5GQyBkZXZpY2VzLCBtYWtpbmcgaXQgd29ydGh3aGlsZSB0byBmdXp6IGZvciByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGxpc3QgaGFuZGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZjX2dlbmxfbGxjX3NkcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgYW5kIGNvbXBsZXRpb24gaGFuZGxpbmcgaW4gbmZjX2dlbmxfbGxjX3NkcmVxKCkgaW4gbmV0L25mYy9uZXRsaW5rLmMgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgb2YgU0RQIFRMViBlbGVtZW50cyB3aGVuIHByb2Nlc3NpbmcgTkZDX0NNRF9MTENfU0RSRVEgZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cyBhbmQgc29mdHdhcmUtZW11bGF0ZWQgTkZDIGRldmljZXMsIG1ha2luZyBpdCB3b3J0aHdoaWxlIHRvIGZ1enogZm9yIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgbGlzdCBoYW5kbGluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDY6NTAuNDExMjIzMjI2WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg5ODg3MTU2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Njo1MC40MTE5MTg1MTdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1Mjg5ODgwMTU1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXFxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYzg0NmEzZDdiNjRjZWYzYmQxNzM5NTZlMDVjYTZkNWE3MzEwOTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6MzE6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25ldGxpbmsuYyBiL25ldC9uZmMvbmV0bGluay5jXG5pbmRleCAwYzU4ODI0Y2IxNTBkLi4yMjRiZGZhMmRkMGRjIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uZXRsaW5rLmNcbisrKyBiL25ldC9uZmMvbmV0bGluay5jXG5AQCAtMTE4MSw3ICsxMTgxLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdFx0aWYgKHJjICE9IDApIHtcbiBcdFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBwdXRfbG9jYWw7XG4rXHRcdFx0Z290byBmcmVlX2xpc3Q7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKCFzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pXG5AQCAtMTIwMCw3ICsxMjAwLDcgQEAgc3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xuIFx0XHRpZiAoc2RyZXEgPT0gTlVMTCkge1xuIFx0XHRcdHJjID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHB1dF9sb2NhbDtcbitcdFx0XHRnb3RvIGZyZWVfbGlzdDtcbiBcdFx0fVxuIFxuIFx0XHR0bHZzX2xlbiArPSBzZHJlcS1cdTAwM2V0bHZfbGVuO1xuQEAgLTEyMTUsNiArMTIxNSw5IEBAIHN0YXRpYyBpbnQgbmZjX2dlbmxfbGxjX3NkcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XG4gXG4rZnJlZV9saXN0OlxuK1x0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7XG4rXG4gcHV0X2xvY2FsOlxuIFx0bmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ2OjUwLjQxMTkxOTQ3N1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDQyNDc5OTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgY29kZSBjaGFuZ2VzIHdhcnJhbnQgdGhlIGV4cGVuc2Ugb2YgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogKipLTVNBTiBpcyBvbmx5IG5lZWRlZCBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGNhbiBkZXRlY3QuKiogQW55dGhpbmcgS0FTQU4sIExvY2tEZXAsIG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzIHdvdWxkIGZpbmQgaXMgYSBuby1nbyBmb3IgS01TQU4uIFRoYXQncyB0aGUgZ3VpZGluZyBwcmluY2lwbGUuXG5cblNvLCBsZXQncyBmb2N1cyBvbiB0aGUgY3JpdGljYWwgYXJlYS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBwYXJ0aWN1bGFybHkgYG5mY19nZW5sX2xsY19zZHJlcWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGFuZCBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgLCBhcm91bmQgbGluZSAxMTgxIGluIGBuZXQvbmZjL25ldGxpbmsuY2AuIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGNvZGUgZnJvbSBsaW5lcyAxMTUwLTEyNDAuIEkgd2lsbCBsb29rIGZvciBhbnkgcmVkIGZsYWdzLCBhbnkgaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIHVuY292ZXIuIFRoaXMgaXMgdGhlIGNydXggb2YgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Nzo1MC44MzY3MjQ4MDlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tORkNfQVRUUl9ERVZJQ0VfSU5ERVhdIHx8XFxuMTE1MTpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0xMQ19TRFBdKVxcbjExNTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdFxcdGlkeCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0pO1xcbjExNTU6XFx0XFxuMTE1NjpcXHRcXHRkZXYgPSBuZmNfZ2V0X2RldmljZShpZHgpO1xcbjExNTc6XFx0XFx0aWYgKCFkZXYpXFxuMTE1ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0ZGV2aWNlX2xvY2soXFx1MDAyNmRldi1cXHUwMDNlZGV2KTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcXG4xMTYzOlxcdFxcdFxcdHJjID0gLUVOT0xJTks7XFxuMTE2NDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTE2NTpcXHRcXHR9XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGxvY2FsID0gbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpO1xcbjExNjg6XFx0XFx0aWYgKCFsb2NhbCkge1xcbjExNjk6XFx0XFx0XFx0cmMgPSAtRU5PREVWO1xcbjExNzA6XFx0XFx0XFx0Z290byBleGl0O1xcbjExNzE6XFx0XFx0fVxcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNkcmVxX2xpc3QpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHR0bHZzX2xlbiA9IDA7XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cXHUwMDNlYXR0cnNbTkZDX0FUVFJfTExDX1NEUF0sIHJlbSkge1xcbjExNzg6XFx0XFx0XFx0cmMgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc2RwX2F0dHJzLCBORkNfU0RQX0FUVFJfTUFYLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHIsIG5mY19zZHBfZ2VubF9wb2xpY3ksXFxuMTE4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0XFx0aWYgKHJjICE9IDApIHtcXG4xMTgzOlxcdFxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMTg0OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjExODU6XFx0XFx0XFx0fVxcbjExODY6XFx0XFxuMTE4NzpcXHRcXHRcXHRpZiAoIXNkcF9hdHRyc1tORkNfU0RQX0FUVFJfVVJJXSlcXG4xMTg4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRcXHR1cmlfbGVuID0gbmxhX2xlbihzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTE6XFx0XFx0XFx0aWYgKHVyaV9sZW4gPT0gMClcXG4xMTkyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRcXHR1cmkgPSBubGFfZGF0YShzZHBfYXR0cnNbTkZDX1NEUF9BVFRSX1VSSV0pO1xcbjExOTU6XFx0XFx0XFx0aWYgKCp1cmkgPT0gMClcXG4xMTk2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExOTc6XFx0XFxuMTE5ODpcXHRcXHRcXHR0aWQgPSBsb2NhbC1cXHUwMDNlc2RyZXFfbmV4dF90aWQrKztcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0XFx0c2RyZXEgPSBuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodGlkLCB1cmksIHVyaV9sZW4pO1xcbjEyMDE6XFx0XFx0XFx0aWYgKHNkcmVxID09IE5VTEwpIHtcXG4xMjAyOlxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4xMjAzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9saXN0O1xcbjEyMDQ6XFx0XFx0XFx0fVxcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRcXHR0bHZzX2xlbiArPSBzZHJlcS1cXHUwMDNldGx2X2xlbjtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlLCBcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIwOTpcXHRcXHR9XFxuMTIxMDpcXHRcXG4xMjExOlxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2c2RyZXFfbGlzdCkpIHtcXG4xMjEyOlxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMjEzOlxcdFxcdFxcdGdvdG8gcHV0X2xvY2FsO1xcbjEyMTQ6XFx0XFx0fVxcbjEyMTU6XFx0XFxuMTIxNjpcXHRcXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xcbjEyMTc6XFx0XFxuMTIxODpcXHRmcmVlX2xpc3Q6XFxuMTIxOTpcXHRcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdHB1dF9sb2NhbDpcXG4xMjIyOlxcdFxcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XFxuMTIyMzpcXHRcXG4xMjI0OlxcdGV4aXQ6XFxuMTIyNTpcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuMTIyNjpcXHRcXG4xMjI3OlxcdFxcdG5mY19wdXRfZGV2aWNlKGRldik7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdHJldHVybiByYztcXG4xMjMwOlxcdH1cXG4xMjMxOlxcdFxcbjEyMzI6XFx0c3RhdGljIGludCBuZmNfZ2VubF9md19kb3dubG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjEyMzM6XFx0e1xcbjEyMzQ6XFx0XFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG4xMjM1OlxcdFxcdGludCByYztcXG4xMjM2OlxcdFxcdHUzMiBpZHg7XFxuMTIzNzpcXHRcXHRjaGFyIGZpcm13YXJlX25hbWVbTkZDX0ZJUk1XQVJFX05BTUVfTUFYU0laRSArIDFdO1xcbjEyMzg6XFx0XFxuMTIzOTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0RFVklDRV9JTkRFWF0gfHwgIWluZm8tXFx1MDAzZWF0dHJzW05GQ19BVFRSX0ZJUk1XQVJFX05BTUVdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0Nzo1MC44MzY5NDQ2NDlaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMzNDEzNzY4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgYW5kIGBzZHJlcV9saXN0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW50ZXJuYWxseSB3aXRoIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYHNkcmVxX2xpc3RgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGhhbmRsaW5nIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3RzIHdpdGhpbiB0aGUgTExDUCBwcm90b2NvbCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU0QgKFNlcnZpY2UgRGlzY292ZXJ5KSByZXF1ZXN0IGxpc3QuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgaG93IGl0J3MgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSByaWdodCB0byB0aGUgY3JpdGljYWwgcG9pbnRzIGludm9sdmluZyBgc2RyZXFfbGlzdGAuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0ODozNC4xNzgzMjcxMzFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzU1NDU4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwLmg9MjM4PWludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcC5oLTIzOS1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjI0MDppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3AuaC0yNDEtXFx0XFx0XFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jPTU2OT1pbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXMoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Mi1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1OTM6aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTk0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbilcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTExMzc9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTEyMTUtXFxubmV0L25mYy9uZXRsaW5rLmM6MTIxNjpcXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcXHUwMDI2c2RyZXFfbGlzdCwgdGx2c19sZW4pO1xcbm5ldC9uZmMvbmV0bGluay5jLTEyMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjQ4OjM2LjY1Mzg4MTc2N1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDUyMTczMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTExDUCBDb21tYW5kcyBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiBob3cgTExDUCBjb21tYW5kcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIE5GQyBzdGFjay4gSSd2ZSBnb3QgYSBzcGVjaWZpYyBsb2NhdGlvbiBpbiBtaW5kIC0gbGV0J3MgemVybyBpbiBvbiBgbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU5My4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgcHJvY2Vzc2luZyBsb2dpYyBraWNrcyBpbiwgb3IgYXQgbGVhc3QgdGhlIGJyYW5jaGluZyB0aGF0IGRlY2lkZXMgaG93IHRoaW5ncyBnZXQgcHJvY2Vzc2VkLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyBpbiBtb3JlIGRldGFpbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjZW50cmFsIGNvbW1hbmQgZGlzcGF0Y2gsIHRoZSBwYXJzaW5nIG9mIGluY29taW5nIExMQ1AgZnJhbWVzLCBvciBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBjZXJ0YWluIGNvbnRyb2wgbWVzc2FnZXMuIExpbmUgNTkzIGlzIGxpa2VseSB0byBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgb3BlcmF0aW9uIEknbSBpbnRlcmVzdGVkIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTE0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NDg6NDUuNzA2MDU4NjIzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3BfY29tbWFuZHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODU6XFx0XFx0XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2KHNkcCk7XFxuIDU4NjpcXHRcXHR9XFxuIDU4NzpcXHRcXG4gNTg4OlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfcXVldWUsIHNrYik7XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdHJldHVybiAwO1xcbiA1OTE6XFx0fVxcbiA1OTI6XFx0XFxuIDU5MzpcXHRpbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4gNTk0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbilcXG4gNTk1OlxcdHtcXG4gNTk2OlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHJlcTtcXG4gNTk3OlxcdFxcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xcbiA1OTg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTk5OlxcdFxcbiA2MDA6XFx0XFx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XFxuIDYwMTpcXHRcXHRpZiAoSVNfRVJSKHNrYikpXFxuIDYwMjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihza2IpO1xcbiA2MDM6XFx0XFxuIDYwNDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlc2RyZXFfbG9jayk7XFxuIDYwNTpcXHRcXG4gNjA2OlxcdFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2bG9jYWwtXFx1MDAzZXBlbmRpbmdfc2RyZXFzKSlcXG4gNjA3OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX3RpbWVyLFxcbiA2MDg6XFx0XFx0XFx0XFx0ICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygzICogbG9jYWwtXFx1MDAzZXJlbW90ZV9sdG8pKTtcXG4gNjA5OlxcdFxcbiA2MTA6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZHJlcSwgbiwgdGx2X2xpc3QsIG5vZGUpIHtcXG4gNjExOlxcdFxcdFxcdHByX2RlYnVnKFxcXCJ0aWQgJWQgZm9yICVzXFxcXG5cXFwiLCBzZHJlcS1cXHUwMDNldGlkLCBzZHJlcS1cXHUwMDNldXJpKTtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgc2RyZXEtXFx1MDAzZXRsdiwgc2RyZXEtXFx1MDAzZXRsdl9sZW4pO1xcbiA2MTQ6XFx0XFxuIDYxNTpcXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlKTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnNkcmVxLVxcdTAwM2Vub2RlLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcXG4gNjE4OlxcdFxcdH1cXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NhbC1cXHUwMDNlc2RyZXFfbG9jayk7XFxuIDYyMTpcXHRcXG4gNjIyOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfcXVldWUsIHNrYik7XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdHJldHVybiAwO1xcbiA2MjU6XFx0fVxcbiA2MjY6XFx0XFxuIDYyNzpcXHRpbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXFxuIDYyODpcXHR7XFxuIDYyOTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2MzA6XFx0XFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG4gNjMxOlxcdFxcdHUxNiBzaXplID0gMTsgLyogUmVhc29uIGNvZGUgKi9cXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0cHJfZGVidWcoXFxcIlNlbmRpbmcgRE0gcmVhc29uIDB4JXhcXFxcblxcXCIsIHJlYXNvbik7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdGlmIChsb2NhbCA9PSBOVUxMKVxcbiA2MzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdGRldiA9IGxvY2FsLVxcdTAwM2VkZXY7XFxuIDYzOTpcXHRcXHRpZiAoZGV2ID09IE5VTEwpXFxuIDY0MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0c2l6ZSArPSBMTENQX0hFQURFUl9TSVpFO1xcbiA2NDM6XFx0XFx0c2l6ZSArPSBkZXYtXFx1MDAzZXR4X2hlYWRyb29tICsgZGV2LVxcdTAwM2V0eF90YWlscm9vbSArIE5GQ19IRUFERVJfU0laRTtcXG4gNjQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo0ODo0NS43MDYxODU0MjNaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzkxNjk0ODg0MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGluIE5GQyBMTENQIFNlcnZpY2UgRGlzY292ZXJ5IFJlcXVlc3QgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIGlmIGBuZmNfbGxjcF9hbGxvY2F0ZV9zbmwobG9jYWwsIHRsdnNfbGVuKWAgZmFpbHMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHJldHVybmluZyBhbiBgRVJSX1BUUihza2IpYC4gQ3J1Y2lhbGx5LCBpdCByZXR1cm5zICpiZWZvcmUqIGNvbnN1bWluZyB0aGUgYHRsdl9saXN0YC4gVGhhdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGxlYWsuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHdoZXJlIHRoaXMgaXMgY2FsbGVkOiBgbmZjX2dlbmxfbGxjX3NkcmVxYC4gVGhlIG9yaWdpbmFsIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRyYyA9IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKGxvY2FsLCBcdTAwMjZzZHJlcV9saXN0LCB0bHZzX2xlbik7XG5cbnB1dF9sb2NhbDpcblx0bmZjX2xsY3BfbG9jYWxfcHV0KGxvY2FsKTtcbmBgYFxuXG5UaGUgb2xkIGZsb3cgdXNlZCB0byBoYXZlIGEgbG9vcCB0aGF0IGNoZWNrZWQ6IGBJZiByYyAhPSAwIG9yIHNkcmVxID09IE5VTExgOiBgZ290byBwdXRfbG9jYWw7YC4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBpZiB0aGVyZSdzIGFuIGVycm9yIGluIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAgKGxpa2UgdGhlIGFsbG9jYXRpb24gZmFpbHVyZSBJIG1lbnRpb25lZCksIG9yIGlmIHRoZSByZXR1cm4gY29kZSBpcyBub24temVybywgdGhlIGNvZGUganVtcHMgdG8gYHB1dF9sb2NhbGAgKndpdGhvdXQqIGZyZWVpbmcgdGhlIGBzZHJlcV9saXN0YC4gIEFub3RoZXIgbGVhayFcblxuQnV0Li4uIHdoYXQgaWYgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCBhY3R1YWxseSAqc3VjY2VlZHMqPyBMZXQncyB0cmFjZSBpdC4gSW5zaWRlIGBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcWAsIEkgc2VlIHRoaXMgY3JpdGljYWwgc25pcHBldDpcblxuYGBgY1xuXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RyZXEsIG4sIHRsdl9saXN0LCBub2RlKSB7XG5cdFx0XHRwcl9kZWJ1ZyhcInRpZCAlZCBmb3IgJXNcXG5cIiwgc2RyZXEtXHUwMDNldGlkLCBzZHJlcS1cdTAwM2V1cmkpO1xuXG5cdFx0XHRza2JfcHV0X2RhdGEoc2tiLCBzZHJlcS1cdTAwM2V0bHYsIHNkcmVxLVx1MDAzZXRsdl9sZW4pO1xuXG5cdFx0XHRobGlzdF9kZWwoXHUwMDI2c2RyZXEtXHUwMDNlbm9kZSk7XG5cblx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnNkcmVxLVx1MDAzZW5vZGUsIFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcblx0XHR9XG5gYGBcblxuQWhhISAgRWFjaCBlbnRyeSBpbiBgdGx2X2xpc3RgIGlzICptb3ZlZCogdG8gYGxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzYC4gIFNvLCBpZiBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXFgICpzdWNjZWVkcyosIHRoZSBvcmlnaW5hbCBgdGx2X2xpc3RgICh3aGljaCBpcyBgXHUwMDI2c2RyZXFfbGlzdGApIGlzIG5vdyAqZW1wdHkqISAoYGhsaXN0X2VtcHR5KFx1MDAyNnNkcmVxX2xpc3QpID09IHRydWVgKS4gU28sIG5vIGxlYWshICBUaGF0J3MgZ29vZC5cblxuU28sIHRoZSBjcml0aWNhbCBjYXNlcyBhcmUgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIHRob3NlIG5vbi16ZXJvIHJldHVybiBjb2RlcyAqYmVmb3JlKiB0aGUgbGlzdCBpcyBlbXB0aWVkLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgbGlzdCBpcyB1bHRpbWF0ZWx5IGNsZWFuZWQgdXAsIGxldCdzIGZpbmQgd2hlcmUgYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCBpcyB1c2VkIGFuZCBzZWUgaWYgaXQgaXMgYXBwcm9wcmlhdGVseSBjYWxsZWQuIEknbGwgbmVlZCB0byBkbyBzb21lIGdyZXBwaW5nIG5vdyB0byBiZSBzdXJlIG9mIHRoZSBmaW5hbCBjbGVhbnVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6NTU6MTcuNDAxMDcyMjYyWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3MDc5NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcC5oPTIzMj12b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzM6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xcbm5ldC9uZmMvbGxjcC5oLTIzNC12b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0xNzQ9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3OS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODA6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODEte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0xNjA9c3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzEtXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG9jYWwtXFx1MDAzZXNkcmVxX3RpbWVvdXRfd29yayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNzI6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNmxvY2FsLVxcdTAwM2VwZW5kaW5nX3NkcmVxcyk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzMtfVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MzYzPWludCBuZmNfZ2VubF9sbGNfc2VuZF9zZHJlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RyZXNfbGlzdClcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTQyMy1cXG5uZXQvbmZjL25ldGxpbmsuYzo0MjQ6XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc2RyZXNfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtNDI1LVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTIxOC1mcmVlX2xpc3Q6XFxubmV0L25mYy9uZXRsaW5rLmM6MTIxOTpcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2c2RyZXFfbGlzdCk7XFxubmV0L25mYy9uZXRsaW5rLmMtMTIyMC1cXG4tLVxcbm5ldC9uZmMvbmZjLmg9NTg9dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHYoc3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcCk7XFxubmV0L25mYy9uZmMuaDo1OTp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKTtcXG5uZXQvbmZjL25mYy5oLTYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo1NToxOC45MTgxNjE4MzhaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ2OTE4ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIGxsY3BfY29tbWFuZHMuYyBDb2RlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvbmZjL2xsY3BfY29tbWFuZHMuY2AgYW5kIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byBTRFAgVExWIGxpc3RzLCBhbmQgdGhpcyBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgZnJlZSBvcGVyYXRpb24sIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYW55IHN1YnRsZXRpZXMgb3IgcG90ZW50aWFsIGdvdGNoYXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo1NToyNC4zODczNTM5NTdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcbiAxNzE6XFx0XFx0cmV0dXJuIHNkcmVxO1xcbiAxNzI6XFx0fVxcbiAxNzM6XFx0XFxuIDE3NDpcXHR2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0a2ZyZWUoc2RwLVxcdTAwM2V0bHYpO1xcbiAxNzc6XFx0XFx0a2ZyZWUoc2RwKTtcXG4gMTc4OlxcdH1cXG4gMTc5OlxcdFxcbiAxODA6XFx0dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZClcXG4gMTgxOlxcdHtcXG4gMTgyOlxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHA7XFxuIDE4MzpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZHAsIG4sIGhlYWQsIG5vZGUpIHtcXG4gMTg2OlxcdFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2c2RwLVxcdTAwM2Vub2RlKTtcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0XFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2KHNkcCk7XFxuIDE4OTpcXHRcXHR9XFxuIDE5MDpcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdGludCBuZmNfbGxjcF9wYXJzZV9nYl90bHYoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG4gMTkzOlxcdFxcdFxcdFxcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pXFxuIDE5NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjU1OjI0LjM4NzQ0NDI4NloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTAxMjQ2ODkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgTGVhayBGaXggaW4gTkZDIE5ldGxpbmsgSW50ZXJmYWNlOiBLTVNBTiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgIGZ1bmN0aW9uIGp1c3QgaXRlcmF0ZXMgdGhyb3VnaCBhIGxpc3QsIGRlbGV0ZXMgZWFjaCBlbGVtZW50LCBhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgbWVtb3J5LiBJZiB0aGUgbGlzdCBpcyBlbXB0eSBhZnRlciBhIHN1Y2Nlc3NmdWwgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxYCwgdGhlIGxvb3AgZG9lc24ndCBldmVuIHJ1bi4gIEFuZCwgY3J1Y2lhbGx5LCBhbnkgcmVtYWluaW5nIGVsZW1lbnRzIGluIGBzZHJlcV9saXN0YCBhcmUgYWxzbyBmcmVlZCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9yIHNlbmRpbmcgb2YgdGhlIFNEUkVRLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBtZW1vcnkgbGVhayBpbiBgbmZjX2dlbmxfbGxjX3NkcmVxKClgLiBJdCBsb29rcyBsaWtlIHdoZW4gYG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCgpYCBmYWlscywgb3IgYWxsb2NhdGlvbiBmYWlscyBpbiBgbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KClgLCBvciBgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoKWAgaXRzZWxmIGZhaWxzLCB0aGUgY29kZSBwcmV2aW91c2x5IGp1bXBlZCB0byBgcHV0X2xvY2FsYCB3aXRob3V0IGNsZWFuaW5nIHVwIHRoZSBhbGxvY2F0ZWQgVExWcy4gTm93LCB0aGUgcGF0Y2ggY29ycmVjdGx5IGFkZHMgYSBgZnJlZV9saXN0OmAgbGFiZWwgdG8gY2FsbCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdCk7YCBiZWZvcmUgYHB1dF9sb2NhbGAgZm9yIGEgY29uc2lzdGVudCBjbGVhbnVwLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IEtNU0FOLiBBcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmU/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFdlJ3JlIG5vdCBzZW5kaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBvciBhbnkgb2YgdGhvc2UgbWV0aG9kcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIFRoZSBgc2RyZXFfbGlzdGAgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX0hMSVNUX0hFQUQoXHUwMDI2c2RyZXFfbGlzdCk7YCBhdCBsaW5lIDExNzMgYmVmb3JlIGFueSB1c2Ugb3IgYnJhbmNoLlxuMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBUaGlzIHBhdGNoICpvbmx5KiBmcmVlcyBtZW1vcnkuIE5vIG5ldyBhbGxvY2F0aW9ucyBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcz8qKiBEZWZpbml0ZWx5IG5vdC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggY2xlYW5pbmcgdXAgYWxsb2NhdGVkIG1lbW9yeS5cblxuU28sIG5vLCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gQWxsIHRoZSBwYXRjaCBkb2VzIGlzIGZyZWUgbWVtb3J5LCBhbmQgdGhhdCdzIGl0IVxuXG5CYXNpY2FsbHksIGl0J3MgYSBtZW1vcnkgbGVhayBmaXguIElmIGFueSBidWdzIGV4aXN0IGhlcmUsIHRoZXknZCBiZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIGxpa2UgZG91YmxlIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGludmFsaWQgbGlzdCBvcGVyYXRpb25zLiBLQVNBTi9TTFVCIGRlYnVnIGlzIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgY2F0Y2hpbmcgdGhvc2UuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gSXQgZG9lc24ndCBhcHBseSBoZXJlLlxuXG4qKlRoZXJlZm9yZSwgTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuKipcblxuVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIE5GQyBuZXRsaW5rIGludGVyZmFjZSdzIGBuZmNfZ2VubF9sbGNfc2RyZXEoKWAgZnVuY3Rpb24uIFByZXZpb3VzbHksIGFsbG9jYXRlZCBUTFYgb2JqZWN0cyB3aXRoaW4gdGhlIGBzZHJlcV9saXN0YCB3ZXJlIGxlYWtlZCB1bmRlciBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMgKGZhaWxlZCBhdHRyaWJ1dGUgcGFyc2luZywgYWxsb2NhdGlvbiBlcnJvcnMsIG9yIGZhaWx1cmUgb2YgYG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKClgKS4gVGhlIGZpeCByb3V0ZXMgZXJyb3IgcGF0aHMgdGhyb3VnaCBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2c2RyZXFfbGlzdClgIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBvYmplY3RzLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlIHN0cmljdGx5IGZyZWVpbmcgaGVhcC1hbGxvY2F0ZWQgb2JqZWN0cy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBpbnZhbGlkIGxpc3Qgb3BlcmF0aW9ucyksIHdoaWNoIGFyZSBzcGVjaWZpY2FsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWdnaW5nIGZlYXR1cmVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBjb3B5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgc2RyZXFfbGlzdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IHBvdGVudGlhbCBgZ290byBmcmVlX2xpc3RgIHVzYWdlLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLCBhbmQgS0FTQU4gZnV6emluZyBpcyBhcHByb3ByaWF0ZS4gVGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgYmV0dGVyIHN1aXRlZCB0byBLQVNBTiB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjYzLCJPdXRwdXRUb2tlbnMiOjMxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzo1NTozOS4zOTk5MTU5MDNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIG1lbW9yeSBsZWFrIGluIG5ldC9uZmMvbmV0bGluay5jIChuZmNfZ2VubF9sbGNfc2RyZXEpLiBJbiB0aGUgZXZlbnQgb2YgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIGZhaWx1cmUsIFRMViBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNlbmQgZmFpbHVyZSwgcHJldmlvdXNseSBhbGxvY2F0ZWQgVExWIGVudHJpZXMgaW4gYHNkcmVxX2xpc3RgIHdlcmUgbm90IGNsZWFuZWQgdXAgYmVmb3JlIHJldHVybmluZy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY2FsbCB0byBgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXFx1MDAyNnNkcmVxX2xpc3QpYCBvbiB0aGUgZXhpdCBwYXRoIGFuZCB1cGRhdGVzIGVycm9yIGp1bXAgdGFyZ2V0cyB0byBpdC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEgKGBzZHJlcV9saXN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYElOSVRfSExJU1RfSEVBRGAgYmVmb3JlIGFueSBlcnJvciBicmFuY2hlcykuXFxuLSBUaGUgY2hhbmdlcyBzb2xlbHkgaW52b2x2ZSBlcnJvciBjbGVhbnVwIGFuZCBmcmVlaW5nIGhlYXAgbWVtb3J5IChgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3RgKS4gQW55IHBvdGVudGlhbCBidWdzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgbGlzdCB0cmF2ZXJzYWwpIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFNMVUIgZGVidWcuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayBpbiBuZXQvbmZjL25ldGxpbmsuYyAobmZjX2dlbmxfbGxjX3NkcmVxKS4gSW4gdGhlIGV2ZW50IG9mIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyBmYWlsdXJlLCBUTFYgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciBzZW5kIGZhaWx1cmUsIHByZXZpb3VzbHkgYWxsb2NhdGVkIFRMViBlbnRyaWVzIGluIGBzZHJlcV9saXN0YCB3ZXJlIG5vdCBjbGVhbmVkIHVwIGJlZm9yZSByZXR1cm5pbmcuIFRoZSBmaXggaW50cm9kdWNlcyBhIGNhbGwgdG8gYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFxcdTAwMjZzZHJlcV9saXN0KWAgb24gdGhlIGV4aXQgcGF0aCBhbmQgdXBkYXRlcyBlcnJvciBqdW1wIHRhcmdldHMgdG8gaXQuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhIChgc2RyZXFfbGlzdGAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBJTklUX0hMSVNUX0hFQURgIGJlZm9yZSBhbnkgZXJyb3IgYnJhbmNoZXMpLlxcbi0gVGhlIGNoYW5nZXMgc29sZWx5IGludm9sdmUgZXJyb3IgY2xlYW51cCBhbmQgZnJlZWluZyBoZWFwIG1lbW9yeSAoYG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0YCkuIEFueSBwb3RlbnRpYWwgYnVncyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29ycnVwdGVkIGxpc3QgdHJhdmVyc2FsKSBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBTTFVCIGRlYnVnLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowpn7hx[1] Phase: Succeeded StartedAt: 2026-09-14 13:55:50 +0000 UTC FinishedAt: 2026-09-14 13:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 13:55:50 +0000 UTC FinishedAt: 2026-09-14 13:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2] Phase: Succeeded StartedAt: 2026-09-14 13:55:50 +0000 UTC FinishedAt: 2026-09-14 18:20:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 13:55:50 +0000 UTC FinishedAt: 2026-09-14 18:20:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 13:55:50 +0000 UTC FinishedAt: 2026-09-14 13:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 13:55:50 +0000 UTC FinishedAt: 2026-09-14 13:56:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowpn7hx/series-workflowpn7hx-convert-artifact-2689912507/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 13:56:15 +0000 UTC FinishedAt: 2026-09-14 14:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 13:56:15 +0000 UTC FinishedAt: 2026-09-14 14:14:29 +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:*4e270865-ffe5-4e26-b891-684508cf20a6,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-workflowpn7hx/series-workflowpn7hx-convert-artifact-2689912507/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": "afdce122-eead-42b4-a643-f3cb873f18c4", "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-workflowpn7hx/series-workflowpn7hx-build-action-1881791737/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 13:56:15 +0000 UTC FinishedAt: 2026-09-14 14:14:19 +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:*4e270865-ffe5-4e26-b891-684508cf20a6,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-workflowpn7hx/series-workflowpn7hx-convert-artifact-2689912507/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": "afdce122-eead-42b4-a643-f3cb873f18c4", "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-workflowpn7hx/series-workflowpn7hx-build-action-1881791737/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 14:14:29 +0000 UTC FinishedAt: 2026-09-14 14:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 14:14:29 +0000 UTC FinishedAt: 2026-09-14 14:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 14:14:29 +0000 UTC FinishedAt: 2026-09-14 14:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 14:14:29 +0000 UTC FinishedAt: 2026-09-14 14:14:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowpn7hx/series-workflowpn7hx-convert-artifact-1752525842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 14:14:40 +0000 UTC FinishedAt: 2026-09-14 14:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 14:14:40 +0000 UTC FinishedAt: 2026-09-14 14:16:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afdce122-eead-42b4-a643-f3cb873f18c4,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-workflowpn7hx/series-workflowpn7hx-build-action-1881791737/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-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 14:16:30 +0000 UTC FinishedAt: 2026-09-14 14:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 14:16:30 +0000 UTC FinishedAt: 2026-09-14 14:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 14:16:30 +0000 UTC FinishedAt: 2026-09-14 14:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 14:16:30 +0000 UTC FinishedAt: 2026-09-14 14:35:27 +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:*4e270865-ffe5-4e26-b891-684508cf20a6,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-workflowpn7hx/series-workflowpn7hx-convert-artifact-1752525842/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": "7da4e2e7-17a0-43a6-8c01-4746f999f4a2", "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-workflowpn7hx/series-workflowpn7hx-build-action-4224575654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 14:16:30 +0000 UTC FinishedAt: 2026-09-14 14:34:55 +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:*4e270865-ffe5-4e26-b891-684508cf20a6,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-workflowpn7hx/series-workflowpn7hx-convert-artifact-1752525842/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": "7da4e2e7-17a0-43a6-8c01-4746f999f4a2", "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-workflowpn7hx/series-workflowpn7hx-build-action-4224575654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 14:35:27 +0000 UTC FinishedAt: 2026-09-14 14:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 14:35:27 +0000 UTC FinishedAt: 2026-09-14 14:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 14:35:27 +0000 UTC FinishedAt: 2026-09-14 14:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 14:35:27 +0000 UTC FinishedAt: 2026-09-14 14:37:40 +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:*7da4e2e7-17a0-43a6-8c01-4746f999f4a2,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-workflowpn7hx/series-workflowpn7hx-build-action-4224575654/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-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 14:37:49 +0000 UTC FinishedAt: 2026-09-14 18:20:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 14:37:49 +0000 UTC FinishedAt: 2026-09-14 18:20:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"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:*afdce122-eead-42b4-a643-f3cb873f18c4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7da4e2e7-17a0-43a6-8c01-4746f999f4a2,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-workflowpn7hx/series-workflowpn7hx-build-action-1881791737/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-workflowpn7hx/series-workflowpn7hx-build-action-4224575654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 14:37:49 +0000 UTC FinishedAt: 2026-09-14 14:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 14:37:49 +0000 UTC FinishedAt: 2026-09-14 14:37:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"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-workflowpn7hx/series-workflowpn7hx-convert-artifact-1217436007/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 14:37:49 +0000 UTC FinishedAt: 2026-09-14 14:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 14:37:49 +0000 UTC FinishedAt: 2026-09-14 14:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 14:37:49 +0000 UTC FinishedAt: 2026-09-14 14:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 14:37:59 +0000 UTC FinishedAt: 2026-09-14 18:20:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn7hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_genl_llc_sdreq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_SIM"],"series_id":"e15ecc43-78e5-4c9e-b08c-893a4888b671","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 14:37:59 +0000 UTC FinishedAt: 2026-09-14 18:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afdce122-eead-42b4-a643-f3cb873f18c4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7da4e2e7-17a0-43a6-8c01-4746f999f4a2,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-workflowpn7hx/series-workflowpn7hx-build-action-1881791737/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-workflowpn7hx/series-workflowpn7hx-build-action-4224575654/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-workflowpn7hx/series-workflowpn7hx-convert-artifact-1217436007/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,}