Name: series-workflowz8gln Phase: Succeeded StartedAt: 2026-09-06 23:19:00 +0000 UTC FinishedAt: 2026-09-07 00:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[0] Phase: Succeeded StartedAt: 2026-09-06 23:19:00 +0000 UTC FinishedAt: 2026-09-06 23:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 23:19:00 +0000 UTC FinishedAt: 2026-09-06 23:39:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211", "USB" ], "series_id": "af4e6037-5f92-415b-8785-10cdf4f5ba18" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "p54_parse_firmware", "p54u_start_ops", "p54u_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfcGFyc2VfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cDU0dV9zdGFydF9vcHMmIzM0OywKICAgICYjMzQ7cDU0dV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBmaXJtd2FyZSBib290IHJlY29yZHMgKGBsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydGApLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG5pbmRleCBhM2Q5MDUzZjA0M2M2Li41ZDgyZTBhNDM4MzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xuQEAgLTc5LDkgJiM0Mzs3OSwyNiBAQCBpbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiBcdFx0Y2FzZSBCUl9DT0RFX0RFU0NSOiB7XG4gXHRcdFx0c3RydWN0IGJvb3RyZWNfZGVzYyAqZGVzYyA9XG4gXHRcdFx0XHQoc3RydWN0IGJvb3RyZWNfZGVzYyAqKWJvb3RyZWMtXHUwMDNlZGF0YTtcbi1cdFx0XHRwcml2LVx1MDAzZXJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4tXHRcdFx0LyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqL1xuLVx0XHRcdHByaXYtXHUwMDNlcnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpIC0gMHgzNTAwO1xuJiM0MztcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZChzdHJ1Y3QgYm9vdHJlY19kZXNjLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHJ4X2tleWNhY2hlX3NpemUpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpib290cmVjLVx1MDAzZWRhdGEpKSkge1xuJiM0MztcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIHRvbyBzaG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4mIzQzO1x0XHRcdHJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKTtcbiYjNDM7XHRcdFx0aWYgKHJ4X2VuZCBcdTAwM2MgMHgzNTAwIHx8IHJ4X2VuZCAtIDB4MzUwMCBcdTAwM2M9IHJ4X3N0YXJ0KSB7XG4mIzQzO1x0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaGFzIGludmFsaWQgUlggcmFuZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXJ4X3N0YXJ0ID0gcnhfc3RhcnQ7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xuIFx0XHRcdHByaXYtXHUwMDNlaGVhZHJvb20gPSBkZXNjLVx1MDAzZWhlYWRyb29tO1xuIFx0XHRcdHByaXYtXHUwMDNldGFpbHJvb20gPSBkZXNjLVx1MDAzZXRhaWxyb29tO1xuIFx0XHRcdHByaXYtXHUwMDNlcHJpdmFjeV9jYXBzID0gZGVzYy1cdTAwM2Vwcml2YWN5X2NhcHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtwNTR1X3N0YXJ0X29wcyYjMzQ7LAogICAgJiMzNDtwNTR1X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMKaW5kZXggYTNkOTA1M2YwNDNjNi4uNWQ4MmUwYTQzODM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jCkBAIC03OSw5ICYjNDM7NzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAJCWNhc2UgQlJfQ09ERV9ERVNDUjogewogCQkJc3RydWN0IGJvb3RyZWNfZGVzYyAqZGVzYyA9CiAJCQkJKHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLSZndDtkYXRhOwotCQkJcHJpdi0mZ3Q7cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9zdGFydCk7Ci0JCQkvKiBGSVhNRSBhZGQgc2FuaXR5IGNoZWNraW5nICovCi0JCQlwcml2LSZndDtyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9lbmQpIC0gMHgzNTAwOwomIzQzOwkJCXUzMiByeF9zdGFydCwgcnhfZW5kOwomIzQzOwomIzQzOwkJCWlmIChsZW4gJmx0OyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYywKJiM0MzsJCQkJCQkJICAgcnhfa2V5Y2FjaGVfc2l6ZSksCiYjNDM7CQkJCQkJICAgICAgIHNpemVvZigqYm9vdHJlYy0mZ3Q7ZGF0YSkpKSB7CiYjNDM7CQkJCXdpcGh5X2Vycihwcml2LSZndDtody0mZ3Q7d2lwaHksCiYjNDM7CQkJCQkgICYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBpcyB0b28gc2hvcnRcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnhfc3RhcnQpOwomIzQzOwkJCXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3J4X2VuZCk7CiYjNDM7CQkJaWYgKHJ4X2VuZCAmbHQ7IDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgJmx0Oz0gcnhfc3RhcnQpIHsKJiM0MzsJCQkJd2lwaHlfZXJyKHByaXYtJmd0O2h3LSZndDt3aXBoeSwKJiM0MzsJCQkJCSAgJiMzNDtmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlwcml2LSZndDtyeF9zdGFydCA9IHJ4X3N0YXJ0OwomIzQzOwkJCXByaXYtJmd0O3J4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDsKIAkJCXByaXYtJmd0O2hlYWRyb29tID0gZGVzYy0mZ3Q7aGVhZHJvb207CiAJCQlwcml2LSZndDt0YWlscm9vbSA9IGRlc2MtJmd0O3RhaWxyb29tOwogCQkJcHJpdi0mZ3Q7cHJpdmFjeV9jYXBzID0gZGVzYy0mZ3Q7cHJpdmFjeV9jYXBzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBzaXR0aW5nIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYHA1NGAgYWN0dWFsbHkgKmlzKi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGhlcmUsIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoaWNoIHNwZWNpZmljIGRyaXZlcnMgdXRpbGl6ZSB0aGUgcDU0IGluZnJhc3RydWN0dXJlPyBJcyBpdCBqdXN0IHA1NHVzYiwgcDU0cGNpLCBhbmQgcDU0c3BpLCBvciBhcmUgdGhlcmUgb3RoZXJzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyB3aWxsIGhlbHAgbWUgYm91bmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgpOZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGZ1enppbmcgbGFuZHNjYXBlIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIElzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB0aHJvdWdoIGFueSBleGlzdGluZyBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBJJiMzOTttIHRoaW5raW5nIGFsb25nIHRoZSBsaW5lcyBvZiBVU0IgZW11bGF0aW9uLCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIG1hYzgwMjExIGludGVncmF0aW9uLiBLbm93aW5nIGhvdyB0aGUgY29kZSBpcyBleHBvc2VkIHRvIHBvdGVudGlhbCBmdXp6aW5nIGlucHV0cyBpcyBjcml0aWNhbC4gV2hpY2gga2VybmVsIGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhlIGFmZmVjdGVkIHBhdGhzPyBXaGljaCBzeW1ib2xzIGFyZSBhdCBwbGF5IGhlcmU/CgpTbywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nLiBUaW1lIHRvIGJ1c3Qgb3V0IHRoZSBncmVwcyBhbmQgc3RhcnQgcmVhZGluZyB0aG9zZSBmaWxlcy4gR290dGEgZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBnYXRoZXJpbmcgdGhlIHJhdyBkYXRhIHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjc0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9Mj1jb25maWcgUDU0X0NPTU1PTlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTEyLVx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjEzOlx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxNTpcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTE3PWNvbmZpZyBQNTRfVVNCXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMjQtXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6MjU6XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0yNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjI3Olx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHVzYi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9Mjk9Y29uZmlnIFA1NF9QQ0lcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0zOC1cdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjM5Olx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo0MTpcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRwY2kuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTQzPWNvbmZpZyBQNTRfU1BJXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo1MDpcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRzcGkuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTUyPWNvbmZpZyBQNTRfU1BJX0RFRkFVTFRfRUVQUk9NXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo2NzpcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTY4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZToyOnA1NGNvbW1vbi1vYmpzXHRcdFx0Oj0gZWVwcm9tLm8gZndpby5vIHR4cngubyBtYWluLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZTozOnA1NGNvbW1vbi0kKENPTkZJR19QNTRfTEVEUylcdCYjNDM7PSBsZWQub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfUDU0X0NPTU1PTilcdCYjNDM7PSBwNTRjb21tb24ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1A1NF9VU0IpXHRcdCYjNDM7PSBwNTR1c2Iub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1A1NF9QQ0kpXHRcdCYjNDM7PSBwNTRwY2kub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1A1NF9TUEkpXHRcdCYjNDM7PSBwNTRzcGkub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoyNTojaW5jbHVkZSBcJiMzNDtwNTQuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI2LSNpbmNsdWRlIFwmIzM0O2VlcHJvbS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI5OnN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcDU0X2JncmF0ZXNbXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMC1cdHsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgfSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDQ6c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBwNTRfYXJhdGVzW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDUtXHR7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDQsIH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjU1OnN0YXRpYyBzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgcDU0X3Jzc2lfZGVmYXVsdCA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01Ni1cdC8qXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcxOnN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzItXHR1MTYgZnJlcTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Nzk6c3RydWN0IHA1NF9jaGFubmVsX2xpc3Qge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgwOlx0c3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICpjaGFubmVscztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04MS1cdHNpemVfdCBlbnRyaWVzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4NjpzdGF0aWMgaW50IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEodTE2IGZyZXEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05OT1zdGF0aWMgaW50IHNhbWVfYmFuZCh1MTYgZnJlcSwgdTE2IGZyZXEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwMC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTAxOlx0cmV0dXJuIHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSkgPT0gcDU0X2dldF9iYW5kX2Zyb21fZnJlcShmcmVxMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTAyLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTA0OnN0YXRpYyBpbnQgcDU0X2NvbXBhcmVfY2hhbm5lbHMoY29uc3Qgdm9pZCAqX2EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTA1LVx0XHRcdFx0Y29uc3Qgdm9pZCAqX2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTA2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDc6XHRjb25zdCBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKmEgPSBfYTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDg6XHRjb25zdCBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKmIgPSBfYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMDktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTExMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMTM6c3RhdGljIGludCBwNTRfY29tcGFyZV9yc3NpY2hhbihjb25zdCB2b2lkICpfYSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTQtXHRcdFx0XHRjb25zdCB2b2lkICpfYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExNjpcdGNvbnN0IHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqYSA9IF9hO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExNzpcdGNvbnN0IHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqYiA9IF9iO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTExOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEyMjpzdGF0aWMgaW50IHA1NF9maWxsX2JhbmRfYml0cmF0ZXMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEyMy1cdFx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZF9lbnRyeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTI5LVx0Y2FzZSBOTDgwMjExX0JBTkRfMkdIWjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMzA6XHRcdGJhbmRfZW50cnktXHUwMDNlYml0cmF0ZXMgPSBwNTRfYmdyYXRlcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMzE6XHRcdGJhbmRfZW50cnktXHUwMDNlbl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocDU0X2JncmF0ZXMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEzMi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTMzLVx0Y2FzZSBOTDgwMjExX0JBTkRfNUdIWjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMzQ6XHRcdGJhbmRfZW50cnktXHUwMDNlYml0cmF0ZXMgPSBwNTRfYXJhdGVzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzNTpcdFx0YmFuZF9lbnRyeS1cdTAwM2VuX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYXJhdGVzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMzYtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTQ0OnN0YXRpYyBpbnQgcDU0X2dlbmVyYXRlX2JhbmQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjE0NTpcdFx0XHQgICAgIHN0cnVjdCBwNTRfY2hhbm5lbF9saXN0ICpsaXN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE0Ni1cdFx0XHQgICAgIHVuc2lnbmVkIGludCAqY2hhbl9udW0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE0OC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTQ5Olx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNTAtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICp0bXAsICpvbGQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNjY6XHRyZXQgPSBwNTRfZmlsbF9iYW5kX2JpdHJhdGVzKGRldiwgdG1wLCBiYW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNzEtXHRcdFx0ICAgKGkgXHUwMDNjIGxpc3QtXHUwMDNlZW50cmllcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTcyOlx0XHRzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKmNoYW4gPSBcdTAwMjZsaXN0LVx1MDAzZWNoYW5uZWxzW2ldO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE3My1cdFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpkZXN0ID0gXHUwMDI2dG1wLVx1MDAzZWNoYW5uZWxzW2pdO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yMzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKnA1NF91cGRhdGVfY2hhbm5lbF9wYXJhbShzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yMzItXHRcdFx0XHRcdFx0XHQgIHUxNiBmcmVxLCB1MTYgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjM0LVx0aW50IGk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjM1Olx0c3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICplbnRyeSA9IE5VTEw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjM2LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNTAtXHRcdC8qIGVudHJ5IGRvZXMgbm90IGV4aXN0IHlldC4gSW5pdGlhbGl6ZSBhIG5ldyBvbmUuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjUxOlx0XHRpbnQgYmFuZCA9IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjUyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Mjc2OnN0YXRpYyBpbnQgcDU0X2dldF9tYXhwb3dlcihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNzcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MzE5OnN0YXRpYyBpbnQgcDU0X2dlbmVyYXRlX2NoYW5uZWxfbGlzdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTMyMC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MzIxOlx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozMjI6XHRzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMjMtXHR1bnNpZ25lZCBpbnQgaSwgaiwgaywgbWF4X2NoYW5uZWxfbnVtO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNTAtXHRsaXN0LVx1MDAzZW1heF9lbnRyaWVzID0gbWF4X2NoYW5uZWxfbnVtO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM1MTpcdGxpc3QtXHUwMDNlY2hhbm5lbHMgPSBremFsbG9jX29ianMoc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5LCBtYXhfY2hhbm5lbF9udW0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM1Mi1cdGlmICghbGlzdC1cdTAwM2VjaGFubmVscykge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNTktXHRcdFx0ZnJlcSA9IGxlMTZfdG9fY3B1KHByaXYtXHUwMDNlaXFfYXV0b2NhbFtpXS5mcmVxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozNjA6XHRcdFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NBTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzYxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM2My1cdFx0aWYgKGkgXHUwMDNjIHByaXYtXHUwMDNlb3V0cHV0X2xpbWl0LVx1MDAzZWVudHJpZXMpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozNjQ6XHRcdFx0c3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICp0bXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzY1LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNzEtXHRcdFx0ZnJlcSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopIGRhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3MjpcdFx0XHR0bXAgPSBwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0obGlzdCwgZnJlcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNzMtXHRcdFx0XHRcdFx0ICAgICAgIENIQU5fSEFTX0xJTUlUKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNzQtXHRcdFx0aWYgKHRtcCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3NTpcdFx0XHRcdHRtcC1cdTAwM2VtYXhfcG93ZXIgPSBwNTRfZ2V0X21heHBvd2VyKHByaXYsIGRhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3Ni1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozODU6XHRcdFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NVUlZFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zODYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzg5LVx0Lyogc29ydCB0aGUgY2hhbm5lbCBsaXN0IGJ5IGZyZXF1ZW5jeSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM5MDpcdHNvcnQobGlzdC1cdTAwM2VjaGFubmVscywgbGlzdC1cdTAwM2VlbnRyaWVzLCBzaXplb2Yoc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozOTE6XHQgICAgIHA1NF9jb21wYXJlX2NoYW5uZWxzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM5NC1cdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBOVU1fTkw4MDIxMV9CQU5EUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozOTU6XHRcdGlmIChwNTRfZ2VuZXJhdGVfYmFuZChkZXYsIGxpc3QsIFx1MDAyNmssIGkpID09IDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzk2LVx0XHRcdGomIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00MTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDE2OnN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE3LVx0XHRcdCAgICBzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0MTk6XHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQyMDpcdHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgKmRzdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00MjEtXHRzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjAgKnNyYztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQ2ODpzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQ2OS1cdFx0XHQgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQ3MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDcxOlx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0NzI6XHRzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlICpkc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDczLVx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxICpzcmM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUwOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTA6c3RhdGljIGNvbnN0IGNoYXIgKnA1NF9yZl9jaGlwc1tdID0geyBcJiMzNDtJTlZBTElELTBcJiMzNDssIFwmIzM0O0R1ZXR0ZTNcJiMzNDssIFwmIzM0O0R1ZXR0ZTJcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTExLVx0XCYjMzQ7RnJpc2JlZVwmIzM0OywgXCYjMzQ7WGJvd1wmIzM0OywgXCYjMzQ7TG9uZ2Jvd1wmIzM0OywgXCYjMzQ7SU5WQUxJRC02XCYjMzQ7LCBcJiMzNDtJTlZBTElELTdcJiMzNDsgfTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01MTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTEzOnN0YXRpYyBpbnQgcDU0X3BhcnNlX3Jzc2ljYWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUxNC1cdFx0XHQgICAgIHU4ICpkYXRhLCBpbnQgbGVuLCB1MTYgdHlwZSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01MTUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjUxNjpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTE3Olx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01MTgtXHRzaXplX3QgZGJfbGVuLCBlbnRyaWVzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01ODUtXHQvKiBzb3J0IHRoZSBsaXN0IGJ5IGNoYW5uZWwgZnJlcXVlbmN5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTg2Olx0c29ydChlbnRyeSwgZW50cmllcywgc2l6ZW9mKCplbnRyeSksIHA1NF9jb21wYXJlX3Jzc2ljaGFuLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01ODctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTk5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYwMDpzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnA1NF9yc3NpX2ZpbmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIGNvbnN0IHUxNiBmcmVxKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYwMS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NjAyOlx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MDMtXHRpbnQgaSwgZm91bmQgPSAtMTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjA1LVx0aWYgKCFwcml2LVx1MDAzZXJzc2lfZGIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NjA2Olx0XHRyZXR1cm4gXHUwMDI2cDU0X3Jzc2lfZGVmYXVsdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MDctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo2Mjg6XHRyZXR1cm4gZm91bmQgXHUwMDNjIDAgPyBcdTAwMjZwNTRfcnNzaV9kZWZhdWx0IDogXHUwMDI2ZW50cnlbZm91bmRdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYyOS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYzMTpzdGF0aWMgdm9pZCBwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MzItXHRcdFx0XHQgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02NTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NjYwOnN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjYxLVx0XHRcdFx0ICAgICB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02NjIte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjY2MzpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjY0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02OTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Njk4OnN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTY5OS1cdFx0XHRcdFx0ICAgICAgIHNpemVfdCB0b3RhbF9sZW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzAwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3MDE6XHRzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqZHN0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcwMi1cdHNpemVfdCBwYXlsb2FkX2xlbiwgZW50cmllcywgZW50cnlfc2l6ZSwgb2Zmc2V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI1OmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNi17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI3Olx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjgtXHRzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICp3cmFwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NTctXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3NTg6XHRcdFx0ZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LVx1MDAzZWRhdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzU5LVx0XHRcdFx0XHRcdFx0ZGF0YV9sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzItXHRcdFx0Y2FzZSAwOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc3MzpcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjAoZGV2LCBjdXJ2ZV9kYXRhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzQtXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzUtXHRcdFx0Y2FzZSAxOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc3NjpcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzctXHRcdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzk5LVx0XHRjYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODAwOlx0XHRcdHA1NF9wYXJzZV9kZWZhdWx0X2NvdW50cnkoZGV2LCBlbnRyeS1cdTAwM2VkYXRhLCBkYXRhX2xlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODAxLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04MTgtXHRcdGNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODE5Olx0XHRcdGVyciA9IHA1NF9wYXJzZV9yc3NpY2FsKGRldiwgZW50cnktXHUwMDNlZGF0YSwgZGF0YV9sZW4sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODIwLVx0XHRcdFx0XHRcdGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWNvZGUpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgzMzpcdFx0XHRwcml2LVx1MDAzZXJzc2lfZGIgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04MzQtXHRcdFx0aWYgKCFwcml2LVx1MDAzZXJzc2lfZGIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg0OC1cdFx0XHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg0OTpcdFx0XHRwcml2LVx1MDAzZW91dHB1dF9saW1pdCA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1MC1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1NS1cdFx0XHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg1NjpcdFx0XHRwcml2LVx1MDAzZWN1cnZlX2RhdGEgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NTctXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODkzOlx0ZXJyID0gcDU0X2dlbmVyYXRlX2NoYW5uZWxfbGlzdHMoZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTQtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTctXHRpZiAocHJpdi1cdTAwM2VyeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9YQk9XKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg5ODpcdFx0cDU0X2luaXRfeGJvd19zeW50aChwcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTktXHRpZiAoIShzeW50aCBcdTAwMjYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5MTk6XHRwcml2LVx1MDAzZWN1cl9yc3NpID0gXHUwMDI2cDU0X3Jzc2lfZGVmYXVsdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05MjAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkyMi1cdFx0ICAgZGV2LVx1MDAzZXdpcGh5LVx1MDAzZXBlcm1fYWRkciwgcHJpdi1cdTAwM2V2ZXJzaW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjkyMzpcdFx0ICAgcDU0X3JmX2NoaXBzW3ByaXYtXHUwMDNlcnhod10pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkyNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQxLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5NDI6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk0NDppbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NDUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk0NjpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQ3LVx0c2l6ZV90IGVlcHJvbV9zaXplID0gMHgyMDIwLCBvZmZzZXQgPSAwLCBibG9ja3NpemUsIG1heGJsb2Nrc2l6ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTYyLVx0XHRibG9ja3NpemUgPSBtaW4oZWVwcm9tX3NpemUsIG1heGJsb2Nrc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTYzOlx0XHRyZXQgPSBwNTRfZG93bmxvYWRfZWVwcm9tKHByaXYsIGVlcHJvbSAmIzQzOyBvZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTY0LVx0XHRcdFx0XHQgIG9mZnNldCwgYmxvY2tzaXplKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk3MjpcdHJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCBlZXByb20sIG9mZnNldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTczLWZyZWU6XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk3Ni19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTc3OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oPTMwPXN0cnVjdCBlZXByb21fcGRhX3dyYXAge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaC0zNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaDozODpzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTM5LVx0X19sZTE2IGlxX3BhcmFtWzRdO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaD00Mj1zdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTQzLVx0X19sZTE2IGZyZXE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmg6NDQ6XHRzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgcGFyYW1zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTQ1LX0gX19wYWNrZWQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjM6I2luY2x1ZGUgXCYjMzQ7cDU0LmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjQtI2luY2x1ZGUgXCYjMzQ7ZWVwcm9tLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzppbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwLVx0c3RydWN0IGV4cF9pZiAqZXhwX2lmO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjItXHRcdFx0XHR3aXBoeV9pbmZvKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYzOlx0XHRcdFx0XHQgICBcJiMzNDtwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTY0LVx0XHRcdFx0XHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xMTEtXHRcdFx0bWF4bGVuID0gcHJpdi1cdTAwM2V0eF9oZHJfbGVuICYjNDM7IC8qIFVTQiBkZXZpY2VzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjExMjpcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xMTMtXHRcdFx0XHQgNCAmIzQzOyAvKiByeCBhbGlnbm1lbnQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNS1cdFx0XHRpZiAocHJpdi1cdTAwM2VyeF9tdHUgXHUwMDNlIG1heGxlbiBcdTAwMjZcdTAwMjYgUEFHRV9TSVpFID09IDQwOTYpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTE2Olx0XHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNy1cdFx0XHRcdCAgICAgICBcJiMzNDt0byAlZFxcblwmIzM0OywgcHJpdi1cdTAwM2VyeF9tdHUsIG1heGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xNTAtXHRcdHdpcGh5X2luZm8ocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTUxOlx0XHRcdCAgIFwmIzM0O3lvdSBhcmUgdXNpbmcgYW4gb2Jzb2xldGUgZmlybXdhcmUuIHZpc2l0IGh0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sIGFuZCBncmFiIG9uZSBmb3IgXFxcJiMzNDtrZXJuZWwgXHUwMDNlPSAyLjYuMjhcXFwmIzM0Oy4uLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xNTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xOTgtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxOTk6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMDE6c3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgaGRyX2ZsYWdzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDItXHRcdFx0XHQgICAgIHUxNiBwYXlsb2FkX2xlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMDQ6XHRzdHJ1Y3QgcDU0X2hkciAqaGRyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDUtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMjc6aW50IHA1NF9kb3dubG9hZF9lZXByb20oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmJ1ZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjI4LVx0XHRcdHUxNiBvZmZzZXQsIHUxNiBsZW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIyOS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjIzMDpcdHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKmVlcHJvbV9oZHI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIzMS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI0MTpcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIGVlcHJvbV9oZHJfc2l6ZSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNDItXHRcdFx0ICAgIGxlbiwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI2MjpcdHA1NF90eChwcml2LCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNjMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI3NzppbnQgcDU0X3VwZGF0ZV9iZWFjb25fdGltKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgYWlkLCBib29sIHNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjc4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjc5LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjgwOlx0c3RydWN0IHA1NF90aW0gKnRpbTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjgxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyODI6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnRpbSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4My1cdFx0XHQgICAgUDU0X0NPTlRST0xfVFlQRV9USU0sIEdGUF9BVE9NSUMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjg5LVx0dGltLVx1MDAzZWVudHJ5WzBdID0gY3B1X3RvX2xlMTYoc2V0ID8gKGFpZCB8IDB4ODAwMCkgOiBhaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTA6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjkxLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI5NDppbnQgcDU0X3N0YV91bmxvY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4ICphZGRyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTYtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTc6XHRzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgKnN0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTk6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnN0YSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwMC1cdFx0XHQgICAgUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMDUtXHRtZW1jcHkoc3RhLVx1MDAzZWFkZHIsIGFkZHIsIEVUSF9BTEVOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzA2Olx0cDU0X3R4KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwNy1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzA5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMTA6aW50IHA1NF90eF9jYW5jZWwoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIF9fbGUzMiByZXFfaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxMS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxMi1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMxMzpcdHN0cnVjdCBwNTRfdHhjYW5jZWwgKmNhbmNlbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzE0LVx0dTMyIF9yZXFfaWQgPSBsZTMyX3RvX2NwdShyZXFfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzE4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMTk6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNhbmNlbCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMyMC1cdFx0XHQgICAgUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMjUtXHRjYW5jZWwtXHUwMDNlcmVxX2lkID0gcmVxX2lkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMjY6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzI3LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMzMDppbnQgcDU0X3NldHVwX21hYyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzMxLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzMyLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzMzOlx0c3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMzQtXHR1MTYgbW9kZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMzY6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnNldHVwKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM3LVx0XHRcdCAgICBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLCBHRlBfQVRPTUlDKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwMC1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDAxOlx0cDU0X3R4KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwMi1cdHByaXYtXHUwMDNlcGh5X2lkbGUgPSBtb2RlID09IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwNjppbnQgcDU0X3NjYW4oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBtb2RlLCB1MTYgZHdlbGwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwNy17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwOC1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwOTpcdHN0cnVjdCBwNTRfaGRyICpoZHI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMDpcdHN0cnVjdCBwNTRfc2Nhbl9oZWFkICpoZWFkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo0MTE6XHRzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgKmlxX2F1dG9jYWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMjpcdHVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gKmJvZHk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMzpcdHN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgKnJhdGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQxNC1cdHN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKnJzc2k7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxNTpcdHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqcnNzaV9kYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MTYtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQxOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDIwOlx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpoZWFkKSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MjEtXHRcdFx0ICAgIDIgJiM0Mzsgc2l6ZW9mKCppcV9hdXRvY2FsKSAmIzQzOyBzaXplb2YoKmJvZHkpICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00NDMtXHRcdG1lbWNweShpcV9hdXRvY2FsLCBcdTAwMjZwcml2LVx1MDAzZWlxX2F1dG9jYWxbaV0ucGFyYW1zLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo0NDQ6XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5KSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQ0NS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTYtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQ5NzpcdFx0XHRzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9IFx1MDAyNmJvZHktXHUwMDNlbm9ybWFsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTgtXHRcdFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUwNC1cdFx0XHRtZW1jcHkoY2hhbi1cdTAwM2VjdXJ2ZV9kYXRhLCBlbnRyeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTA1Olx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MDYtXHRcdFx0ICAgICAgIG1pbigodTgpOCwgY3VydmVfZGF0YS1cdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUyMC1cdHJzc2kgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjUyMTpcdHJzc2lfZGF0YSA9IHA1NF9yc3NpX2ZpbmQocHJpdiwgbGUxNl90b19jcHUoZnJlcSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MjItXHRyc3NpLVx1MDAzZW11bCA9IGNwdV90b19sZTE2KHJzc2lfZGF0YS1cdTAwM2VtdWwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Mzg6XHRoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUzOS1cdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKCpoZHIpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NDE6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTQyLVx0cHJpdi1cdTAwM2VjdXJfcnNzaSA9IHJzc2lfZGF0YTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTU0OmludCBwNTRfc2V0X2xlZHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1Ni1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU1NzpcdHN0cnVjdCBwNTRfbGVkICpsZWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTU5Olx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpsZWQpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NjAtXHRcdFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfTEVELCBHRlBfQVRPTUlDKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU2OC1cdGxlZC1cdTAwM2VkZWxheVsxXSA9IGNwdV90b19sZTE2KDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Njk6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTcwLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU3MzppbnQgcDU0X3NldF9lZGNmKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzQte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzUtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NzY6XHRzdHJ1Y3QgcDU0X2VkY2YgKmVkY2Y7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU3Ny1cdHU4IHJ0ZDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Nzk6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01ODAtXHRcdFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwgR0ZQX0FUT01JQyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MDUtXHRtZW1jcHkoZWRjZi1cdTAwM2VxdWV1ZSwgcHJpdi1cdTAwM2Vxb3NfcGFyYW1zLCBzaXplb2YoZWRjZi1cdTAwM2VxdWV1ZSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo2MDY6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjA3LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYxMDppbnQgcDU0X3NldF9wcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjExLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjEyLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NjEzOlx0c3RydWN0IHA1NF9wc20gKnBzbTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjE0LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MjMtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBGaXJtd2FyZSBQYXJzaW5nIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBmaXJtd2FyZSBpc3N1ZSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgcDU0X3BhcnNlX2Zpcm13YXJlYCBmdW5jdGlvbiBpcyBjbGVhcmx5IGltcG9ydGFudCBoZXJlLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJiMzOTtzIGNhbGxpbmcgaXQ7IHdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyBmb3IgdGhpcywgb2YgY291cnNlLCBiZWNhdXNlIG1hbnVhbCBzY2FubmluZyBpcyBqdXN0IGluZWZmaWNpZW50LiAKCkFuZCwgb2YgY291cnNlLCB0aGUgb2J2aW91cyBtb2R1bGVzIHRoYXQgd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gdGhpcyBhcmUgdGhlIGBwNTR1c2JgLCBgcDU0cGNpYCwgYW5kIGBwNTRzcGlgIGRyaXZlcnMgLSB0aGV5JiMzOTtyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBmaXJtd2FyZSBsb2FkaW5nIGluIGEgd2lyZWxlc3MgY29udGV4dC4KClJpZ2h0LiBUaW1lIHRvIGZpcmUgdXAgbXkgdHJ1c3R5IGdyZXAgYW5kIGZpbmQgZXZlcnkgc2luZ2xlIGluc3RhbmNlIHdoZXJlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaW5mZXIgdGhlIHBvc3NpYmxlIGZhaWx1cmUgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IHRoZSBjYXVzZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X3BhcnNlX2Zpcm13YXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI3OmludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xOTgtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxOTk6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD0yNjg9dm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoyNjk6aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oLTI3MC1pbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTQ4PXN0YXRpYyBpbnQgcDU0cF91cGxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYy03OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYzo3OTpcdGVyciA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtXHUwMDNlZmlybXdhcmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTgwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM9MTQwPXN0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0xNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MTUzOlx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cdTAwM2VmaXJtd2FyZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTU0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz04Njc9c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04NzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6ODcyOlx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cdTAwM2Vmdyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODczLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc1OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU2l0dWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgcDU0dXNiYCBzaXR1YXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gcGlucG9pbnQgYHA1NHVfc3RhcnRfb3BzYCB3aXRoaW4gYHA1NHVzYi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGV2ZW4gKnJlYWNoKiBgcDU0dXNiYCB2aWEgVVNCIGZ1enppbmcuIFRoYXQgbWVhbnMgc2VlaW5nIGlmIEkgY2FuIHRyaWdnZXIgaXQgd2l0aCBSYXcgR2FkZ2V0IG9yIFVTQiBlbXVsYXRpb24gdGVjaG5pcXVlcy4gRXNzZW50aWFsbHksIGNhbiBJIGdldCBjb2RlIGV4ZWN1dGlvbiBpbiB0aGlzIG1vZHVsZSB2aWEgVVNCIG1hbmlwdWxhdGlvbj8gU28sIGl0JiMzOTtzIGJhY2sgdG8gYHA1NHVzYi5jYCB0byBzZWUgaWYgdGhpcyBpcyBwb3NzaWJsZS4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHRrZnJlZShidWYpO1xuIDg1MTpcdFx0cmV0dXJuIGVycjtcbiA4NTI6XHR9XG4gODUzOlx0XG4gODU0Olx0c3RhdGljIGludCBwNTRfZmluZF90eXBlKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4gODU1Olx0e1xuIDg1NjpcdFx0aW50IGk7XG4gODU3Olx0XG4gODU4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBfX05VTV9QNTRVX0hXVFlQRVM7IGkmIzQzOyYjNDM7KVxuIDg1OTpcdFx0XHRpZiAocDU0dV9md2xpc3RbaV0udHlwZSA9PSBwcml2LVx1MDAzZWh3X3R5cGUpXG4gODYwOlx0XHRcdFx0YnJlYWs7XG4gODYxOlx0XHRpZiAoaSA9PSBfX05VTV9QNTRVX0hXVFlQRVMpXG4gODYyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA4NjM6XHRcbiA4NjQ6XHRcdHJldHVybiBpO1xuIDg2NTpcdH1cbiA4NjY6XHRcbiA4Njc6XHRzdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4gODY4Olx0e1xuIDg2OTpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcHJpdi1cdTAwM2Vjb21tb24uaHc7XG4gODcwOlx0XHRpbnQgcmV0O1xuIDg3MTpcdFxuIDg3MjpcdFx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cdTAwM2Vmdyk7XG4gODczOlx0XHRpZiAocmV0KVxuIDg3NDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4gODc1Olx0XG4gODc2Olx0XHRyZXQgPSBwNTRfZmluZF90eXBlKHByaXYpO1xuIDg3NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA4Nzg6XHRcdFx0Z290byBlcnJfb3V0O1xuIDg3OTpcdFxuIDg4MDpcdFx0aWYgKHByaXYtXHUwMDNlY29tbW9uLmZ3X2ludGVyZmFjZSAhPSBwNTR1X2Z3bGlzdFtyZXRdLmludGYpIHtcbiA4ODE6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt3cm9uZyBmaXJtd2FyZSwgcGxlYXNlIGdldCBcJiMzNDtcbiA4ODI6XHRcdFx0XHRcJiMzNDthIGZpcm13YXJlIGZvciBcXFwmIzM0OyVzXFxcJiMzNDsgYW5kIHRyeSBhZ2Fpbi5cXG5cJiMzNDssXG4gODgzOlx0XHRcdFx0cDU0dV9md2xpc3RbcmV0XS5odyk7XG4gODg0Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4gODg1Olx0XHRcdGdvdG8gZXJyX291dDtcbiA4ODY6XHRcdH1cbiA4ODc6XHRcbiA4ODg6XHRcdHJldCA9IHByaXYtXHUwMDNldXBsb2FkX2Z3KGRldik7XG4gODg5Olx0XHRpZiAocmV0KVxuIDg5MDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4gODkxOlx0XG4gODkyOlx0XHRyZXQgPSBwNTR1X29wZW4oZGV2KTtcbiA4OTM6XHRcdGlmIChyZXQpXG4gODk0Olx0XHRcdGdvdG8gZXJyX291dDtcbiA4OTU6XHRcbiA4OTY6XHRcdHJldCA9IHA1NF9yZWFkX2VlcHJvbShkZXYpO1xuIDg5NzpcdFx0aWYgKHJldClcbiA4OTg6XHRcdFx0Z290byBlcnJfc3RvcDtcbiA4OTk6XHRcbiA5MDA6XHRcdHA1NHVfc3RvcChkZXYpO1xuIDkwMTpcdFxuIDkwMjpcdFx0cmV0ID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsIFx1MDAyNnByaXYtXHUwMDNldWRldi1cdTAwM2VkZXYpO1xuIDkwMzpcdFx0aWYgKHJldClcbiA5MDQ6XHRcdFx0Z290byBlcnJfc3RvcDtcbiA5MDU6XHRcbiA5MDY6XHRcdHJldHVybiAwO1xuIDkwNzpcdFxuIDkwODpcdGVycl9zdG9wOlxuIDkwOTpcdFx0cDU0dV9zdG9wKGRldik7XG4gOTEwOlx0XG4gOTExOlx0ZXJyX291dDpcbiA5MTI6XHRcdC8qXG4gOTEzOlx0XHQgKiBwNTR1X2Rpc2Nvbm5lY3Qgd2lsbCBkbyB0aGUgcmVzdCBvZiB0aGVcbiA5MTQ6XHRcdCAqIGNsZWFudXBcbiA5MTU6XHRcdCAqL1xuIDkxNjpcdFx0cmV0dXJuIHJldDtcbiA5MTc6XHR9XG4gOTE4Olx0XG4gOTE5Olx0c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXG4gOTIwOlx0XHRcdFx0XHQgIHZvaWQgKmNvbnRleHQpXG4gOTIxOlx0e1xuIDkyMjpcdFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XG4gOTIzOlx0XHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHByaXYtXHUwMDNldWRldjtcbiA5MjQ6XHRcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gcHJpdi1cdTAwM2VpbnRmO1xuIDkyNTpcdFx0aW50IGVycjtcbiA5MjY6XHRcbiA5Mjc6XHRcdGlmIChmaXJtd2FyZSkge1xuIDkyODpcdFx0XHRwcml2LVx1MDAzZWZ3ID0gZmlybXdhcmU7XG4gOTI5Olx0XHRcdGVyciA9IHA1NHVfc3RhcnRfb3BzKHByaXYpO1xuIDkzMDpcdFx0fSBlbHNlIHtcbiA5MzE6XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiA5MzI6XHRcdFx0ZGV2X2VycihcdTAwMjZ1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmlybXdhcmUgbm90IGZvdW5kLlxcblwmIzM0Oyk7XG4gOTMzOlx0XHR9XG4gOTM0Olx0XG4gOTM1Olx0XHRjb21wbGV0ZShcdTAwMjZwcml2LVx1MDAzZWZ3X3dhaXRfbG9hZCk7XG4gOTM2Olx0XHQvKlxuIDkzNzpcdFx0ICogQXQgdGhpcyBwb2ludCBwNTR1X2Rpc2Nvbm5lY3QgbWF5IGhhdmUgYWxyZWFkeSBmcmVlZFxuIDkzODpcdFx0ICogdGhlIFwmIzM0O3ByaXZcJiMzNDsgY29udGV4dC4gRG8gbm90IHVzZSBpdCBhbnltb3JlIVxuIDkzOTpcdFx0ICovXG4gOTQwOlx0XHRwcml2ID0gTlVMTDtcbiA5NDE6XHRcbiA5NDI6XHRcdGlmIChlcnIpIHtcbiA5NDM6XHRcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlICglZClcXG5cJiMzNDssIGVycik7XG4gOTQ0Olx0XG4gOTQ1Olx0XHRcdHVzYl9sb2NrX2RldmljZSh1ZGV2KTtcbiA5NDY6XHRcdFx0dXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShcdTAwMjZwNTR1X2RyaXZlciwgaW50Zik7XG4gOTQ3Olx0XHRcdHVzYl91bmxvY2tfZGV2aWNlKHVkZXYpO1xuIDk0ODpcdFx0fVxuIDk0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzY2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaXJtd2FyZSBMb2FkaW5nIGluIHRoZSBJbnRlclNpbCBwNTQgVVNCIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCBpcyB0aGUgY2FsbGJhY2sgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgdHJpZ2dlcmVkIHdoZW4gZmlybXdhcmUgaXMgbmVlZGVkIGVpdGhlciBhc3luY2hyb25vdXNseSBvciBhcyBhIGZhbGxiYWNrLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIEkmIzM5O20gZ3JhcHBsaW5nIHdpdGggaXMgaG93IGZpcm13YXJlIGludGVyYWN0cyB3aXRoIFN5emthbGxlciBpbiB0aGlzIGNvbnRleHQuIENhbiBTeXprYWxsZXIgZGlyZWN0bHkgbG9hZCBvciBmdXp6IGZpcm13YXJlPyBJdCBzdXBwb3J0cyBVU0IgZnV6emluZyB0aHJvdWdoIGBzeXpfdXNiX2Nvbm5lY3RgIG9yIHJhdy1nYWRnZXQsIHdoaWNoIGlzIGEga2V5IHBvaW50LCBidXQgZG9lcyBpdCAqcHJvdmlkZSogdGhlIGZpcm13YXJlIGl0c2VsZiwgb3IgZG9lcyBpdCByZWx5IG9uIHVzZXItc3BhY2UgaW5qZWN0aW9uIHRocm91Z2ggdGhlIHN5c2ZzL2Zpcm13YXJlIGxvYWRlciBvciBidWlsdC1pbiBmaXJtd2FyZSBtZWNoYW5pc21zPyBUaGF0JiMzOTtzIHRoZSBjcnV4LgoKQWghIFNlY3Rpb24gMyBpbiB0aGUgZG9jdW1lbnQgaXMgcHJvbWlzaW5nOiAmIzM0O0RyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKSYjMzQ7IFRoaXMgbGlzdCBpbmNsdWRlcyBVU0IgZ2FkZ2V0LCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQuIEFuZCwgdGhlIEludGVyU2lsIHA1NCBVU0IgZHJpdmVyLCBgcDU0dXNiYCwgaXMgaW5kZWVkIGEgKlVTQiogZHJpdmVyLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gZmluZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgcDU0dXNiYCYjMzk7cyBwcm9iZSBmdW5jdGlvbiB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NHVfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTk1Mz1zdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5ODQ6c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4NS1cdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MTEyND1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjYtXHQuaWRfdGFibGUgPSBwNTR1X3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjc6XHQucHJvYmUgPSBwNTR1X3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjgtXHQuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFBhcnNpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgSW50ZXJzaWwgd2lyZWxlc3MgZHJpdmVyIGhhbmRsZXMgZmlybXdhcmUgcGFyc2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcDU0X3BhcnNlX2Zpcm13YXJlYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXMgcHJldHR5IGV4cGxpY2l0LCBzbyBpdCBzaG91bGQgYmUgdGhlIGNvcmUgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHdob2xlIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIG1ldGhvZCBzaWduYXR1cmU7IHRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGdyYXNwIHRoZSBlbnRpcmUgZmxvdyBhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgcGlja2luZyBhcGFydCB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0I2luY2x1ZGUgXCYjMzQ7bG1hYy5oXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gIDI4Olx0e1xuICAyOTpcdFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiAgMzA6XHRcdHN0cnVjdCBleHBfaWYgKmV4cF9pZjtcbiAgMzE6XHRcdHN0cnVjdCBib290cmVjICpib290cmVjO1xuICAzMjpcdFx0dTMyICpkYXRhID0gKHUzMiAqKWZ3LVx1MDAzZWRhdGE7XG4gIDMzOlx0XHR1MzIgKmVuZF9kYXRhID0gKHUzMiAqKWZ3LVx1MDAzZWRhdGEgJiM0MzsgKGZ3LVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIDIpO1xuICAzNDpcdFx0dTggKmZ3X3ZlcnNpb24gPSBOVUxMO1xuICAzNTpcdFx0c2l6ZV90IGxlbjtcbiAgMzY6XHRcdGludCBpO1xuICAzNzpcdFx0aW50IG1heGxlbjtcbiAgMzg6XHRcbiAgMzk6XHRcdGlmIChwcml2LVx1MDAzZXJ4X3N0YXJ0KVxuICA0MDpcdFx0XHRyZXR1cm4gMDtcbiAgNDE6XHRcbiAgNDI6XHRcdHdoaWxlIChkYXRhIFx1MDAzYyBlbmRfZGF0YSBcdTAwMjZcdTAwMjYgKmRhdGEpXG4gIDQzOlx0XHRcdGRhdGEmIzQzOyYjNDM7O1xuICA0NDpcdFxuICA0NTpcdFx0d2hpbGUgKGRhdGEgXHUwMDNjIGVuZF9kYXRhIFx1MDAyNlx1MDAyNiAhKmRhdGEpXG4gIDQ2Olx0XHRcdGRhdGEmIzQzOyYjNDM7O1xuICA0NzpcdFxuICA0ODpcdFx0Ym9vdHJlYyA9IChzdHJ1Y3QgYm9vdHJlYyAqKSBkYXRhO1xuICA0OTpcdFxuICA1MDpcdFx0d2hpbGUgKGJvb3RyZWMtXHUwMDNlZGF0YSBcdTAwM2M9IGVuZF9kYXRhIFx1MDAyNlx1MDAyNiAoYm9vdHJlYy1cdTAwM2VkYXRhICYjNDM7XG4gIDUxOlx0XHQgICAgICAgKGxlbiA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtXHUwMDNlbGVuKSkpIFx1MDAzYz0gZW5kX2RhdGEpIHtcbiAgNTI6XHRcdFx0dTMyIGNvZGUgPSBsZTMyX3RvX2NwdShib290cmVjLVx1MDAzZWNvZGUpO1xuICA1MzpcdFx0XHRzd2l0Y2ggKGNvZGUpIHtcbiAgNTQ6XHRcdFx0Y2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9JRDpcbiAgNTU6XHRcdFx0XHRwcml2LVx1MDAzZWZ3X2ludGVyZmFjZSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopXG4gIDU2Olx0XHRcdFx0XHRcdCAgICAgYm9vdHJlYy1cdTAwM2VkYXRhKTtcbiAgNTc6XHRcdFx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlZndfaW50ZXJmYWNlKSB7XG4gIDU4Olx0XHRcdFx0Y2FzZSBGV19MTTg2OlxuICA1OTpcdFx0XHRcdGNhc2UgRldfTE0yMDpcbiAgNjA6XHRcdFx0XHRjYXNlIEZXX0xNODc6IHtcbiAgNjE6XHRcdFx0XHRcdGNoYXIgKmlmdHlwZSA9IChjaGFyICopYm9vdHJlYy1cdTAwM2VkYXRhO1xuICA2MjpcdFx0XHRcdFx0d2lwaHlfaW5mbyhwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA2MzpcdFx0XHRcdFx0XHQgICBcJiMzNDtwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXG5cJiMzNDssXG4gIDY0Olx0XHRcdFx0XHRcdCAgIGlmdHlwZVsyXSwgaWZ0eXBlWzNdKTtcbiAgNjU6XHRcdFx0XHRcdGJyZWFrO1xuICA2NjpcdFx0XHRcdFx0fVxuICA2NzpcdFx0XHRcdGNhc2UgRldfRk1BQzpcbiAgNjg6XHRcdFx0XHRkZWZhdWx0OlxuICA2OTpcdFx0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4gIDcwOlx0XHRcdFx0XHRcdCAgXCYjMzQ7dW5zdXBwb3J0ZWQgZmlybXdhcmVcXG5cJiMzNDspO1xuICA3MTpcdFx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gIDcyOlx0XHRcdFx0fVxuICA3MzpcdFx0XHRcdGJyZWFrO1xuICA3NDpcdFx0XHRjYXNlIEJSX0NPREVfQ09NUE9ORU5UX1ZFUlNJT046XG4gIDc1Olx0XHRcdFx0LyogMjQgYnl0ZXMgc2hvdWxkIGJlIGVub3VnaCBmb3IgYWxsIGZpcm13YXJlcyAqL1xuICA3NjpcdFx0XHRcdGlmIChzdHJubGVuKCh1bnNpZ25lZCBjaGFyICopIGJvb3RyZWMtXHUwMDNlZGF0YSwgMjQpIFx1MDAzYyAyNClcbiAgNzc6XHRcdFx0XHRcdGZ3X3ZlcnNpb24gPSAodW5zaWduZWQgY2hhciAqKSBib290cmVjLVx1MDAzZWRhdGE7XG4gIDc4Olx0XHRcdFx0YnJlYWs7XG4gIDc5Olx0XHRcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xuICA4MDpcdFx0XHRcdHN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPVxuICA4MTpcdFx0XHRcdFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVx1MDAzZWRhdGE7XG4gIDgyOlx0XHRcdFx0dTMyIHJ4X3N0YXJ0LCByeF9lbmQ7XG4gIDgzOlx0XG4gIDg0Olx0XHRcdFx0aWYgKGxlbiBcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKHN0cnVjdCBib290cmVjX2Rlc2MsXG4gIDg1Olx0XHRcdFx0XHRcdFx0XHQgICByeF9rZXljYWNoZV9zaXplKSxcbiAgODY6XHRcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpib290cmVjLVx1MDAzZWRhdGEpKSkge1xuICA4NzpcdFx0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4gIDg4Olx0XHRcdFx0XHRcdCAgXCYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBpcyB0b28gc2hvcnRcXG5cJiMzNDspO1xuICA4OTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDkwOlx0XHRcdFx0fVxuICA5MTpcdFxuICA5MjpcdFx0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4gIDkzOlx0XHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuICA5NDpcdFx0XHRcdGlmIChyeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydCkge1xuICA5NTpcdFx0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4gIDk2Olx0XHRcdFx0XHRcdCAgXCYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBoYXMgaW52YWxpZCBSWCByYW5nZVxcblwmIzM0Oyk7XG4gIDk3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgOTg6XHRcdFx0XHR9XG4gIDk5Olx0XG4gMTAwOlx0XHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xuIDEwMTpcdFx0XHRcdHByaXYtXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xuIDEwMjpcdFx0XHRcdHByaXYtXHUwMDNlaGVhZHJvb20gPSBkZXNjLVx1MDAzZWhlYWRyb29tO1xuIDEwMzpcdFx0XHRcdHByaXYtXHUwMDNldGFpbHJvb20gPSBkZXNjLVx1MDAzZXRhaWxyb29tO1xuIDEwNDpcdFx0XHRcdHByaXYtXHUwMDNlcHJpdmFjeV9jYXBzID0gZGVzYy1cdTAwM2Vwcml2YWN5X2NhcHM7XG4gMTA1Olx0XHRcdFx0cHJpdi1cdTAwM2VyeF9rZXljYWNoZV9zaXplID0gZGVzYy1cdTAwM2VyeF9rZXljYWNoZV9zaXplO1xuIDEwNjpcdFx0XHRcdGlmIChsZTMyX3RvX2NwdShib290cmVjLVx1MDAzZWxlbikgPT0gMTEpXG4gMTA3Olx0XHRcdFx0XHRwcml2LVx1MDAzZXJ4X210dSA9IGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlcnhfbXR1KTtcbiAxMDg6XHRcdFx0XHRlbHNlXG4gMTA5Olx0XHRcdFx0XHRwcml2LVx1MDAzZXJ4X210dSA9IChzaXplX3QpXG4gMTEwOlx0XHRcdFx0XHRcdDB4NjIwIC0gcHJpdi1cdTAwM2V0eF9oZHJfbGVuO1xuIDExMTpcdFx0XHRcdG1heGxlbiA9IHByaXYtXHUwMDNldHhfaGRyX2xlbiAmIzQzOyAvKiBVU0IgZGV2aWNlcyAqL1xuIDExMjpcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgcDU0X3J4X2RhdGEpICYjNDM7XG4gMTEzOlx0XHRcdFx0XHQgNCAmIzQzOyAvKiByeCBhbGlnbm1lbnQgKi9cbiAxMTQ6XHRcdFx0XHRcdCBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEO1xuIDExNTpcdFx0XHRcdGlmIChwcml2LVx1MDAzZXJ4X210dSBcdTAwM2UgbWF4bGVuIFx1MDAyNlx1MDAyNiBQQUdFX1NJWkUgPT0gNDA5Nikge1xuIDExNjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgXCYjMzQ7XG4gMTE3Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7dG8gJWRcXG5cJiMzNDssIHByaXYtXHUwMDNlcnhfbXR1LCBtYXhsZW4pO1xuIDExODpcdFx0XHRcdFx0cHJpdi1cdTAwM2VyeF9tdHUgPSBtYXhsZW47XG4gMTE5Olx0XHRcdFx0fVxuIDEyMDpcdFx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0XHRcdH1cbiAxMjI6XHRcdFx0Y2FzZSBCUl9DT0RFX0VYUE9TRURfSUY6XG4gMTIzOlx0XHRcdFx0ZXhwX2lmID0gKHN0cnVjdCBleHBfaWYgKikgYm9vdHJlYy1cdTAwM2VkYXRhO1xuIDEyNDpcdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChsZW4gKiBzaXplb2YoKmV4cF9pZikgLyA0KTsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDI1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgUGFyc2luZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyBjaGFuZ2VkIGhlcmUsIGFuZCB3aHk/JiMzNDsgVGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGhvdyB0aGUgZmlybXdhcmUmIzM5O3MgZGVzY3JpcHRvciBpcyBwYXJzZWQsIHNwZWNpZmljYWxseSB0aGUgYEJSX0NPREVfREVTQ1JgIGNhc2UuIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgZGVhbGluZyB3aXRoIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIGFkZHJlc3Nlcywgd2hpY2ggYXJlIGNydWNpYWwgZm9yIHRoZSBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIHJlY2VpdmVyLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBkaXJlY3QgYXNzaWdubWVudCBhbmQgYSBoYXJkY29kZWQgc3VidHJhY3Rpb24gb2YgYDB4MzUwMGAuIFRoYXQgc3VidHJhY3Rpb24gbG9va3MgYSBiaXQgc3VzcGVjdCAtIGEgbWFnaWMgbnVtYmVyLCBhbHdheXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycyBkb3duIHRoZSBsaW5lIGlmIHRoZSBmaXJtd2FyZSBjaGFuZ2VzLgoKQWgsIEkgc2VlIGl0IG5vdy4gVGhlIHBhdGNoIGludHJvZHVjZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzLiBGaXJzdCwgaXQgZW5zdXJlcyB0aGF0IHRoZSBmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyByZWFkcywgYSBjb21tb24gc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBhbmQgY3Jhc2hlcywgcGFydGljdWxhcmx5IGluIGxvdy1sZXZlbCBkcml2ZXJzIGxpa2UgdGhpcy4gSXQgdGhlbiBjaGVja3MgaWYgdGhlIGNhbGN1bGF0ZWQgYHJ4X2VuZGAgaXMgYSB2YWxpZCByYW5nZSwgZW5zdXJpbmcgaXQmIzM5O3Mgbm90IGxlc3MgdGhhbiBhIGJhc2UgdmFsdWUgYW5kIHRoYXQgdGhlIHN1YnRyYWN0aW9uIGZyb20gYDB4MzUwMGAgZG9lc24mIzM5O3QgcmVzdWx0IGluIGFuIGludmFsaWQgcmFuZ2UgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHJ4X3N0YXJ0YC4gVGhpcyBtYWtlcyB0aGUgY29kZSBtdWNoIG1vcmUgcm9idXN0IGFuZCBzYWZlci4gSWYgdGhlIGNoZWNrcyBmYWlsLCB0aGUgY29kZSBub3cgcmV0dXJucyBhbiBlcnJvciAoYC1FSU5WQUxgKSwgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGluIHRoaXMgc2l0dWF0aW9uLgoKU28sIHRoZSBrZXkgaW1wcm92ZW1lbnQgaGVyZSBpcyB0aGUgYWRkZWQgZXJyb3IgaGFuZGxpbmcgYW5kIHJhbmdlIHZhbGlkYXRpb24uIEJ5IHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgZmlybXdhcmUgZGVzY3JpcHRvciwgaXQgbWFrZXMgdGhlIGRyaXZlciBtb3JlIHJlc2lzdGFudCB0byBwb3RlbnRpYWxseSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzbHkgY3JhZnRlZCBmaXJtd2FyZS4gR29vZCB3b3JrLiBOb3csIGxldCYjMzk7cyBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBwNTQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQNTRfQ09NTU9OXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAgNjpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXG4gICA5Olx0XHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xuICAxMDpcdFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxuICAxMTpcdFxuICAxMjpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMTM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFA1NF9VU0JcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgVVNCIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgVVNCXG4gIDIwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMjU6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMjY6XHRcbiAgMjc6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTR1c2IuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFA1NF9QQ0lcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgUENJIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgUENJXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0kgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbW9zdCBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGVcbiAgMzU6XHRcdCAgZnVsbG1hYyBwcmlzbTU0IGRyaXZlciBwbHVzIG1hbnkgZGV2aWNlcyB3aGljaCBhcmUgbm90XG4gIDM2Olx0XHQgIHN1cHBvcnRlZCBieSB0aGUgZnVsbG1hYyBkcml2ZXIvZmlybXdhcmUuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDM5Olx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0cGNpLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBQNTRfU1BJXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgU1BJX01BU1RFUlxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcbiAgNDg6XHRcdCAgc3VjaCBhcyBOb2tpYSYjMzk7cyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHNwaS5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgUDU0X1NQSV9ERUZBVUxUX0VFUFJPTVxuICA1MzpcdFx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZhbGxiYWNrIEVFUFJPTSBibG9iXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFA1NF9TUElcbiAgNTU6XHRcdGRlZmF1bHQgblxuICA1NjpcdFx0aGVscFxuICA1NzpcdFx0IFVubGlrZSB0aGUgUENJIG9yIFVTQiBkZXZpY2VzLCB0aGUgU1BJIHZhcmlhbnRzIGRvbiYjMzk7dCBoYXZlXG4gIDU4Olx0XHQgYSBkZWRpY2F0ZWQgRUVQUk9NIGNoaXAgdG8gc3RvcmUgYWxsIGRldmljZSBzcGVjaWZpYyB2YWx1ZXNcbiAgNTk6XHRcdCBmb3IgY2FsaWJyYXRpb24sIGNvdW50cnkgYW5kIGludGVyZmFjZSBzZXR0aW5ncy5cbiAgNjA6XHRcbiAgNjE6XHRcdCBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIGltYWdlIFwmIzM0OzM4MjYuZWVwcm9tXCYjMzQ7LCBpZiB0aGVcbiAgNjI6XHRcdCBmaWxlIGlzIHB1dCBhdCB0aGUgcmlnaHQgcGxhY2UuICh1c3VhbGx5IC9saWIvZmlybXdhcmUuKVxuICA2MzpcdFxuICA2NDpcdFx0IE9ubHkgaWYgdGhpcyByZXF1ZXN0IGZhaWxzLCB0aGlzIG9wdGlvbiB3aWxsIHByb3ZpZGUgYVxuICA2NTpcdFx0IGJhY2t1cCBzZXQgb2YgZ2VuZXJpYyB2YWx1ZXMgdG8gZ2V0IHRoZSBkZXZpY2Ugd29ya2luZy5cbiAgNjY6XHRcbiAgNjc6XHRcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgUDU0X0xFRFNcbiAgNzA6XHRcdGJvb2xcbiAgNzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgTUFDODAyMTFfTEVEUyBcdTAwMjZcdTAwMjYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBQNTRfQ09NTU9OKVxuICA3MjpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDExCgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDk3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMgZm9yIHA1NF9wYXJzZV9maXJtd2FyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGZ1enppbmcgYHA1NF9wYXJzZV9maXJtd2FyZWAgaXMgYSB3b3J0aHdoaWxlIGVuZGVhdm9yLiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBUaGUgZnVuY3Rpb24sIHBhcnQgb2YgdGhlIGBwNTRjb21tb25gIGRyaXZlciwgaXMgY2FsbGVkIGJ5IGBwNTR1c2JgLCB3aGljaCBpcyBhIFVTQiB3aXJlbGVzcyBkZXZpY2UgZHJpdmVyLiBVU0IgZGV2aWNlcyBhcmUgcmVhZGlseSBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbjsgdGhhdCBpcyBncmVhdCBiZWNhdXNlIGl0IGltcGxpZXMgYSBjbGVhciBhdHRhY2sgc3VyZmFjZS4gV2hlbiBhIHNpbXVsYXRlZCBVU0IgZGV2aWNlIG1hdGNoaW5nIHRoZSBgcDU0dV90YWJsZWAgSUQgdGFibGUgaXMgcGx1Z2dlZCBpbiwgYHA1NHVfcHJvYmVgIGlzIGNhbGxlZC4gVGhhdCBwcm9iZSBmdW5jdGlvbiByZXF1ZXN0cyBmaXJtd2FyZSBsb2FkaW5nLiBVbHRpbWF0ZWx5LCB0aGUgcmVsZXZhbnQgY2FsbHN0YWNrIGlzIGBwNTR1X3Byb2JlYCAtJmd0OyBgcDU0dV9sb2FkX2Zpcm13YXJlYCAtJmd0OyBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCAtJmd0OyBgcDU0dV9zdGFydF9vcHNgIC0mZ3Q7IGBwNTRfcGFyc2VfZmlybXdhcmVgLiBUaGUgcGF0aCBpcyB0aGVyZSwgYW5kIGl0IGlzIGFjY2Vzc2libGUhIFRoZSBwYXRjaGVkIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBhIGZpcm13YXJlIGJ1ZmZlciBuZWVkcyB0byBiZSBwYXJzZWQsIHdoaWNoIHNob3VsZCBiZSB0aGUgbm9ybWFsIGNhc2UgaW4gdGVzdGluZy9mdXp6aW5nIGVudmlyb25tZW50cy4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgYGRlc2MtJmd0O3J4X3N0YXJ0YCBhbmQgYGRlc2MtJmd0O3J4X2VuZGAsIGFzIHdlbGwgYXMgZGVzY3JpcHRvciBsZW5ndGggY2hlY2tpbmcsIHdpdGhpbiBgcDU0X3BhcnNlX2Zpcm13YXJlYC4KCk5vdywgbGV0JiMzOTtzIGNvbnN1bHQgdGhlIHJlbGV2YW50IGZ1enppbmcgY3JpdGVyaWEuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyB1bmRlciAmIzM0O0RyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywmIzM0OyB0aGUgVVNCIGRyaXZlciBjZXJ0YWlubHkgZml0cyB0aGF0IGRlc2NyaXB0aW9uLiBUaGUgbmV4dCBjcnVjaWFsIHBvaW50IGlzIHRoYXQgd2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4dHJhY3RlZCBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyLiBUaGVzZSB3b3VsZCBpbmNsdWRlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGl0c2VsZiBhbmQgcG90ZW50aWFsbHkgdGhlIGNhbGwgY2hhaW4sIGBwNTR1X3N0YXJ0X29wc2AgLyBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCAvIGBwNTR1X3Byb2JlYC4KCkltcG9ydGFudGx5LCBgcDU0X3BhcnNlX2Zpcm13YXJlYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIGBFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZmlybXdhcmUpO2AuIFBlcmZlY3Q7IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyByZWFkaWx5IGFjY2Vzc2libGUuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgYFA1NF9DT01NT05gLCBgUDU0X1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYCBhcmUgbmVlZGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIGBQNTRfQ09NTU9OYCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGBQNTRfVVNCYCBkZXBlbmRzIG9uIGBQNTRfQ09NTU9OICZhbXA7JmFtcDsgVVNCYCwgYFA1NF9QQ0lgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gJmFtcDsmYW1wOyBQQ0lgLCBhbmQgYFA1NF9TUElgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gJmFtcDsmYW1wOyBTUElfTUFTVEVSYC4gTm8gaGlkZGVuIGdvdGNoYXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXMgQyBjb2RlIHdpdGhpbiBhIGRyaXZlciwgc28gaXQgaXNuJiMzOTt0IGEgbm9uLWtlcm5lbCBvciBub24tZXhlY3V0YWJsZSBjaGFuZ2UuIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBpc24mIzM5O3QgYW4gaXNzdWU7IGBQNTRfVVNCYCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24uIEZpbmFsbHksIHRoZSBleGVjdXRpb24gcGF0aCBpcyByZWFjaGFibGUgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgc28gdGhpcyBpc24mIzM5O3QgdW5yZWFjaGFibGUuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCkkmIzM5O2xsIGZpbmFsaXplIHRoZSBGb2N1c1N5bWJvbHMgYXM6IGBwNTRfcGFyc2VfZmlybXdhcmVgLCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCwgYHA1NHVfc3RhcnRfb3BzYCwgYW5kIGBwNTR1X3Byb2JlYC4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuCgpTbywgdGhlIGNvbmNpc2UgcmVhc29uaW5nIGlzIHRoaXM6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNyaXRpY2FsIHZhbGlkYXRpb24gZm9yIGZpcm13YXJlIGRlc2NyaXB0b3IgbGVuZ3RoIGFuZCBSWCByYW5nZSBzYW5pdHkgY2hlY2tzIGluIGBwNTRfcGFyc2VfZmlybXdhcmUoKWAuIFRoaXMgZnVuY3Rpb24gaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZm9yIFVTQiBQcmlzbTU0IHdpcmVsZXNzIGRldmljZXMgKGBwNTR1c2JgKSB2aWEgVVNCIGVtdWxhdGlvbi9nYWRnZXQgZnV6emluZy4gRnV6emluZyBwcm92aWRlcyBhIG1lYW5zIHRvIHZlcmlmeSB0aGF0IGZpcm13YXJlIHBhcnNpbmcgaGFuZGxlcyBtYWxmb3JtZWQgZGVzY3JpcHRvcnMgY29ycmVjdGx5IHdpdGhvdXQgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyByZWFkcywgb3IgaW52YWxpZCBzdGF0ZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtwNTR1X3N0YXJ0X29wcyYjMzQ7LAogICAgJiMzNDtwNTR1X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtwNTR1X3N0YXJ0X29wcyYjMzQ7LAogICAgJiMzNDtwNTR1X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBmaXJtd2FyZSBib290IHJlY29yZHMgKGBsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydGApLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkY2VkNDViYWJiNTIwOGRjM2QxNmY5ZGVmNzM5ODMxNDkyZDExMzcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMzozODowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jCmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYwpAQCAtNzksOSAmIzQzOzc5LDI2IEBAIGludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogCQljYXNlIEJSX0NPREVfREVTQ1I6IHsKIAkJCXN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPQogCQkJCShzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy0mZ3Q7ZGF0YTsKLQkJCXByaXYtJmd0O3J4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnhfc3RhcnQpOwotCQkJLyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqLwotCQkJcHJpdi0mZ3Q7cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnhfZW5kKSAtIDB4MzUwMDsKJiM0MzsJCQl1MzIgcnhfc3RhcnQsIHJ4X2VuZDsKJiM0MzsKJiM0MzsJCQlpZiAobGVuICZsdDsgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKHN0cnVjdCBib290cmVjX2Rlc2MsCiYjNDM7CQkJCQkJCSAgIHJ4X2tleWNhY2hlX3NpemUpLAomIzQzOwkJCQkJCSAgICAgICBzaXplb2YoKmJvb3RyZWMtJmd0O2RhdGEpKSkgewomIzQzOwkJCQl3aXBoeV9lcnIocHJpdi0mZ3Q7aHctJmd0O3dpcGh5LAomIzQzOwkJCQkJICAmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3J4X3N0YXJ0KTsKJiM0MzsJCQlyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9lbmQpOwomIzQzOwkJCWlmIChyeF9lbmQgJmx0OyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwICZsdDs9IHJ4X3N0YXJ0KSB7CiYjNDM7CQkJCXdpcGh5X2Vycihwcml2LSZndDtody0mZ3Q7d2lwaHksCiYjNDM7CQkJCQkgICYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBoYXMgaW52YWxpZCBSWCByYW5nZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcHJpdi0mZ3Q7cnhfc3RhcnQgPSByeF9zdGFydDsKJiM0MzsJCQlwcml2LSZndDtyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7CiAJCQlwcml2LSZndDtoZWFkcm9vbSA9IGRlc2MtJmd0O2hlYWRyb29tOwogCQkJcHJpdi0mZ3Q7dGFpbHJvb20gPSBkZXNjLSZndDt0YWlscm9vbTsKIAkJCXByaXYtJmd0O3ByaXZhY3lfY2FwcyA9IGRlc2MtJmd0O3ByaXZhY3lfY2FwczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpcm13YXJlIEkvTyBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGRpZmYgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY2AuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgYXJvdW5kIGxpbmUgNzksIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgcHVycG9zZS4gTXkgcGxhbiBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYHJlYWQtZmlsZWAgY2FsbDsgSSBuZWVkIHRvIGNvbXByZWhlbmQgZXhhY3RseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpcm13YXJlIEkvTyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uIHdpbGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdHdoaWxlIChib290cmVjLVx1MDAzZWRhdGEgXHUwMDNjPSBlbmRfZGF0YSBcdTAwMjZcdTAwMjYgKGJvb3RyZWMtXHUwMDNlZGF0YSAmIzQzO1xuICA1MTpcdFx0ICAgICAgIChsZW4gPSBsZTMyX3RvX2NwdShib290cmVjLVx1MDAzZWxlbikpKSBcdTAwM2M9IGVuZF9kYXRhKSB7XG4gIDUyOlx0XHRcdHUzMiBjb2RlID0gbGUzMl90b19jcHUoYm9vdHJlYy1cdTAwM2Vjb2RlKTtcbiAgNTM6XHRcdFx0c3dpdGNoIChjb2RlKSB7XG4gIDU0Olx0XHRcdGNhc2UgQlJfQ09ERV9DT01QT05FTlRfSUQ6XG4gIDU1Olx0XHRcdFx0cHJpdi1cdTAwM2Vmd19pbnRlcmZhY2UgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKVxuICA1NjpcdFx0XHRcdFx0XHQgICAgIGJvb3RyZWMtXHUwMDNlZGF0YSk7XG4gIDU3Olx0XHRcdFx0c3dpdGNoIChwcml2LVx1MDAzZWZ3X2ludGVyZmFjZSkge1xuICA1ODpcdFx0XHRcdGNhc2UgRldfTE04NjpcbiAgNTk6XHRcdFx0XHRjYXNlIEZXX0xNMjA6XG4gIDYwOlx0XHRcdFx0Y2FzZSBGV19MTTg3OiB7XG4gIDYxOlx0XHRcdFx0XHRjaGFyICppZnR5cGUgPSAoY2hhciAqKWJvb3RyZWMtXHUwMDNlZGF0YTtcbiAgNjI6XHRcdFx0XHRcdHdpcGh5X2luZm8ocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbiAgNjM6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7cDU0IGRldGVjdGVkIGEgTE0lYyVjIGZpcm13YXJlXFxuXCYjMzQ7LFxuICA2NDpcdFx0XHRcdFx0XHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XG4gIDY1Olx0XHRcdFx0XHRicmVhaztcbiAgNjY6XHRcdFx0XHRcdH1cbiAgNjc6XHRcdFx0XHRjYXNlIEZXX0ZNQUM6XG4gIDY4Olx0XHRcdFx0ZGVmYXVsdDpcbiAgNjk6XHRcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA3MDpcdFx0XHRcdFx0XHQgIFwmIzM0O3Vuc3VwcG9ydGVkIGZpcm13YXJlXFxuXCYjMzQ7KTtcbiAgNzE6XHRcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuICA3MjpcdFx0XHRcdH1cbiAgNzM6XHRcdFx0XHRicmVhaztcbiAgNzQ6XHRcdFx0Y2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OOlxuICA3NTpcdFx0XHRcdC8qIDI0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFsbCBmaXJtd2FyZXMgKi9cbiAgNzY6XHRcdFx0XHRpZiAoc3RybmxlbigodW5zaWduZWQgY2hhciAqKSBib290cmVjLVx1MDAzZWRhdGEsIDI0KSBcdTAwM2MgMjQpXG4gIDc3Olx0XHRcdFx0XHRmd192ZXJzaW9uID0gKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy1cdTAwM2VkYXRhO1xuICA3ODpcdFx0XHRcdGJyZWFrO1xuICA3OTpcdFx0XHRjYXNlIEJSX0NPREVfREVTQ1I6IHtcbiAgODA6XHRcdFx0XHRzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID1cbiAgODE6XHRcdFx0XHRcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cdTAwM2VkYXRhO1xuICA4MjpcdFx0XHRcdHUzMiByeF9zdGFydCwgcnhfZW5kO1xuICA4MzpcdFxuICA4NDpcdFx0XHRcdGlmIChsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZChzdHJ1Y3QgYm9vdHJlY19kZXNjLFxuICA4NTpcdFx0XHRcdFx0XHRcdFx0ICAgcnhfa2V5Y2FjaGVfc2l6ZSksXG4gIDg2Olx0XHRcdFx0XHRcdFx0ICAgICAgIHNpemVvZigqYm9vdHJlYy1cdTAwM2VkYXRhKSkpIHtcbiAgODc6XHRcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA4ODpcdFx0XHRcdFx0XHQgIFwmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxuXCYjMzQ7KTtcbiAgODk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA5MDpcdFx0XHRcdH1cbiAgOTE6XHRcbiAgOTI6XHRcdFx0XHRyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfc3RhcnQpO1xuICA5MzpcdFx0XHRcdHJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKTtcbiAgOTQ6XHRcdFx0XHRpZiAocnhfZW5kIFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFx1MDAzYz0gcnhfc3RhcnQpIHtcbiAgOTU6XHRcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA5NjpcdFx0XHRcdFx0XHQgIFwmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaGFzIGludmFsaWQgUlggcmFuZ2VcXG5cJiMzNDspO1xuICA5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDk4Olx0XHRcdFx0fVxuICA5OTpcdFxuIDEwMDpcdFx0XHRcdHByaXYtXHUwMDNlcnhfc3RhcnQgPSByeF9zdGFydDtcbiAxMDE6XHRcdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDtcbiAxMDI6XHRcdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbiAxMDM6XHRcdFx0XHRwcml2LVx1MDAzZXRhaWxyb29tID0gZGVzYy1cdTAwM2V0YWlscm9vbTtcbiAxMDQ6XHRcdFx0XHRwcml2LVx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXHUwMDNlcHJpdmFjeV9jYXBzO1xuIDEwNTpcdFx0XHRcdHByaXYtXHUwMDNlcnhfa2V5Y2FjaGVfc2l6ZSA9IGRlc2MtXHUwMDNlcnhfa2V5Y2FjaGVfc2l6ZTtcbiAxMDY6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoYm9vdHJlYy1cdTAwM2VsZW4pID09IDExKVxuIDEwNzpcdFx0XHRcdFx0cHJpdi1cdTAwM2VyeF9tdHUgPSBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZXJ4X210dSk7XG4gMTA4Olx0XHRcdFx0ZWxzZVxuIDEwOTpcdFx0XHRcdFx0cHJpdi1cdTAwM2VyeF9tdHUgPSAoc2l6ZV90KVxuIDExMDpcdFx0XHRcdFx0XHQweDYyMCAtIHByaXYtXHUwMDNldHhfaGRyX2xlbjtcbiAxMTE6XHRcdFx0XHRtYXhsZW4gPSBwcml2LVx1MDAzZXR4X2hkcl9sZW4gJiM0MzsgLyogVVNCIGRldmljZXMgKi9cbiAxMTI6XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSAmIzQzO1xuIDExMzpcdFx0XHRcdFx0IDQgJiM0MzsgLyogcnggYWxpZ25tZW50ICovXG4gMTE0Olx0XHRcdFx0XHQgSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDtcbiAxMTU6XHRcdFx0XHRpZiAocHJpdi1cdTAwM2VyeF9tdHUgXHUwMDNlIG1heGxlbiBcdTAwMjZcdTAwMjYgUEFHRV9TSVpFID09IDQwOTYpIHtcbiAxMTY6XHRcdFx0XHRcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7cDU0OiByeF9tdHUgcmVkdWNlZCBmcm9tICVkIFwmIzM0O1xuIDExNzpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3RvICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZXJ4X210dSwgbWF4bGVuKTtcbiAxMTg6XHRcdFx0XHRcdHByaXYtXHUwMDNlcnhfbXR1ID0gbWF4bGVuO1xuIDExOTpcdFx0XHRcdH1cbiAxMjA6XHRcdFx0XHRicmVhaztcbiAxMjE6XHRcdFx0XHR9XG4gMTIyOlx0XHRcdGNhc2UgQlJfQ09ERV9FWFBPU0VEX0lGOlxuIDEyMzpcdFx0XHRcdGV4cF9pZiA9IChzdHJ1Y3QgZXhwX2lmICopIGJvb3RyZWMtXHUwMDNlZGF0YTtcbiAxMjQ6XHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAobGVuICogc2l6ZW9mKCpleHBfaWYpIC8gNCk7IGkmIzQzOyYjNDM7KVxuIDEyNTpcdFx0XHRcdFx0aWYgKGV4cF9pZltpXS5pZl9pZCA9PSBjcHVfdG9fbGUxNihJRl9JRF9MTUFDKSlcbiAxMjY6XHRcdFx0XHRcdFx0cHJpdi1cdTAwM2Vmd192YXIgPSBsZTE2X3RvX2NwdShleHBfaWZbaV0udmFyaWFudCk7XG4gMTI3Olx0XHRcdFx0YnJlYWs7XG4gMTI4Olx0XHRcdGNhc2UgQlJfQ09ERV9ERVBFTkRFTlRfSUY6XG4gMTI5Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IEZpcm13YXJlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiB0aGUgZmlybXdhcmUgZGVzY3JpcHRvciBwYXJzaW5nLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGNydWNpYWwgc2FuaXR5IGNoZWNrcywgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIHVuZGVyZmxvdyBpc3N1ZXMuCgpTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHR3byBrZXkgY29uY2VybnM6CgoxLiAgVGhlcmUmIzM5O3MgYSBjaGVjayBvbiBgbGVuYCB0byBtYWtlIHN1cmUgaXQgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYSBgYm9vdHJlY19kZXNjYCBzdHJ1Y3R1cmUgd2hlbiBhY2Nlc3NpbmcgaXRzIG1lbWJlcnMuIEl0JiMzOTtzIHVzaW5nIGBESVZfUk9VTkRfVVBgIGFuZCBgb2Zmc2V0b2ZlbmRgIHRvIGVuc3VyZSB0aGF0IGl0IG9ubHkgYWNjZXNzZXMgdmFsaWQgbWVtb3J5IHdpdGhpbiB0aGUgZGVzY3JpcHRvciYjMzk7cyBkZWZpbmVkIGJvdW5kcy4gVGhpcyBsb29rcyBsaWtlIGEgcHJlZW1wdGl2ZSBtZWFzdXJlIGFnYWluc3QgYSBidWZmZXIgb3ZlcmZsb3csIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuCgoyLiAgVGhlIHNlY29uZCBjaGVjayBvbiBgcnhfZW5kYCByZWxhdGVzIHRvIHRoZSByZWNlaXZlciByYW5nZS4gSXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCB0aGUgcG9zc2liaWxpdHkgb2YgYHJ4X2VuZGAgYmVpbmcgYW4gaW52YWxpZCB2YWx1ZSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGByeF9zdGFydGAuIEl0IHNlZW1zIHRoYXQgYW4gaW52YWxpZCBgcnhfZW5kYCBjb3VsZCBsZWFkIHRvIGFuIHVuZGVyZmxvdywgd2hpY2ggd291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIHZhcmlhYmxlcyB3aXRoaW4gdGhlIHA1NCBkcml2ZXImIzM5O3MgY29kZWJhc2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gZnVsbHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgaWYgdGhpcyBpcyBhIGtub3duIHJpc2sgaW4gb3VyIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwYCBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9gIGRpcmVjdG9yeSB0byB0cmFjayBkb3duIHRoZSBsb2NhdGlvbnMgd2hlcmUgYHJ4X3N0YXJ0YCBhbmQgYHJ4X2VuZGAgYXJlIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgd2lsbCBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeF8oc3RhcnR8ZW5kKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYz0yNz1pbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozOTpcdGlmIChwcml2LVx1MDAzZXJ4X3N0YXJ0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy04MS1cdFx0XHRcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo4MjpcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy05MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTI6XHRcdFx0cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJ4X3N0YXJ0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTM6XHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo5NDpcdFx0XHRpZiAocnhfZW5kIFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFx1MDAzYz0gcnhfc3RhcnQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtOTUtXHRcdFx0XHR3aXBoeV9lcnIocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMDA6XHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMDE6XHRcdFx0cHJpdi1cdTAwM2VyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTEwMi1cdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTMxMD1pbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzE2Olx0aWYgKHVubGlrZWx5KF9yZXFfaWQgXHUwMDNjIHByaXYtXHUwMDNlcnhfc3RhcnQgfHwgX3JlcV9pZCBcdTAwM2UgcHJpdi1cdTAwM2VyeF9lbmQpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9MzMwPWludCBwNTRfc2V0dXBfbWFjKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzgwLVx0XHRtZW1zZXQoc2V0dXAtXHUwMDNldjEucnRzX3JhdGVzLCAwLCA4KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzgxOlx0XHRzZXR1cC1cdTAwM2V2MS5yeF9hZGRyID0gY3B1X3RvX2xlMzIocHJpdi1cdTAwM2VyeF9lbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zODItXHRcdHNldHVwLVx1MDAzZXYxLm1heF9yeCA9IGNwdV90b19sZTE2KHByaXYtXHUwMDNlcnhfbXR1KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4Ni1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjM4NzpcdFx0c2V0dXAtXHUwMDNldjIucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtXHUwMDNlcnhfZW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzg4LVx0XHRzZXR1cC1cdTAwM2V2Mi5tYXhfcnggPSBjcHVfdG9fbGUxNihwcml2LVx1MDAzZXJ4X210dSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTQ3PXN0cnVjdCBib290cmVjX2Rlc2Mge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC00OS1cdF9fbGUxNiBmbGFncztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDo1MDpcdF9fbGUzMiByeF9zdGFydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDo1MTpcdF9fbGUzMiByeF9lbmQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtNTItXHR1OCBoZWFkcm9vbTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MTY0PXN0cnVjdCBwNTRfY29tbW9uIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMTc1LVx0LyogbWVtb3J5IG1hbmFnZW1lbnQgKGFzIHNlZW4gYnkgdGhlIGZpcm13YXJlKSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjE3NjpcdHUzMiByeF9zdGFydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoxNzc6XHR1MzIgcnhfZW5kO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oLTE3OC1cdHUxNiByeF9tdHU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yNz1zdGF0aWMgdm9pZCBwNTRfZHVtcF90eF9xdWV1ZShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo0MjpcdHByZXZfYWRkciA9IHByaXYtXHUwMDNlcnhfc3RhcnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQzLVx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2cHJpdi1cdTAwM2V0eF9xdWV1ZSwgc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02MC1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjE6XHRmcmVlID0gcHJpdi1cdTAwM2VyeF9lbmQgLSBwcmV2X2FkZHI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTYyLVx0bGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgZnJlZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz03OT1zdGF0aWMgaW50IHA1NF9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTg1LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6ODY6XHR1MzIgbGFzdF9hZGRyID0gcHJpdi1cdTAwM2VyeF9zdGFydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6ODc6XHR1MzIgdGFyZ2V0X2FkZHIgPSBwcml2LVx1MDAzZXJ4X3N0YXJ0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy04OC1cdHUxNiBsZW4gPSBwcml2LVx1MDAzZWhlYWRyb29tICYjNDM7IHNrYi1cdTAwM2VsZW4gJiM0MzsgcHJpdi1cdTAwM2V0YWlscm9vbSAmIzQzOyAzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMTE5LVx0aWYgKHVubGlrZWx5KCF0YXJnZXRfc2tiKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzoxMjA6XHRcdGlmIChwcml2LVx1MDAzZXJ4X2VuZCAtIGxhc3RfYWRkciBcdTAwM2U9IGxlbikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0xMjEtXHRcdFx0dGFyZ2V0X3NrYiA9IHNrYl9wZWVrX3RhaWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9xdWV1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzQKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogNjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGaXJtd2FyZSBQYXJzaW5nIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW4gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgYGJvb3RyZWMtJmd0O2RhdGFgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB3ZSBoYWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIHByb2JsZW1zOgoKRmlyc3QsIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZywgd2Ugd2VyZSBwb3RlbnRpYWxseSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJvb3RyZWMtJmd0O2RhdGFgIGJ1ZmZlciB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBgcnhfc3RhcnRgLCBgcnhfZW5kYCwgZXRjLiwgd2hpY2ggY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcnJ1bnMuIEtBU0FOIHdvdWxkIHBpY2sgdGhhdCB1cCB0aG91Z2guCgpTZWNvbmQsIHRoZSBsaW5lIGBwcml2LSZndDtyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9lbmQpIC0gMHgzNTAwO2AgY291bGQgdW5kZXJmbG93LiBJZiBgcnhfZW5kYCB3YXMgbGVzcyB0aGFuIGAweDM1MDBgLCBvciBpZiB0aGUgcmVzdWx0IG9mIHRoYXQgc3VidHJhY3Rpb24gd2FzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgcnhfc3RhcnRgLCB3ZSYjMzk7ZCBoYXZlIGludGVnZXIgdW5kZXJmbG93LCBwb3RlbnRpYWxseSBjcmVhdGluZyBpbXByb3BlciBib3VuZHMgZm9yIFRYL1JYIHF1ZXVlcy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IEtNU0FOIHJlcXVpcmVtZW50cy4gRG8gd2UgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8sIGJlY2F1c2UgdGhlIGZpcm13YXJlIGJ1ZmZlciBpcyBhbHJlYWR5IGxvYWRlZCBvciBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gc28gaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGRlYWwgd2l0aCBpdC4gVGhlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIHZhcmlhYmxlcyBhcmUgbG9jYWwsIGFuZCBpbml0aWFsaXplZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgYGxlMzJfdG9fY3B1KClgIGNvdW50ZXJwYXJ0cy4gVGhlIGJvdW5kcyBjaGVjayB3ZSBwdXQgaW4gcGxhY2Ugbm93IChgbGVuICZsdDsgLi4uYCkgbWFrZXMgc3VyZSB3ZSBkb24mIzM5O3QgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSByYW5nZSBjaGVjayBhbHNvIHByZXZlbnRzIHRoZSBhcml0aG1ldGljIHVuZGVyZmxvdy4gS0FTQU4gYWxyZWFkeSBhZGRyZXNzZXMgdGhlIGJvdW5kcyBjaGVjay9vdmVycnVuIGlzc3VlLgoKU28sIHRoaXMgaXNuJiMzOTt0IGEgS01TQU4gaXNzdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHJlYWRzIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIHRoZSBib3VuZHMgY2hlY2sgKnByZXZlbnRzKiBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuIExldCYjMzk7cyBjb25maXJtIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgcDU0X3BhcnNlX2Zpcm13YXJlKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGZpcm13YXJlIGJvb3QgcmVjb3JkcyAoYGxlbiBcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKC4uLikpYCkgYW5kIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cvaW52YWxpZCBSWCByYW5nZSBjYWxjdWxhdGlvbiAoYHJ4X2VuZCBcdTAwM2MgMHgzNTAwIHx8IHJ4X2VuZCAtIDB4MzUwMCBcdTAwM2M9IHJ4X3N0YXJ0YCkuIFxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYW5kIGludGVnZXIgYXJpdGhtZXRpYyBidWdzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHN1Y2ggYXMgS0FTQU4gYW5kIFVCU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBmaXJtd2FyZSBib290IHJlY29yZHMgKGBsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydGApLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjA3Ljc1OTgxMzY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDIwOTQwNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZmlybXdhcmVcIixcbiAgICBcInA1NHVfc3RhcnRfb3BzXCIsXG4gICAgXCJwNTR1X3Byb2JlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIGluIGBwNTRfcGFyc2VfZmlybXdhcmUoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gZmlybXdhcmUgYm9vdCByZWNvcmRzIChgbGVuIFxcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKC4uLikpYCkgYW5kIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cvaW52YWxpZCBSWCByYW5nZSBjYWxjdWxhdGlvbiAoYHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnRgKS4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBzYW5pdHkgY2hlY2tzIGZvciBmaXJtd2FyZSBkZXNjcmlwdG9yIGxlbmd0aHMgYW5kIFJYIHJhbmdlcyBpbiBwNTRfcGFyc2VfZmlybXdhcmUoKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBwNTR1c2IgZHJpdmVyIHRocm91Z2ggVVNCIGdhZGdldC9kZXZpY2UgZW11bGF0aW9uIGZ1enppbmcgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcgb24gZGV2aWNlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODowNy43NTk4MjA5MjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzk0MTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMzozODowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xcbmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcXG5AQCAtNzksOSArNzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuIFxcdFxcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID1cXG4gXFx0XFx0XFx0XFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVxcdTAwM2VkYXRhO1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X3N0YXJ0KTtcXG4tXFx0XFx0XFx0LyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqL1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9lbmQpIC0gMHgzNTAwO1xcbitcXHRcXHRcXHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcXG4rXFxuK1xcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcnhfa2V5Y2FjaGVfc2l6ZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXFx1MDAzZWRhdGEpKSkge1xcbitcXHRcXHRcXHRcXHR3aXBoeV9lcnIocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIHRvbyBzaG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X3N0YXJ0KTtcXG4rXFx0XFx0XFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlcnhfZW5kKTtcXG4rXFx0XFx0XFx0aWYgKHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnQpIHtcXG4rXFx0XFx0XFx0XFx0d2lwaHlfZXJyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiZmlybXdhcmUgZGVzY3JpcHRvciBoYXMgaW52YWxpZCBSWCByYW5nZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZWhlYWRyb29tID0gZGVzYy1cXHUwMDNlaGVhZHJvb207XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZXRhaWxyb29tID0gZGVzYy1cXHUwMDNldGFpbHJvb207XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXFx1MDAzZXByaXZhY3lfY2FwcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MDguMjI0NDM5NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2OTI1NjQ5ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZmlybXdhcmVcIixcbiAgICBcInA1NHVfc3RhcnRfb3BzXCIsXG4gICAgXCJwNTR1X3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBzYW5pdHkgY2hlY2tzIGZvciBmaXJtd2FyZSBkZXNjcmlwdG9yIGxlbmd0aHMgYW5kIFJYIHJhbmdlcyBpbiBwNTRfcGFyc2VfZmlybXdhcmUoKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBwNTR1c2IgZHJpdmVyIHRocm91Z2ggVVNCIGdhZGdldC9kZXZpY2UgZW11bGF0aW9uIGZ1enppbmcgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcgb24gZGV2aWNlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcbmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG5AQCAtNzksOSArNzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xuIFx0XHRcdHN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPVxuIFx0XHRcdFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVx1MDAzZWRhdGE7XG4tXHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfc3RhcnQpO1xuLVx0XHRcdC8qIEZJWE1FIGFkZCBzYW5pdHkgY2hlY2tpbmcgKi9cbi1cdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKSAtIDB4MzUwMDtcbitcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzYyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYyxcbitcdFx0XHRcdFx0XHRcdCAgIHJ4X2tleWNhY2hlX3NpemUpLFxuK1x0XHRcdFx0XHRcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXHUwMDNlZGF0YSkpKSB7XG4rXHRcdFx0XHR3aXBoeV9lcnIocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICBcImZpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4rXHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuK1x0XHRcdGlmIChyeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydCkge1xuK1x0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4rXHRcdFx0XHRcdCAgXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHByaXYtXHUwMDNlcnhfc3RhcnQgPSByeF9zdGFydDtcbitcdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDtcbiBcdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXRhaWxyb29tID0gZGVzYy1cdTAwM2V0YWlscm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXHUwMDNlcHJpdmFjeV9jYXBzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MDguMjI0NDQwODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDM1MDY3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHNpdHRpbmcgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBgcDU0YCBhY3R1YWxseSAqaXMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgaGVyZSwgc28gSSdtIHRoaW5raW5nLCB3aGljaCBzcGVjaWZpYyBkcml2ZXJzIHV0aWxpemUgdGhlIHA1NCBpbmZyYXN0cnVjdHVyZT8gSXMgaXQganVzdCBwNTR1c2IsIHA1NHBjaSwgYW5kIHA1NHNwaSwgb3IgYXJlIHRoZXJlIG90aGVycyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgd2lsbCBoZWxwIG1lIGJvdW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGZ1enppbmcgbGFuZHNjYXBlIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIElzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB0aHJvdWdoIGFueSBleGlzdGluZyBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBJJ20gdGhpbmtpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIFVTQiBlbXVsYXRpb24sIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbnMsIG9yIGV2ZW4gbWFjODAyMTEgaW50ZWdyYXRpb24uIEtub3dpbmcgaG93IHRoZSBjb2RlIGlzIGV4cG9zZWQgdG8gcG90ZW50aWFsIGZ1enppbmcgaW5wdXRzIGlzIGNyaXRpY2FsLiBXaGljaCBrZXJuZWwgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSB0aGUgYWZmZWN0ZWQgcGF0aHM/IFdoaWNoIHN5bWJvbHMgYXJlIGF0IHBsYXkgaGVyZT9cblxuU28sIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nLiBUaW1lIHRvIGJ1c3Qgb3V0IHRoZSBncmVwcyBhbmQgc3RhcnQgcmVhZGluZyB0aG9zZSBmaWxlcy4gR290dGEgZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBnYXRoZXJpbmcgdGhlIHJhdyBkYXRhIHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MTcuNjU5NTEwNzQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjE1NTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjc0OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9Mj1jb25maWcgUDU0X0NPTU1PTlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTItXFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxMzpcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxNTpcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9MTc9Y29uZmlnIFA1NF9VU0JcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTI0LVxcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6MjU6XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6Mjc6XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0dXNiLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTI5PWNvbmZpZyBQNTRfUENJXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0zOC1cXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6Mzk6XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6NDE6XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0cGNpLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTQzPWNvbmZpZyBQNTRfU1BJXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy00OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo1MDpcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRzcGkuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9NTI9Y29uZmlnIFA1NF9TUElfREVGQVVMVF9FRVBST01cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjY3OlxcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy02OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGU6MjpwNTRjb21tb24tb2Jqc1xcdFxcdFxcdDo9IGVlcHJvbS5vIGZ3aW8ubyB0eHJ4Lm8gbWFpbi5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjM6cDU0Y29tbW9uLSQoQ09ORklHX1A1NF9MRURTKVxcdCs9IGxlZC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1A1NF9DT01NT04pXFx0Kz0gcDU0Y29tbW9uLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUDU0X1VTQilcXHRcXHQrPSBwNTR1c2Iub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QNTRfUENJKVxcdFxcdCs9IHA1NHBjaS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1A1NF9TUEkpXFx0XFx0Kz0gcDU0c3BpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjU6I2luY2x1ZGUgXFxcInA1NC5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNi0jaW5jbHVkZSBcXFwiZWVwcm9tLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI5OnN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcDU0X2JncmF0ZXNbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzAtXFx0eyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAwLCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0NDpzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHA1NF9hcmF0ZXNbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDUtXFx0eyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1NTpzdGF0aWMgc3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5IHA1NF9yc3NpX2RlZmF1bHQgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU2LVxcdC8qXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcxOnN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyLVxcdHUxNiBmcmVxO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3OTpzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgwOlxcdHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqY2hhbm5lbHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgxLVxcdHNpemVfdCBlbnRyaWVzO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4NjpzdGF0aWMgaW50IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEodTE2IGZyZXEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05OT1zdGF0aWMgaW50IHNhbWVfYmFuZCh1MTYgZnJlcSwgdTE2IGZyZXEyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMDAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDE6XFx0cmV0dXJuIHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSkgPT0gcDU0X2dldF9iYW5kX2Zyb21fZnJlcShmcmVxMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwMi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTA0OnN0YXRpYyBpbnQgcDU0X2NvbXBhcmVfY2hhbm5lbHMoY29uc3Qgdm9pZCAqX2EsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwNS1cXHRcXHRcXHRcXHRjb25zdCB2b2lkICpfYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTA2LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTA3OlxcdGNvbnN0IHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqYSA9IF9hO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDg6XFx0Y29uc3Qgc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICpiID0gX2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExMzpzdGF0aWMgaW50IHA1NF9jb21wYXJlX3Jzc2ljaGFuKGNvbnN0IHZvaWQgKl9hLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTQtXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqX2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTExNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExNjpcXHRjb25zdCBzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKmEgPSBfYTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTE3OlxcdGNvbnN0IHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqYiA9IF9iO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTIxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMjI6c3RhdGljIGludCBwNTRfZmlsbF9iYW5kX2JpdHJhdGVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTIzLVxcdFxcdFxcdFxcdCAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZF9lbnRyeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMjktXFx0Y2FzZSBOTDgwMjExX0JBTkRfMkdIWjpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTMwOlxcdFxcdGJhbmRfZW50cnktXFx1MDAzZWJpdHJhdGVzID0gcDU0X2JncmF0ZXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzMTpcXHRcXHRiYW5kX2VudHJ5LVxcdTAwM2VuX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYmdyYXRlcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEzMi1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTMzLVxcdGNhc2UgTkw4MDIxMV9CQU5EXzVHSFo6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzNDpcXHRcXHRiYW5kX2VudHJ5LVxcdTAwM2ViaXRyYXRlcyA9IHA1NF9hcmF0ZXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzNTpcXHRcXHRiYW5kX2VudHJ5LVxcdTAwM2VuX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYXJhdGVzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTM2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE0My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTQ0OnN0YXRpYyBpbnQgcDU0X2dlbmVyYXRlX2JhbmQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNDU6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTQ2LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50ICpjaGFuX251bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNDgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNDk6XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE1MC1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICp0bXAsICpvbGQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTY1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNjY6XFx0cmV0ID0gcDU0X2ZpbGxfYmFuZF9iaXRyYXRlcyhkZXYsIHRtcCwgYmFuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE2Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE3MS1cXHRcXHRcXHQgICAoaSBcXHUwMDNjIGxpc3QtXFx1MDAzZWVudHJpZXMpOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTcyOlxcdFxcdHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqY2hhbiA9IFxcdTAwMjZsaXN0LVxcdTAwM2VjaGFubmVsc1tpXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTczLVxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqZGVzdCA9IFxcdTAwMjZ0bXAtXFx1MDAzZWNoYW5uZWxzW2pdO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTIzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKnA1NF91cGRhdGVfY2hhbm5lbF9wYXJhbShzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjMyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTE2IGZyZXEsIHUxNiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTIzNC1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjM1OlxcdHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yMzYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjUwLVxcdFxcdC8qIGVudHJ5IGRvZXMgbm90IGV4aXN0IHlldC4gSW5pdGlhbGl6ZSBhIG5ldyBvbmUuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI1MTpcXHRcXHRpbnQgYmFuZCA9IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI3NjpzdGF0aWMgaW50IHA1NF9nZXRfbWF4cG93ZXIoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozMTk6c3RhdGljIGludCBwNTRfZ2VuZXJhdGVfY2hhbm5lbF9saXN0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTMyMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjMyMTpcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MzIyOlxcdHN0cnVjdCBwNTRfY2hhbm5lbF9saXN0ICpsaXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMjMtXFx0dW5zaWduZWQgaW50IGksIGosIGssIG1heF9jaGFubmVsX251bTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNTAtXFx0bGlzdC1cXHUwMDNlbWF4X2VudHJpZXMgPSBtYXhfY2hhbm5lbF9udW07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM1MTpcXHRsaXN0LVxcdTAwM2VjaGFubmVscyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnksIG1heF9jaGFubmVsX251bSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM1Mi1cXHRpZiAoIWxpc3QtXFx1MDAzZWNoYW5uZWxzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzU5LVxcdFxcdFxcdGZyZXEgPSBsZTE2X3RvX2NwdShwcml2LVxcdTAwM2VpcV9hdXRvY2FsW2ldLmZyZXEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozNjA6XFx0XFx0XFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NBTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM2MS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzYzLVxcdFxcdGlmIChpIFxcdTAwM2MgcHJpdi1cXHUwMDNlb3V0cHV0X2xpbWl0LVxcdTAwM2VlbnRyaWVzKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM2NDpcXHRcXHRcXHRzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKnRtcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzY1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3MS1cXHRcXHRcXHRmcmVxID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikgZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3MjpcXHRcXHRcXHR0bXAgPSBwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0obGlzdCwgZnJlcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzczLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBDSEFOX0hBU19MSU1JVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3NC1cXHRcXHRcXHRpZiAodG1wKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3NTpcXHRcXHRcXHRcXHR0bXAtXFx1MDAzZW1heF9wb3dlciA9IHA1NF9nZXRfbWF4cG93ZXIocHJpdiwgZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3Ni1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozODU6XFx0XFx0XFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NVUlZFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzg2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zODktXFx0Lyogc29ydCB0aGUgY2hhbm5lbCBsaXN0IGJ5IGZyZXF1ZW5jeSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozOTA6XFx0c29ydChsaXN0LVxcdTAwM2VjaGFubmVscywgbGlzdC1cXHUwMDNlZW50cmllcywgc2l6ZW9mKHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM5MTpcXHQgICAgIHA1NF9jb21wYXJlX2NoYW5uZWxzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzkyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM5NC1cXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIE5VTV9OTDgwMjExX0JBTkRTOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Mzk1OlxcdFxcdGlmIChwNTRfZ2VuZXJhdGVfYmFuZChkZXYsIGxpc3QsIFxcdTAwMjZrLCBpKSA9PSAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zOTYtXFx0XFx0XFx0aisrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDE2OnN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQxNy1cXHRcXHRcXHQgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00MTgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0MTk6XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQyMDpcXHRzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlICpkc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQyMS1cXHRzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjAgKnNyYztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00NjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQ2ODpzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00NjktXFx0XFx0XFx0ICAgIHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDcwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDcxOlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0NzI6XFx0c3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSAqZHN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00NzMtXFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxICpzcmM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTA6c3RhdGljIGNvbnN0IGNoYXIgKnA1NF9yZl9jaGlwc1tdID0geyBcXFwiSU5WQUxJRC0wXFxcIiwgXFxcIkR1ZXR0ZTNcXFwiLCBcXFwiRHVldHRlMlxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUxMS1cXHRcXFwiRnJpc2JlZVxcXCIsIFxcXCJYYm93XFxcIiwgXFxcIkxvbmdib3dcXFwiLCBcXFwiSU5WQUxJRC02XFxcIiwgXFxcIklOVkFMSUQtN1xcXCIgfTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTM6c3RhdGljIGludCBwNTRfcGFyc2VfcnNzaWNhbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUxNC1cXHRcXHRcXHQgICAgIHU4ICpkYXRhLCBpbnQgbGVuLCB1MTYgdHlwZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTE1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTE2OlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTc6XFx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTE4LVxcdHNpemVfdCBkYl9sZW4sIGVudHJpZXM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTg1LVxcdC8qIHNvcnQgdGhlIGxpc3QgYnkgY2hhbm5lbCBmcmVxdWVuY3kgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTg2OlxcdHNvcnQoZW50cnksIGVudHJpZXMsIHNpemVvZigqZW50cnkpLCBwNTRfY29tcGFyZV9yc3NpY2hhbiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01OTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYwMDpzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnA1NF9yc3NpX2ZpbmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIGNvbnN0IHUxNiBmcmVxKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MDEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo2MDI6XFx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjAzLVxcdGludCBpLCBmb3VuZCA9IC0xO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYwNS1cXHRpZiAoIXByaXYtXFx1MDAzZXJzc2lfZGIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYwNjpcXHRcXHRyZXR1cm4gXFx1MDAyNnA1NF9yc3NpX2RlZmF1bHQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYyODpcXHRyZXR1cm4gZm91bmQgXFx1MDAzYyAwID8gXFx1MDAyNnA1NF9yc3NpX2RlZmF1bHQgOiBcXHUwMDI2ZW50cnlbZm91bmRdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MjktfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYzMTpzdGF0aWMgdm9pZCBwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjMyLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo2NjA6c3RhdGljIGludCBwNTRfY29udmVydF9vdXRwdXRfbGltaXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjYxLVxcdFxcdFxcdFxcdCAgICAgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTY2Mi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjY2MzpcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjY0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTY5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Njk4OnN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02OTktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCB0b3RhbF9sZW4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcwMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcwMTpcXHRzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqZHN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MDItXFx0c2l6ZV90IHBheWxvYWRfbGVuLCBlbnRyaWVzLCBlbnRyeV9zaXplLCBvZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3MjU6aW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcyNzpcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzI4LVxcdHN0cnVjdCBlZXByb21fcGRhX3dyYXAgKndyYXA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzU3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3NTg6XFx0XFx0XFx0ZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LVxcdTAwM2VkYXRhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGF0YV9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc3Mi1cXHRcXHRcXHRjYXNlIDA6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc3MzpcXHRcXHRcXHRcXHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc3NC1cXHRcXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzc1LVxcdFxcdFxcdGNhc2UgMTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Nzc2OlxcdFxcdFxcdFxcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzc3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc5OS1cXHRcXHRjYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgwMDpcXHRcXHRcXHRwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KGRldiwgZW50cnktXFx1MDAzZWRhdGEsIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODAxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgxOC1cXHRcXHRjYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0VYVEVOREVEOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4MTk6XFx0XFx0XFx0ZXJyID0gcDU0X3BhcnNlX3Jzc2ljYWwoZGV2LCBlbnRyeS1cXHUwMDNlZGF0YSwgZGF0YV9sZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgyMC1cXHRcXHRcXHRcXHRcXHRcXHRsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNlY29kZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODMzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXJzc2lfZGIgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODM0LVxcdFxcdFxcdGlmICghcHJpdi1cXHUwMDNlcnNzaV9kYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NDgtXFx0XFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg0OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VvdXRwdXRfbGltaXQgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODUwLVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NTUtXFx0XFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg1NjpcXHRcXHRcXHRwcml2LVxcdTAwM2VjdXJ2ZV9kYXRhID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1Ny1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4OTM6XFx0ZXJyID0gcDU0X2dlbmVyYXRlX2NoYW5uZWxfbGlzdHMoZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODk0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODk3LVxcdGlmIChwcml2LVxcdTAwM2VyeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9YQk9XKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4OTg6XFx0XFx0cDU0X2luaXRfeGJvd19zeW50aChwcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODk5LVxcdGlmICghKHN5bnRoIFxcdTAwMjYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5MTk6XFx0cHJpdi1cXHUwMDNlY3VyX3Jzc2kgPSBcXHUwMDI2cDU0X3Jzc2lfZGVmYXVsdDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTIwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkyMi1cXHRcXHQgICBkZXYtXFx1MDAzZXdpcGh5LVxcdTAwM2VwZXJtX2FkZHIsIHByaXYtXFx1MDAzZXZlcnNpb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjkyMzpcXHRcXHQgICBwNTRfcmZfY2hpcHNbcHJpdi1cXHUwMDNlcnhod10pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05MjQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQxLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTQyOkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk0NDppbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQ1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTQ2OlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NDctXFx0c2l6ZV90IGVlcHJvbV9zaXplID0gMHgyMDIwLCBvZmZzZXQgPSAwLCBibG9ja3NpemUsIG1heGJsb2Nrc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NjItXFx0XFx0YmxvY2tzaXplID0gbWluKGVlcHJvbV9zaXplLCBtYXhibG9ja3NpemUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5NjM6XFx0XFx0cmV0ID0gcDU0X2Rvd25sb2FkX2VlcHJvbShwcml2LCBlZXByb20gKyBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk2NC1cXHRcXHRcXHRcXHRcXHQgIG9mZnNldCwgYmxvY2tzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk3MjpcXHRyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgZWVwcm9tLCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzMtZnJlZTpcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzYtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5Nzc6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlYWRfZWVwcm9tKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaD0zMD1zdHJ1Y3QgZWVwcm9tX3BkYV93cmFwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaC0zNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmg6Mzg6c3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmgtMzktXFx0X19sZTE2IGlxX3BhcmFtWzRdO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oPTQyPXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTQzLVxcdF9fbGUxNiBmcmVxO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaDo0NDpcXHRzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgcGFyYW1zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaC00NS19IF9fcGFja2VkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjIzOiNpbmNsdWRlIFxcXCJwNTQuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI0LSNpbmNsdWRlIFxcXCJlZXByb20uaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzppbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI5OlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzAtXFx0c3RydWN0IGV4cF9pZiAqZXhwX2lmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02Mi1cXHRcXHRcXHRcXHR3aXBoeV9pbmZvKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02NC1cXHRcXHRcXHRcXHRcXHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExMS1cXHRcXHRcXHRtYXhsZW4gPSBwcml2LVxcdTAwM2V0eF9oZHJfbGVuICsgLyogVVNCIGRldmljZXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjExMjpcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBwNTRfcnhfZGF0YSkgK1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTEzLVxcdFxcdFxcdFxcdCA0ICsgLyogcnggYWxpZ25tZW50ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNS1cXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnhfbXR1IFxcdTAwM2UgbWF4bGVuIFxcdTAwMjZcXHUwMDI2IFBBR0VfU0laRSA9PSA0MDk2KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMTY6XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwicDU0OiByeF9tdHUgcmVkdWNlZCBmcm9tICVkIFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNy1cXHRcXHRcXHRcXHQgICAgICAgXFxcInRvICVkXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VyeF9tdHUsIG1heGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTE1MC1cXHRcXHR3aXBoeV9pbmZvKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjE1MTpcXHRcXHRcXHQgICBcXFwieW91IGFyZSB1c2luZyBhbiBvYnNvbGV0ZSBmaXJtd2FyZS4gdmlzaXQgaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWwgYW5kIGdyYWIgb25lIGZvciBcXFxcXFxcImtlcm5lbCBcXHUwMDNlPSAyLjYuMjhcXFxcXFxcIi4uLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xOTgtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTk5OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9maXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMDE6c3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgaGRyX2ZsYWdzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAyLVxcdFxcdFxcdFxcdCAgICAgdTE2IHBheWxvYWRfbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDMte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjA0OlxcdHN0cnVjdCBwNTRfaGRyICpoZHI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDUtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjI3OmludCBwNTRfZG93bmxvYWRfZWVwcm9tKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB2b2lkICpidWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMjgtXFx0XFx0XFx0dTE2IG9mZnNldCwgdTE2IGxlbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIyOS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMzA6XFx0c3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIzMS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNDE6XFx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgZWVwcm9tX2hkcl9zaXplICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI0Mi1cXHRcXHRcXHQgICAgbGVuLCBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjYyOlxcdHA1NF90eChwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzc6aW50IHA1NF91cGRhdGVfYmVhY29uX3RpbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IGFpZCwgYm9vbCBzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNzgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjc5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyODA6XFx0c3RydWN0IHA1NF90aW0gKnRpbTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI4MjpcXHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnRpbSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yODMtXFx0XFx0XFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjg5LVxcdHRpbS1cXHUwMDNlZW50cnlbMF0gPSBjcHVfdG9fbGUxNihzZXQgPyAoYWlkIHwgMHg4MDAwKSA6IGFpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTA6XFx0cDU0X3R4KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI5NDppbnQgcDU0X3N0YV91bmxvY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4ICphZGRyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjk1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI5Ni1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mjk3OlxcdHN0cnVjdCBwNTRfc3RhX3VubG9jayAqc3RhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mjk5OlxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc3RhKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwMC1cXHRcXHRcXHQgICAgUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwNS1cXHRtZW1jcHkoc3RhLVxcdTAwM2VhZGRyLCBhZGRyLCBFVEhfQUxFTik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMDY6XFx0cDU0X3R4KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMDctXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMxMDppbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxMS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTItXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMxMzpcXHRzdHJ1Y3QgcDU0X3R4Y2FuY2VsICpjYW5jZWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTQtXFx0dTMyIF9yZXFfaWQgPSBsZTMyX3RvX2NwdShyZXFfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMTk6XFx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpjYW5jZWwpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzIwLVxcdFxcdFxcdCAgICBQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzI1LVxcdGNhbmNlbC1cXHUwMDNlcmVxX2lkID0gcmVxX2lkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzI2OlxcdHA1NF90eChwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzI3LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMzA6aW50IHA1NF9zZXR1cF9tYWMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMzEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzMyLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMzM6XFx0c3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM0LVxcdHUxNiBtb2RlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzM2OlxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM3LVxcdFxcdFxcdCAgICBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDAwLVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwMTpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwMi1cXHRwcml2LVxcdTAwM2VwaHlfaWRsZSA9IG1vZGUgPT0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDA2OmludCBwNTRfc2NhbihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IG1vZGUsIHUxNiBkd2VsbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwNy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MDgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwOTpcXHRzdHJ1Y3QgcDU0X2hkciAqaGRyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDEwOlxcdHN0cnVjdCBwNTRfc2Nhbl9oZWFkICpoZWFkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDExOlxcdHN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMjpcXHR1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uICpib2R5O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDEzOlxcdHN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgKnJhdGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MTQtXFx0c3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqcnNzaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxNTpcXHRzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnJzc2lfZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQxNi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDIwOlxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqaGVhZCkgK1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDIxLVxcdFxcdFxcdCAgICAyICsgc2l6ZW9mKCppcV9hdXRvY2FsKSArIHNpemVvZigqYm9keSkgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00NDMtXFx0XFx0bWVtY3B5KGlxX2F1dG9jYWwsIFxcdTAwMjZwcml2LVxcdTAwM2VpcV9hdXRvY2FsW2ldLnBhcmFtcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQ0NDpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDQ1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTYtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQ5NzpcXHRcXHRcXHRzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9IFxcdTAwMjZib2R5LVxcdTAwM2Vub3JtYWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTgtXFx0XFx0XFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTA0LVxcdFxcdFxcdG1lbWNweShjaGFuLVxcdTAwM2VjdXJ2ZV9kYXRhLCBlbnRyeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjUwNTpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUwNi1cXHRcXHRcXHQgICAgICAgbWluKCh1OCk4LCBjdXJ2ZV9kYXRhLVxcdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTIwLVxcdHJzc2kgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1MjE6XFx0cnNzaV9kYXRhID0gcDU0X3Jzc2lfZmluZChwcml2LCBsZTE2X3RvX2NwdShmcmVxKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MjItXFx0cnNzaS1cXHUwMDNlbXVsID0gY3B1X3RvX2xlMTYocnNzaV9kYXRhLVxcdTAwM2VtdWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Mzg6XFx0aGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi1cXHUwMDNlZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUzOS1cXHRoZHItXFx1MDAzZWxlbiA9IGNwdV90b19sZTE2KHNrYi1cXHUwMDNlbGVuIC0gc2l6ZW9mKCpoZHIpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU0MTpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU0Mi1cXHRwcml2LVxcdTAwM2VjdXJfcnNzaSA9IHJzc2lfZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTU0OmludCBwNTRfc2V0X2xlZHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NTUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTU2LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NTc6XFx0c3RydWN0IHA1NF9sZWQgKmxlZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU1OTpcXHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NjAtXFx0XFx0XFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfTEVELCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTY4LVxcdGxlZC1cXHUwMDNlZGVsYXlbMV0gPSBjcHVfdG9fbGUxNigwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU2OTpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU3MC1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTcyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTczOmludCBwNTRfc2V0X2VkY2Yoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTc1LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NzY6XFx0c3RydWN0IHA1NF9lZGNmICplZGNmO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTc3LVxcdHU4IHJ0ZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU3OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU3OTpcXHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTgwLVxcdFxcdFxcdCAgICBQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsIEdGUF9BVE9NSUMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MDUtXFx0bWVtY3B5KGVkY2YtXFx1MDAzZXF1ZXVlLCBwcml2LVxcdTAwM2Vxb3NfcGFyYW1zLCBzaXplb2YoZWRjZi1cXHUwMDNlcXVldWUpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYwNjpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTYwNy1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NjEwOmludCBwNTRfc2V0X3BzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjExLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTYxMi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NjEzOlxcdHN0cnVjdCBwNTRfcHNtICpwc207XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MTQtXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTYyMy1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MTcuODQxNjcxNTM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1MDA5NTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIEZpcm13YXJlIFBhcnNpbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgZmlybXdhcmUgaXNzdWUsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgY29udGV4dC4gTGV0J3Mgc2VlLi4uIHRoZSBgcDU0X3BhcnNlX2Zpcm13YXJlYCBmdW5jdGlvbiBpcyBjbGVhcmx5IGltcG9ydGFudCBoZXJlLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJ3MgY2FsbGluZyBpdDsgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgdG9vbHMgZm9yIHRoaXMsIG9mIGNvdXJzZSwgYmVjYXVzZSBtYW51YWwgc2Nhbm5pbmcgaXMganVzdCBpbmVmZmljaWVudC4gXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgb2J2aW91cyBtb2R1bGVzIHRoYXQgd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gdGhpcyBhcmUgdGhlIGBwNTR1c2JgLCBgcDU0cGNpYCwgYW5kIGBwNTRzcGlgIGRyaXZlcnMgLSB0aGV5J3JlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggZmlybXdhcmUgbG9hZGluZyBpbiBhIHdpcmVsZXNzIGNvbnRleHQuXG5cblJpZ2h0LiBUaW1lIHRvIGZpcmUgdXAgbXkgdHJ1c3R5IGdyZXAgYW5kIGZpbmQgZXZlcnkgc2luZ2xlIGluc3RhbmNlIHdoZXJlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaW5mZXIgdGhlIHBvc3NpYmxlIGZhaWx1cmUgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IHRoZSBjYXVzZSBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MjAuNzkxNzY5MjUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTY2NjI4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0X3BhcnNlX2Zpcm13YXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzppbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTk4LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjE5OTpFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZmlybXdhcmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTI2OD12b2lkIHA1NF9mcmVlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoyNjk6aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNzAtaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTQ4PXN0YXRpYyBpbnQgcDU0cF91cGxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYzo3OTpcXHRlcnIgPSBwNTRfcGFyc2VfZmlybXdhcmUoZGV2LCBwcml2LVxcdTAwM2VmaXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTgwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM9MTQwPXN0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTE1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MTUzOlxcdHJldCA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtXFx1MDAzZWZpcm13YXJlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTU0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz04Njc9c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTg3MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6ODcyOlxcdHJldCA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtXFx1MDAzZWZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODczLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjIyLjQ4ODQ0MTc3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjEyMjIwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTaXR1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgcDU0dXNiYCBzaXR1YXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gcGlucG9pbnQgYHA1NHVfc3RhcnRfb3BzYCB3aXRoaW4gYHA1NHVzYi5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gVGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZXZlbiAqcmVhY2gqIGBwNTR1c2JgIHZpYSBVU0IgZnV6emluZy4gVGhhdCBtZWFucyBzZWVpbmcgaWYgSSBjYW4gdHJpZ2dlciBpdCB3aXRoIFJhdyBHYWRnZXQgb3IgVVNCIGVtdWxhdGlvbiB0ZWNobmlxdWVzLiBFc3NlbnRpYWxseSwgY2FuIEkgZ2V0IGNvZGUgZXhlY3V0aW9uIGluIHRoaXMgbW9kdWxlIHZpYSBVU0IgbWFuaXB1bGF0aW9uPyBTbywgaXQncyBiYWNrIHRvIGBwNTR1c2IuY2AgdG8gc2VlIGlmIHRoaXMgaXMgcG9zc2libGUuIEl0J3MgdGltZSB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc1OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjI0Ljg0OTY2NjU1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHRrZnJlZShidWYpO1xcbiA4NTE6XFx0XFx0cmV0dXJuIGVycjtcXG4gODUyOlxcdH1cXG4gODUzOlxcdFxcbiA4NTQ6XFx0c3RhdGljIGludCBwNTRfZmluZF90eXBlKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXFxuIDg1NTpcXHR7XFxuIDg1NjpcXHRcXHRpbnQgaTtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fTlVNX1A1NFVfSFdUWVBFUzsgaSsrKVxcbiA4NTk6XFx0XFx0XFx0aWYgKHA1NHVfZndsaXN0W2ldLnR5cGUgPT0gcHJpdi1cXHUwMDNlaHdfdHlwZSlcXG4gODYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NjE6XFx0XFx0aWYgKGkgPT0gX19OVU1fUDU0VV9IV1RZUEVTKVxcbiA4NjI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRyZXR1cm4gaTtcXG4gODY1OlxcdH1cXG4gODY2OlxcdFxcbiA4Njc6XFx0c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxcbiA4Njg6XFx0e1xcbiA4Njk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcHJpdi1cXHUwMDNlY29tbW9uLmh3O1xcbiA4NzA6XFx0XFx0aW50IHJldDtcXG4gODcxOlxcdFxcbiA4NzI6XFx0XFx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cXHUwMDNlZncpO1xcbiA4NzM6XFx0XFx0aWYgKHJldClcXG4gODc0OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0cmV0ID0gcDU0X2ZpbmRfdHlwZShwcml2KTtcXG4gODc3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4Nzg6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY29tbW9uLmZ3X2ludGVyZmFjZSAhPSBwNTR1X2Z3bGlzdFtyZXRdLmludGYpIHtcXG4gODgxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgXFxcIndyb25nIGZpcm13YXJlLCBwbGVhc2UgZ2V0IFxcXCJcXG4gODgyOlxcdFxcdFxcdFxcdFxcXCJhIGZpcm13YXJlIGZvciBcXFxcXFxcIiVzXFxcXFxcXCIgYW5kIHRyeSBhZ2Fpbi5cXFxcblxcXCIsXFxuIDg4MzpcXHRcXHRcXHRcXHRwNTR1X2Z3bGlzdFtyZXRdLmh3KTtcXG4gODg0OlxcdFxcdFxcdHJldCA9IC1FTk9ERVY7XFxuIDg4NTpcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIDg4NjpcXHRcXHR9XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXVwbG9hZF9mdyhkZXYpO1xcbiA4ODk6XFx0XFx0aWYgKHJldClcXG4gODkwOlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0cmV0ID0gcDU0dV9vcGVuKGRldik7XFxuIDg5MzpcXHRcXHRpZiAocmV0KVxcbiA4OTQ6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRyZXQgPSBwNTRfcmVhZF9lZXByb20oZGV2KTtcXG4gODk3OlxcdFxcdGlmIChyZXQpXFxuIDg5ODpcXHRcXHRcXHRnb3RvIGVycl9zdG9wO1xcbiA4OTk6XFx0XFxuIDkwMDpcXHRcXHRwNTR1X3N0b3AoZGV2KTtcXG4gOTAxOlxcdFxcbiA5MDI6XFx0XFx0cmV0ID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYpO1xcbiA5MDM6XFx0XFx0aWYgKHJldClcXG4gOTA0OlxcdFxcdFxcdGdvdG8gZXJyX3N0b3A7XFxuIDkwNTpcXHRcXG4gOTA2OlxcdFxcdHJldHVybiAwO1xcbiA5MDc6XFx0XFxuIDkwODpcXHRlcnJfc3RvcDpcXG4gOTA5OlxcdFxcdHA1NHVfc3RvcChkZXYpO1xcbiA5MTA6XFx0XFxuIDkxMTpcXHRlcnJfb3V0OlxcbiA5MTI6XFx0XFx0LypcXG4gOTEzOlxcdFxcdCAqIHA1NHVfZGlzY29ubmVjdCB3aWxsIGRvIHRoZSByZXN0IG9mIHRoZVxcbiA5MTQ6XFx0XFx0ICogY2xlYW51cFxcbiA5MTU6XFx0XFx0ICovXFxuIDkxNjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MTc6XFx0fVxcbiA5MTg6XFx0XFxuIDkxOTpcXHRzdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG4gOTIwOlxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqY29udGV4dClcXG4gOTIxOlxcdHtcXG4gOTIyOlxcdFxcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBjb250ZXh0O1xcbiA5MjM6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwcml2LVxcdTAwM2V1ZGV2O1xcbiA5MjQ6XFx0XFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSBwcml2LVxcdTAwM2VpbnRmO1xcbiA5MjU6XFx0XFx0aW50IGVycjtcXG4gOTI2OlxcdFxcbiA5Mjc6XFx0XFx0aWYgKGZpcm13YXJlKSB7XFxuIDkyODpcXHRcXHRcXHRwcml2LVxcdTAwM2VmdyA9IGZpcm13YXJlO1xcbiA5Mjk6XFx0XFx0XFx0ZXJyID0gcDU0dV9zdGFydF9vcHMocHJpdik7XFxuIDkzMDpcXHRcXHR9IGVsc2Uge1xcbiA5MzE6XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4gOTMyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnVkZXYtXFx1MDAzZWRldiwgXFxcIkZpcm13YXJlIG5vdCBmb3VuZC5cXFxcblxcXCIpO1xcbiA5MzM6XFx0XFx0fVxcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2cHJpdi1cXHUwMDNlZndfd2FpdF9sb2FkKTtcXG4gOTM2OlxcdFxcdC8qXFxuIDkzNzpcXHRcXHQgKiBBdCB0aGlzIHBvaW50IHA1NHVfZGlzY29ubmVjdCBtYXkgaGF2ZSBhbHJlYWR5IGZyZWVkXFxuIDkzODpcXHRcXHQgKiB0aGUgXFxcInByaXZcXFwiIGNvbnRleHQuIERvIG5vdCB1c2UgaXQgYW55bW9yZSFcXG4gOTM5OlxcdFxcdCAqL1xcbiA5NDA6XFx0XFx0cHJpdiA9IE5VTEw7XFxuIDk0MTpcXHRcXG4gOTQyOlxcdFxcdGlmIChlcnIpIHtcXG4gOTQzOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZSAoJWQpXFxcXG5cXFwiLCBlcnIpO1xcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRcXHR1c2JfbG9ja19kZXZpY2UodWRldik7XFxuIDk0NjpcXHRcXHRcXHR1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKFxcdTAwMjZwNTR1X2RyaXZlciwgaW50Zik7XFxuIDk0NzpcXHRcXHRcXHR1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTtcXG4gOTQ4OlxcdFxcdH1cXG4gOTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODoyNC44NDk4OTU4NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc5NzgwMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGaXJtd2FyZSBMb2FkaW5nIGluIHRoZSBJbnRlclNpbCBwNTQgVVNCIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgaXMgdGhlIGNhbGxiYWNrIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdHJpZ2dlcmVkIHdoZW4gZmlybXdhcmUgaXMgbmVlZGVkIGVpdGhlciBhc3luY2hyb25vdXNseSBvciBhcyBhIGZhbGxiYWNrLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIEknbSBncmFwcGxpbmcgd2l0aCBpcyBob3cgZmlybXdhcmUgaW50ZXJhY3RzIHdpdGggU3l6a2FsbGVyIGluIHRoaXMgY29udGV4dC4gQ2FuIFN5emthbGxlciBkaXJlY3RseSBsb2FkIG9yIGZ1enogZmlybXdhcmU/IEl0IHN1cHBvcnRzIFVTQiBmdXp6aW5nIHRocm91Z2ggYHN5el91c2JfY29ubmVjdGAgb3IgcmF3LWdhZGdldCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQsIGJ1dCBkb2VzIGl0ICpwcm92aWRlKiB0aGUgZmlybXdhcmUgaXRzZWxmLCBvciBkb2VzIGl0IHJlbHkgb24gdXNlci1zcGFjZSBpbmplY3Rpb24gdGhyb3VnaCB0aGUgc3lzZnMvZmlybXdhcmUgbG9hZGVyIG9yIGJ1aWx0LWluIGZpcm13YXJlIG1lY2hhbmlzbXM/IFRoYXQncyB0aGUgY3J1eC5cblxuQWghIFNlY3Rpb24gMyBpbiB0aGUgZG9jdW1lbnQgaXMgcHJvbWlzaW5nOiBcIkRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKVwiIFRoaXMgbGlzdCBpbmNsdWRlcyBVU0IgZ2FkZ2V0LCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQuIEFuZCwgdGhlIEludGVyU2lsIHA1NCBVU0IgZHJpdmVyLCBgcDU0dXNiYCwgaXMgaW5kZWVkIGEgKlVTQiogZHJpdmVyLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gZmluZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgcDU0dXNiYCdzIHByb2JlIGZ1bmN0aW9uIHRvIGdhaW4gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODoyOC4yMjk2NzkwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTI0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0dV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTk1Mz1zdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTgzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5ODQ6c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05ODUtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTExMjQ9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHA1NHVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjYtXFx0LmlkX3RhYmxlID0gcDU0dV90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6MTEyNzpcXHQucHJvYmUgPSBwNTR1X3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMTI4LVxcdC5kaXNjb25uZWN0ID0gcDU0dV9kaXNjb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODoyOC4yNzU4ODEyODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwNzU0MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFBhcnNpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBJbnRlcnNpbCB3aXJlbGVzcyBkcml2ZXIgaGFuZGxlcyBmaXJtd2FyZSBwYXJzaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBwNTRfcGFyc2VfZmlybXdhcmVgIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIGl0IHNob3VsZCBiZSB0aGUgY29yZSBvZiB3aGF0IEknbSBsb29raW5nIGZvci4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHdob2xlIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIG1ldGhvZCBzaWduYXR1cmU7IHRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ3Jhc3AgdGhlIGVudGlyZSBmbG93IGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRoZSBiaWcgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBwaWNraW5nIGFwYXJ0IHRoZSBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTU2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MzAuNzgzNDI2Mzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdCNpbmNsdWRlIFxcXCJsbWFjLmhcXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgZXhwX2lmICpleHBfaWY7XFxuICAzMTpcXHRcXHRzdHJ1Y3QgYm9vdHJlYyAqYm9vdHJlYztcXG4gIDMyOlxcdFxcdHUzMiAqZGF0YSA9ICh1MzIgKilmdy1cXHUwMDNlZGF0YTtcXG4gIDMzOlxcdFxcdHUzMiAqZW5kX2RhdGEgPSAodTMyICopZnctXFx1MDAzZWRhdGEgKyAoZnctXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgMik7XFxuICAzNDpcXHRcXHR1OCAqZndfdmVyc2lvbiA9IE5VTEw7XFxuICAzNTpcXHRcXHRzaXplX3QgbGVuO1xcbiAgMzY6XFx0XFx0aW50IGk7XFxuICAzNzpcXHRcXHRpbnQgbWF4bGVuO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnhfc3RhcnQpXFxuICA0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0d2hpbGUgKGRhdGEgXFx1MDAzYyBlbmRfZGF0YSBcXHUwMDI2XFx1MDAyNiAqZGF0YSlcXG4gIDQzOlxcdFxcdFxcdGRhdGErKztcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0d2hpbGUgKGRhdGEgXFx1MDAzYyBlbmRfZGF0YSBcXHUwMDI2XFx1MDAyNiAhKmRhdGEpXFxuICA0NjpcXHRcXHRcXHRkYXRhKys7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdGJvb3RyZWMgPSAoc3RydWN0IGJvb3RyZWMgKikgZGF0YTtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0d2hpbGUgKGJvb3RyZWMtXFx1MDAzZWRhdGEgXFx1MDAzYz0gZW5kX2RhdGEgXFx1MDAyNlxcdTAwMjYgKGJvb3RyZWMtXFx1MDAzZWRhdGEgK1xcbiAgNTE6XFx0XFx0ICAgICAgIChsZW4gPSBsZTMyX3RvX2NwdShib290cmVjLVxcdTAwM2VsZW4pKSkgXFx1MDAzYz0gZW5kX2RhdGEpIHtcXG4gIDUyOlxcdFxcdFxcdHUzMiBjb2RlID0gbGUzMl90b19jcHUoYm9vdHJlYy1cXHUwMDNlY29kZSk7XFxuICA1MzpcXHRcXHRcXHRzd2l0Y2ggKGNvZGUpIHtcXG4gIDU0OlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9DT01QT05FTlRfSUQ6XFxuICA1NTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vmd19pbnRlcmZhY2UgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKVxcbiAgNTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib290cmVjLVxcdTAwM2VkYXRhKTtcXG4gIDU3OlxcdFxcdFxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlZndfaW50ZXJmYWNlKSB7XFxuICA1ODpcXHRcXHRcXHRcXHRjYXNlIEZXX0xNODY6XFxuICA1OTpcXHRcXHRcXHRcXHRjYXNlIEZXX0xNMjA6XFxuICA2MDpcXHRcXHRcXHRcXHRjYXNlIEZXX0xNODc6IHtcXG4gIDYxOlxcdFxcdFxcdFxcdFxcdGNoYXIgKmlmdHlwZSA9IChjaGFyICopYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdHdpcGh5X2luZm8ocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LFxcbiAgNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcInA1NCBkZXRlY3RlZCBhIExNJWMlYyBmaXJtd2FyZVxcXFxuXFxcIixcXG4gIDY0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGlmdHlwZVsyXSwgaWZ0eXBlWzNdKTtcXG4gIDY1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNjY6XFx0XFx0XFx0XFx0XFx0fVxcbiAgNjc6XFx0XFx0XFx0XFx0Y2FzZSBGV19GTUFDOlxcbiAgNjg6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG4gIDY5OlxcdFxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuICA3MDpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJ1bnN1cHBvcnRlZCBmaXJtd2FyZVxcXFxuXFxcIik7XFxuICA3MTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gIDcyOlxcdFxcdFxcdFxcdH1cXG4gIDczOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNzQ6XFx0XFx0XFx0Y2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OOlxcbiAgNzU6XFx0XFx0XFx0XFx0LyogMjQgYnl0ZXMgc2hvdWxkIGJlIGVub3VnaCBmb3IgYWxsIGZpcm13YXJlcyAqL1xcbiAgNzY6XFx0XFx0XFx0XFx0aWYgKHN0cm5sZW4oKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy1cXHUwMDNlZGF0YSwgMjQpIFxcdTAwM2MgMjQpXFxuICA3NzpcXHRcXHRcXHRcXHRcXHRmd192ZXJzaW9uID0gKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gIDc4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNzk6XFx0XFx0XFx0Y2FzZSBCUl9DT0RFX0RFU0NSOiB7XFxuICA4MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID1cXG4gIDgxOlxcdFxcdFxcdFxcdFxcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gIDgyOlxcdFxcdFxcdFxcdHUzMiByeF9zdGFydCwgcnhfZW5kO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKHN0cnVjdCBib290cmVjX2Rlc2MsXFxuICA4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICByeF9rZXljYWNoZV9zaXplKSxcXG4gIDg2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXFx1MDAzZWRhdGEpKSkge1xcbiAgODc6XFx0XFx0XFx0XFx0XFx0d2lwaHlfZXJyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcImZpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxcXG5cXFwiKTtcXG4gIDg5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgOTA6XFx0XFx0XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRcXHRcXHRyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X3N0YXJ0KTtcXG4gIDkzOlxcdFxcdFxcdFxcdHJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X2VuZCk7XFxuICA5NDpcXHRcXHRcXHRcXHRpZiAocnhfZW5kIFxcdTAwM2MgMHgzNTAwIHx8IHJ4X2VuZCAtIDB4MzUwMCBcXHUwMDNjPSByeF9zdGFydCkge1xcbiAgOTU6XFx0XFx0XFx0XFx0XFx0d2lwaHlfZXJyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcImZpcm13YXJlIGRlc2NyaXB0b3IgaGFzIGludmFsaWQgUlggcmFuZ2VcXFxcblxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA5ODpcXHRcXHRcXHRcXHR9XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X3N0YXJ0ID0gcnhfc3RhcnQ7XFxuIDEwMTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7XFxuIDEwMjpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VoZWFkcm9vbSA9IGRlc2MtXFx1MDAzZWhlYWRyb29tO1xcbiAxMDM6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNldGFpbHJvb20gPSBkZXNjLVxcdTAwM2V0YWlscm9vbTtcXG4gMTA0OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXFx1MDAzZXByaXZhY3lfY2FwcztcXG4gMTA1OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X2tleWNhY2hlX3NpemUgPSBkZXNjLVxcdTAwM2VyeF9rZXljYWNoZV9zaXplO1xcbiAxMDY6XFx0XFx0XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGJvb3RyZWMtXFx1MDAzZWxlbikgPT0gMTEpXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9tdHUgPSBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VyeF9tdHUpO1xcbiAxMDg6XFx0XFx0XFx0XFx0ZWxzZVxcbiAxMDk6XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfbXR1ID0gKHNpemVfdClcXG4gMTEwOlxcdFxcdFxcdFxcdFxcdFxcdDB4NjIwIC0gcHJpdi1cXHUwMDNldHhfaGRyX2xlbjtcXG4gMTExOlxcdFxcdFxcdFxcdG1heGxlbiA9IHByaXYtXFx1MDAzZXR4X2hkcl9sZW4gKyAvKiBVU0IgZGV2aWNlcyAqL1xcbiAxMTI6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgcDU0X3J4X2RhdGEpICtcXG4gMTEzOlxcdFxcdFxcdFxcdFxcdCA0ICsgLyogcnggYWxpZ25tZW50ICovXFxuIDExNDpcXHRcXHRcXHRcXHRcXHQgSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDtcXG4gMTE1OlxcdFxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VyeF9tdHUgXFx1MDAzZSBtYXhsZW4gXFx1MDAyNlxcdTAwMjYgUEFHRV9TSVpFID09IDQwOTYpIHtcXG4gMTE2OlxcdFxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0lORk8gXFxcInA1NDogcnhfbXR1IHJlZHVjZWQgZnJvbSAlZCBcXFwiXFxuIDExNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInRvICVkXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VyeF9tdHUsIG1heGxlbik7XFxuIDExODpcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9tdHUgPSBtYXhsZW47XFxuIDExOTpcXHRcXHRcXHRcXHR9XFxuIDEyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTIxOlxcdFxcdFxcdFxcdH1cXG4gMTIyOlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9FWFBPU0VEX0lGOlxcbiAxMjM6XFx0XFx0XFx0XFx0ZXhwX2lmID0gKHN0cnVjdCBleHBfaWYgKikgYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gMTI0OlxcdFxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAobGVuICogc2l6ZW9mKCpleHBfaWYpIC8gNCk7IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MzAuNzgzNTIwOTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0Mzk5NTUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBQYXJzaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIGNoYW5nZWQgaGVyZSwgYW5kIHdoeT9cIiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gaG93IHRoZSBmaXJtd2FyZSdzIGRlc2NyaXB0b3IgaXMgcGFyc2VkLCBzcGVjaWZpY2FsbHkgdGhlIGBCUl9DT0RFX0RFU0NSYCBjYXNlLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBgcnhfc3RhcnRgIGFuZCBgcnhfZW5kYCBhZGRyZXNzZXMsIHdoaWNoIGFyZSBjcnVjaWFsIGZvciB0aGUgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHRoZSByZWNlaXZlci4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgZGlyZWN0IGFzc2lnbm1lbnQgYW5kIGEgaGFyZGNvZGVkIHN1YnRyYWN0aW9uIG9mIGAweDM1MDBgLiBUaGF0IHN1YnRyYWN0aW9uIGxvb2tzIGEgYml0IHN1c3BlY3QgLSBhIG1hZ2ljIG51bWJlciwgYWx3YXlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMgZG93biB0aGUgbGluZSBpZiB0aGUgZmlybXdhcmUgY2hhbmdlcy5cblxuQWgsIEkgc2VlIGl0IG5vdy4gVGhlIHBhdGNoIGludHJvZHVjZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzLiBGaXJzdCwgaXQgZW5zdXJlcyB0aGF0IHRoZSBmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyByZWFkcywgYSBjb21tb24gc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBhbmQgY3Jhc2hlcywgcGFydGljdWxhcmx5IGluIGxvdy1sZXZlbCBkcml2ZXJzIGxpa2UgdGhpcy4gSXQgdGhlbiBjaGVja3MgaWYgdGhlIGNhbGN1bGF0ZWQgYHJ4X2VuZGAgaXMgYSB2YWxpZCByYW5nZSwgZW5zdXJpbmcgaXQncyBub3QgbGVzcyB0aGFuIGEgYmFzZSB2YWx1ZSBhbmQgdGhhdCB0aGUgc3VidHJhY3Rpb24gZnJvbSBgMHgzNTAwYCBkb2Vzbid0IHJlc3VsdCBpbiBhbiBpbnZhbGlkIHJhbmdlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGByeF9zdGFydGAuIFRoaXMgbWFrZXMgdGhlIGNvZGUgbXVjaCBtb3JlIHJvYnVzdCBhbmQgc2FmZXIuIElmIHRoZSBjaGVja3MgZmFpbCwgdGhlIGNvZGUgbm93IHJldHVybnMgYW4gZXJyb3IgKGAtRUlOVkFMYCksIHdoaWNoIGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBpbiB0aGlzIHNpdHVhdGlvbi5cblxuU28sIHRoZSBrZXkgaW1wcm92ZW1lbnQgaGVyZSBpcyB0aGUgYWRkZWQgZXJyb3IgaGFuZGxpbmcgYW5kIHJhbmdlIHZhbGlkYXRpb24uIEJ5IHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgZmlybXdhcmUgZGVzY3JpcHRvciwgaXQgbWFrZXMgdGhlIGRyaXZlciBtb3JlIHJlc2lzdGFudCB0byBwb3RlbnRpYWxseSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzbHkgY3JhZnRlZCBmaXJtd2FyZS4gR29vZCB3b3JrLiBOb3csIGxldCdzIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIHA1NCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb25maWd1cmVkIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjM3LjIyMzQ3OTc0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFA1NF9DT01NT05cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBpcyBjb21tb24gY29kZSBmb3IgaXNsMzh4eC9zdGxjNDV4eCBiYXNlZCBtb2R1bGVzLlxcbiAgIDk6XFx0XFx0ICBUaGlzIG1vZHVsZSBkb2VzIG5vdGhpbmcgYnkgaXRzZWxmIC0gdGhlIFVTQi9QQ0kvU1BJIGZyb250LWVuZHNcXG4gIDEwOlxcdFxcdCAgYWxzbyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBhbnkgZGV2aWNlcy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBQNTRfVVNCXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBVU0Igc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgVVNCIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuICAyNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0dXNiLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgUDU0X1BDSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgUENJIHN1cHBvcnRcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgUENJXFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0kgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cXG4gIDM0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbW9zdCBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGVcXG4gIDM1OlxcdFxcdCAgZnVsbG1hYyBwcmlzbTU0IGRyaXZlciBwbHVzIG1hbnkgZGV2aWNlcyB3aGljaCBhcmUgbm90XFxuICAzNjpcXHRcXHQgIHN1cHBvcnRlZCBieSB0aGUgZnVsbG1hYyBkcml2ZXIvZmlybXdhcmUuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDM5OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRwY2kuXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBQNTRfU1BJXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBTUEkgKHN0bGM0NXh4KSBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFNQSV9NQVNURVJcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIHN0bGM0NTUwIG9yIHN0bGM0NTYwIGJhc2VkIHdpcmVsZXNzIGNoaXBzXFxuICA0ODpcXHRcXHQgIHN1Y2ggYXMgTm9raWEncyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRzcGkuXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBQNTRfU1BJX0RFRkFVTFRfRUVQUk9NXFxuICA1MzpcXHRcXHRib29sIFxcXCJJbmNsdWRlIGZhbGxiYWNrIEVFUFJPTSBibG9iXFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfU1BJXFxuICA1NTpcXHRcXHRkZWZhdWx0IG5cXG4gIDU2OlxcdFxcdGhlbHBcXG4gIDU3OlxcdFxcdCBVbmxpa2UgdGhlIFBDSSBvciBVU0IgZGV2aWNlcywgdGhlIFNQSSB2YXJpYW50cyBkb24ndCBoYXZlXFxuICA1ODpcXHRcXHQgYSBkZWRpY2F0ZWQgRUVQUk9NIGNoaXAgdG8gc3RvcmUgYWxsIGRldmljZSBzcGVjaWZpYyB2YWx1ZXNcXG4gIDU5OlxcdFxcdCBmb3IgY2FsaWJyYXRpb24sIGNvdW50cnkgYW5kIGludGVyZmFjZSBzZXR0aW5ncy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0IFRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gbG9hZCB0aGUgaW1hZ2UgXFxcIjM4MjYuZWVwcm9tXFxcIiwgaWYgdGhlXFxuICA2MjpcXHRcXHQgZmlsZSBpcyBwdXQgYXQgdGhlIHJpZ2h0IHBsYWNlLiAodXN1YWxseSAvbGliL2Zpcm13YXJlLilcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0IE9ubHkgaWYgdGhpcyByZXF1ZXN0IGZhaWxzLCB0aGlzIG9wdGlvbiB3aWxsIHByb3ZpZGUgYVxcbiAgNjU6XFx0XFx0IGJhY2t1cCBzZXQgb2YgZ2VuZXJpYyB2YWx1ZXMgdG8gZ2V0IHRoZSBkZXZpY2Ugd29ya2luZy5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYWJvdXQgNGsgdG8gcDU0c3BpLlxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgUDU0X0xFRFNcXG4gIDcwOlxcdFxcdGJvb2xcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9MRURTIFxcdTAwMjZcXHUwMDI2IChMRURTX0NMQVNTID0geSB8fCBMRURTX0NMQVNTID0gUDU0X0NPTU1PTilcXG4gIDcyOlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODozNy4yMjM1NjQwMzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg0OTcwNTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXMgZm9yIHA1NF9wYXJzZV9maXJtd2FyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBmdXp6aW5nIGBwNTRfcGFyc2VfZmlybXdhcmVgIGlzIGEgd29ydGh3aGlsZSBlbmRlYXZvci4gRmlyc3QsIHJlYWNoYWJpbGl0eS4gVGhlIGZ1bmN0aW9uLCBwYXJ0IG9mIHRoZSBgcDU0Y29tbW9uYCBkcml2ZXIsIGlzIGNhbGxlZCBieSBgcDU0dXNiYCwgd2hpY2ggaXMgYSBVU0Igd2lyZWxlc3MgZGV2aWNlIGRyaXZlci4gVVNCIGRldmljZXMgYXJlIHJlYWRpbHkgZnV6emVkIGJ5IHN5emthbGxlciB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb247IHRoYXQgaXMgZ3JlYXQgYmVjYXVzZSBpdCBpbXBsaWVzIGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuIFdoZW4gYSBzaW11bGF0ZWQgVVNCIGRldmljZSBtYXRjaGluZyB0aGUgYHA1NHVfdGFibGVgIElEIHRhYmxlIGlzIHBsdWdnZWQgaW4sIGBwNTR1X3Byb2JlYCBpcyBjYWxsZWQuIFRoYXQgcHJvYmUgZnVuY3Rpb24gcmVxdWVzdHMgZmlybXdhcmUgbG9hZGluZy4gVWx0aW1hdGVseSwgdGhlIHJlbGV2YW50IGNhbGxzdGFjayBpcyBgcDU0dV9wcm9iZWAgLVx1MDAzZSBgcDU0dV9sb2FkX2Zpcm13YXJlYCAtXHUwMDNlIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIC1cdTAwM2UgYHA1NHVfc3RhcnRfb3BzYCAtXHUwMDNlIGBwNTRfcGFyc2VfZmlybXdhcmVgLiBUaGUgcGF0aCBpcyB0aGVyZSwgYW5kIGl0IGlzIGFjY2Vzc2libGUhIFRoZSBwYXRjaGVkIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBhIGZpcm13YXJlIGJ1ZmZlciBuZWVkcyB0byBiZSBwYXJzZWQsIHdoaWNoIHNob3VsZCBiZSB0aGUgbm9ybWFsIGNhc2UgaW4gdGVzdGluZy9mdXp6aW5nIGVudmlyb25tZW50cy4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgYGRlc2MtXHUwMDNlcnhfc3RhcnRgIGFuZCBgZGVzYy1cdTAwM2VyeF9lbmRgLCBhcyB3ZWxsIGFzIGRlc2NyaXB0b3IgbGVuZ3RoIGNoZWNraW5nLCB3aXRoaW4gYHA1NF9wYXJzZV9maXJtd2FyZWAuXG5cbk5vdywgbGV0J3MgY29uc3VsdCB0aGUgcmVsZXZhbnQgZnV6emluZyBjcml0ZXJpYS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGZhbGxzIHVuZGVyIFwiRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzLFwiIHRoZSBVU0IgZHJpdmVyIGNlcnRhaW5seSBmaXRzIHRoYXQgZGVzY3JpcHRpb24uIFRoZSBuZXh0IGNydWNpYWwgcG9pbnQgaXMgdGhhdCB3aGVuIFdvcnRoRnV6emluZz10cnVlLCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZXh0cmFjdGVkIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXIuIFRoZXNlIHdvdWxkIGluY2x1ZGUgYHA1NF9wYXJzZV9maXJtd2FyZWAgaXRzZWxmIGFuZCBwb3RlbnRpYWxseSB0aGUgY2FsbCBjaGFpbiwgYHA1NHVfc3RhcnRfb3BzYCAvIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIC8gYHA1NHVfcHJvYmVgLlxuXG5JbXBvcnRhbnRseSwgYHA1NF9wYXJzZV9maXJtd2FyZWAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBgRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTtgLiBQZXJmZWN0OyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gc2VlaW5nIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAgYXJlIG5lZWRlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gYFA1NF9DT01NT05gIGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYFA1NF9VU0JgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFVTQmAsIGBQNTRfUENJYCBkZXBlbmRzIG9uIGBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBQQ0lgLCBhbmQgYFA1NF9TUElgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFNQSV9NQVNURVJgLiBObyBoaWRkZW4gZ290Y2hhcyB0aGVyZS5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXMgQyBjb2RlIHdpdGhpbiBhIGRyaXZlciwgc28gaXQgaXNuJ3QgYSBub24ta2VybmVsIG9yIG5vbi1leGVjdXRhYmxlIGNoYW5nZS4gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGlzbid0IGFuIGlzc3VlOyBgUDU0X1VTQmAgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uLiBGaW5hbGx5LCB0aGUgZXhlY3V0aW9uIHBhdGggaXMgcmVhY2hhYmxlIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHNvIHRoaXMgaXNuJ3QgdW5yZWFjaGFibGUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5JJ2xsIGZpbmFsaXplIHRoZSBGb2N1c1N5bWJvbHMgYXM6IGBwNTRfcGFyc2VfZmlybXdhcmVgLCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCwgYHA1NHVfc3RhcnRfb3BzYCwgYW5kIGBwNTR1X3Byb2JlYC4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuXG5cblNvLCB0aGUgY29uY2lzZSByZWFzb25pbmcgaXMgdGhpczogVGhlIHBhdGNoIGludHJvZHVjZXMgY3JpdGljYWwgdmFsaWRhdGlvbiBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGggYW5kIFJYIHJhbmdlIHNhbml0eSBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYC4gVGhpcyBmdW5jdGlvbiBpcyBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBmb3IgVVNCIFByaXNtNTQgd2lyZWxlc3MgZGV2aWNlcyAoYHA1NHVzYmApIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldCBmdXp6aW5nLiBGdXp6aW5nIHByb3ZpZGVzIGEgbWVhbnMgdG8gdmVyaWZ5IHRoYXQgZmlybXdhcmUgcGFyc2luZyBoYW5kbGVzIG1hbGZvcm1lZCBkZXNjcmlwdG9ycyBjb3JyZWN0bHkgd2l0aG91dCBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIHJlYWRzLCBvciBpbnZhbGlkIHN0YXRlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NDUuMDczMjcxNzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgxNDA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9wYXJzZV9maXJtd2FyZVwiLFxuICAgIFwicDU0dV9zdGFydF9vcHNcIixcbiAgICBcInA1NHVfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gYW5kIHNhbml0eSBjaGVja3MgZm9yIGZpcm13YXJlIGRlc2NyaXB0b3IgbGVuZ3RocyBhbmQgUlggcmFuZ2VzIGluIHA1NF9wYXJzZV9maXJtd2FyZSgpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIHA1NHVzYiBkcml2ZXIgdGhyb3VnaCBVU0IgZ2FkZ2V0L2RldmljZSBlbXVsYXRpb24gZnV6emluZyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZyBvbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9wYXJzZV9maXJtd2FyZVwiLFxuICAgIFwicDU0dV9zdGFydF9vcHNcIixcbiAgICBcInA1NHVfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gYW5kIHNhbml0eSBjaGVja3MgZm9yIGZpcm13YXJlIGRlc2NyaXB0b3IgbGVuZ3RocyBhbmQgUlggcmFuZ2VzIGluIHA1NF9wYXJzZV9maXJtd2FyZSgpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIHA1NHVzYiBkcml2ZXIgdGhyb3VnaCBVU0IgZ2FkZ2V0L2RldmljZSBlbXVsYXRpb24gZnV6emluZyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZyBvbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjQ1LjE1MDA5NDE5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzA2NDk1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODo0NS4xNTA2OTEwOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjAzMDA0ODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgcDU0X3BhcnNlX2Zpcm13YXJlKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGZpcm13YXJlIGJvb3QgcmVjb3JkcyAoYGxlbiBcXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFxcdTAwM2M9IHJ4X3N0YXJ0YCkuIFxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhbmQgaW50ZWdlciBhcml0aG1ldGljIGJ1Z3MsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcbmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG5AQCAtNzksOSArNzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xuIFx0XHRcdHN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPVxuIFx0XHRcdFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVx1MDAzZWRhdGE7XG4tXHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfc3RhcnQpO1xuLVx0XHRcdC8qIEZJWE1FIGFkZCBzYW5pdHkgY2hlY2tpbmcgKi9cbi1cdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKSAtIDB4MzUwMDtcbitcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzYyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYyxcbitcdFx0XHRcdFx0XHRcdCAgIHJ4X2tleWNhY2hlX3NpemUpLFxuK1x0XHRcdFx0XHRcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXHUwMDNlZGF0YSkpKSB7XG4rXHRcdFx0XHR3aXBoeV9lcnIocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICBcImZpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4rXHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuK1x0XHRcdGlmIChyeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydCkge1xuK1x0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4rXHRcdFx0XHRcdCAgXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHByaXYtXHUwMDNlcnhfc3RhcnQgPSByeF9zdGFydDtcbitcdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDtcbiBcdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXRhaWxyb29tID0gZGVzYy1cdTAwM2V0YWlscm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXHUwMDNlcHJpdmFjeV9jYXBzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NDUuMTUwNjkyMzg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNDM4NDI1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBJL08gQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZGlmZiBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jYC4gTXkgaW1tZWRpYXRlIHRhcmdldCBpcyBhcm91bmQgbGluZSA3OSwgc28gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaXRzIHB1cnBvc2UuIE15IHBsYW4gaXMgdG8gemVybyBpbiBvbiB0aGF0IGByZWFkLWZpbGVgIGNhbGw7IEkgbmVlZCB0byBjb21wcmVoZW5kIGV4YWN0bHkgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpcm13YXJlIEkvTyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2hhdCBkYXRhIGl0J3MgaGFuZGxpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGludmVzdGlnYXRpb24gd2lsbCBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NTMuMTk0NTM3NDEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdHdoaWxlIChib290cmVjLVxcdTAwM2VkYXRhIFxcdTAwM2M9IGVuZF9kYXRhIFxcdTAwMjZcXHUwMDI2IChib290cmVjLVxcdTAwM2VkYXRhICtcXG4gIDUxOlxcdFxcdCAgICAgICAobGVuID0gbGUzMl90b19jcHUoYm9vdHJlYy1cXHUwMDNlbGVuKSkpIFxcdTAwM2M9IGVuZF9kYXRhKSB7XFxuICA1MjpcXHRcXHRcXHR1MzIgY29kZSA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtXFx1MDAzZWNvZGUpO1xcbiAgNTM6XFx0XFx0XFx0c3dpdGNoIChjb2RlKSB7XFxuICA1NDpcXHRcXHRcXHRjYXNlIEJSX0NPREVfQ09NUE9ORU5UX0lEOlxcbiAgNTU6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfaW50ZXJmYWNlID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilcXG4gIDU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm9vdHJlYy1cXHUwMDNlZGF0YSk7XFxuICA1NzpcXHRcXHRcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWZ3X2ludGVyZmFjZSkge1xcbiAgNTg6XFx0XFx0XFx0XFx0Y2FzZSBGV19MTTg2OlxcbiAgNTk6XFx0XFx0XFx0XFx0Y2FzZSBGV19MTTIwOlxcbiAgNjA6XFx0XFx0XFx0XFx0Y2FzZSBGV19MTTg3OiB7XFxuICA2MTpcXHRcXHRcXHRcXHRcXHRjaGFyICppZnR5cGUgPSAoY2hhciAqKWJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuICA2MjpcXHRcXHRcXHRcXHRcXHR3aXBoeV9pbmZvKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4gIDYzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXFxcblxcXCIsXFxuICA2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XFxuICA2NTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDY2OlxcdFxcdFxcdFxcdFxcdH1cXG4gIDY3OlxcdFxcdFxcdFxcdGNhc2UgRldfRk1BQzpcXG4gIDY4OlxcdFxcdFxcdFxcdGRlZmF1bHQ6XFxuICA2OTpcXHRcXHRcXHRcXHRcXHR3aXBoeV9lcnIocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LFxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwidW5zdXBwb3J0ZWQgZmlybXdhcmVcXFxcblxcXCIpO1xcbiAgNzE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuICA3MjpcXHRcXHRcXHRcXHR9XFxuICA3MzpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDc0OlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9DT01QT05FTlRfVkVSU0lPTjpcXG4gIDc1OlxcdFxcdFxcdFxcdC8qIDI0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFsbCBmaXJtd2FyZXMgKi9cXG4gIDc2OlxcdFxcdFxcdFxcdGlmIChzdHJubGVuKCh1bnNpZ25lZCBjaGFyICopIGJvb3RyZWMtXFx1MDAzZWRhdGEsIDI0KSBcXHUwMDNjIDI0KVxcbiAgNzc6XFx0XFx0XFx0XFx0XFx0ZndfdmVyc2lvbiA9ICh1bnNpZ25lZCBjaGFyICopIGJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuICA3ODpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDc5OlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xcbiAgODA6XFx0XFx0XFx0XFx0c3RydWN0IGJvb3RyZWNfZGVzYyAqZGVzYyA9XFxuICA4MTpcXHRcXHRcXHRcXHRcXHQoc3RydWN0IGJvb3RyZWNfZGVzYyAqKWJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuICA4MjpcXHRcXHRcXHRcXHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZChzdHJ1Y3QgYm9vdHJlY19kZXNjLFxcbiAgODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcnhfa2V5Y2FjaGVfc2l6ZSksXFxuICA4NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCpib290cmVjLVxcdTAwM2VkYXRhKSkpIHtcXG4gIDg3OlxcdFxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuICA4ODpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIHRvbyBzaG9ydFxcXFxuXFxcIik7XFxuICA4OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDkwOlxcdFxcdFxcdFxcdH1cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0XFx0XFx0cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9zdGFydCk7XFxuICA5MzpcXHRcXHRcXHRcXHRyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9lbmQpO1xcbiAgOTQ6XFx0XFx0XFx0XFx0aWYgKHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnQpIHtcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuICA5NjpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXFxcXG5cXFwiKTtcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgOTg6XFx0XFx0XFx0XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xcbiAxMDE6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xcbiAxMDI6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlaGVhZHJvb20gPSBkZXNjLVxcdTAwM2VoZWFkcm9vbTtcXG4gMTAzOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXRhaWxyb29tID0gZGVzYy1cXHUwMDNldGFpbHJvb207XFxuIDEwNDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vwcml2YWN5X2NhcHMgPSBkZXNjLVxcdTAwM2Vwcml2YWN5X2NhcHM7XFxuIDEwNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9rZXljYWNoZV9zaXplID0gZGVzYy1cXHUwMDNlcnhfa2V5Y2FjaGVfc2l6ZTtcXG4gMTA2OlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShib290cmVjLVxcdTAwM2VsZW4pID09IDExKVxcbiAxMDc6XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfbXR1ID0gbGUxNl90b19jcHUoZGVzYy1cXHUwMDNlcnhfbXR1KTtcXG4gMTA4OlxcdFxcdFxcdFxcdGVsc2VcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X210dSA9IChzaXplX3QpXFxuIDExMDpcXHRcXHRcXHRcXHRcXHRcXHQweDYyMCAtIHByaXYtXFx1MDAzZXR4X2hkcl9sZW47XFxuIDExMTpcXHRcXHRcXHRcXHRtYXhsZW4gPSBwcml2LVxcdTAwM2V0eF9oZHJfbGVuICsgLyogVVNCIGRldmljZXMgKi9cXG4gMTEyOlxcdFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSArXFxuIDExMzpcXHRcXHRcXHRcXHRcXHQgNCArIC8qIHJ4IGFsaWdubWVudCAqL1xcbiAxMTQ6XFx0XFx0XFx0XFx0XFx0IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQ7XFxuIDExNTpcXHRcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnhfbXR1IFxcdTAwM2UgbWF4bGVuIFxcdTAwMjZcXHUwMDI2IFBBR0VfU0laRSA9PSA0MDk2KSB7XFxuIDExNjpcXHRcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9JTkZPIFxcXCJwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgXFxcIlxcbiAxMTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ0byAlZFxcXFxuXFxcIiwgcHJpdi1cXHUwMDNlcnhfbXR1LCBtYXhsZW4pO1xcbiAxMTg6XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfbXR1ID0gbWF4bGVuO1xcbiAxMTk6XFx0XFx0XFx0XFx0fVxcbiAxMjA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyMTpcXHRcXHRcXHRcXHR9XFxuIDEyMjpcXHRcXHRcXHRjYXNlIEJSX0NPREVfRVhQT1NFRF9JRjpcXG4gMTIzOlxcdFxcdFxcdFxcdGV4cF9pZiA9IChzdHJ1Y3QgZXhwX2lmICopIGJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuIDEyNDpcXHRcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGxlbiAqIHNpemVvZigqZXhwX2lmKSAvIDQpOyBpKyspXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRpZiAoZXhwX2lmW2ldLmlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0xNQUMpKVxcbiAxMjY6XFx0XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfdmFyID0gbGUxNl90b19jcHUoZXhwX2lmW2ldLnZhcmlhbnQpO1xcbiAxMjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyODpcXHRcXHRcXHRjYXNlIEJSX0NPREVfREVQRU5ERU5UX0lGOlxcbiAxMjk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjUzLjE5NDY0MDIxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTU1Mzk4OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBGaXJtd2FyZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyB0aGUgYHA1NF9wYXJzZV9maXJtd2FyZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGZpcm13YXJlIGRlc2NyaXB0b3IgcGFyc2luZy4gSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBjcnVjaWFsIHNhbml0eSBjaGVja3MsIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCB1bmRlcmZsb3cgaXNzdWVzLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHR3byBrZXkgY29uY2VybnM6XG5cbjEuICBUaGVyZSdzIGEgY2hlY2sgb24gYGxlbmAgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYSBgYm9vdHJlY19kZXNjYCBzdHJ1Y3R1cmUgd2hlbiBhY2Nlc3NpbmcgaXRzIG1lbWJlcnMuIEl0J3MgdXNpbmcgYERJVl9ST1VORF9VUGAgYW5kIGBvZmZzZXRvZmVuZGAgdG8gZW5zdXJlIHRoYXQgaXQgb25seSBhY2Nlc3NlcyB2YWxpZCBtZW1vcnkgd2l0aGluIHRoZSBkZXNjcmlwdG9yJ3MgZGVmaW5lZCBib3VuZHMuIFRoaXMgbG9va3MgbGlrZSBhIHByZWVtcHRpdmUgbWVhc3VyZSBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJmbG93LCB3aGljaCBpcyBnb29kIHByYWN0aWNlLlxuXG4yLiAgVGhlIHNlY29uZCBjaGVjayBvbiBgcnhfZW5kYCByZWxhdGVzIHRvIHRoZSByZWNlaXZlciByYW5nZS4gSXQncyBndWFyZGluZyBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0eSBvZiBgcnhfZW5kYCBiZWluZyBhbiBpbnZhbGlkIHZhbHVlLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gYHJ4X3N0YXJ0YC4gSXQgc2VlbXMgdGhhdCBhbiBpbnZhbGlkIGByeF9lbmRgIGNvdWxkIGxlYWQgdG8gYW4gdW5kZXJmbG93LCB3aGljaCB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBgcnhfc3RhcnRgIGFuZCBgcnhfZW5kYCB2YXJpYWJsZXMgd2l0aGluIHRoZSBwNTQgZHJpdmVyJ3MgY29kZWJhc2UuIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBmdWxseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBpZiB0aGlzIGlzIGEga25vd24gcmlzayBpbiBvdXIgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvYCBkaXJlY3RvcnkgdG8gdHJhY2sgZG93biB0aGUgbG9jYXRpb25zIHdoZXJlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIGFyZSB1c2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBwYXRjaCdzIGNoYW5nZXMgd2lsbCBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NTYuMzUwMDQyMzUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc5OTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeF8oc3RhcnR8ZW5kKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9Mjc9aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mzk6XFx0aWYgKHByaXYtXFx1MDAzZXJ4X3N0YXJ0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTgxLVxcdFxcdFxcdFxcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjgyOlxcdFxcdFxcdHUzMiByeF9zdGFydCwgcnhfZW5kO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtODMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTI6XFx0XFx0XFx0cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9zdGFydCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo5MzpcXHRcXHRcXHRyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9lbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTQ6XFx0XFx0XFx0aWYgKHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk1LVxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTAwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X3N0YXJ0ID0gcnhfc3RhcnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMDE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTAyLVxcdFxcdFxcdHByaXYtXFx1MDAzZWhlYWRyb29tID0gZGVzYy1cXHUwMDNlaGVhZHJvb207XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTMxMD1pbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzE2OlxcdGlmICh1bmxpa2VseShfcmVxX2lkIFxcdTAwM2MgcHJpdi1cXHUwMDNlcnhfc3RhcnQgfHwgX3JlcV9pZCBcXHUwMDNlIHByaXYtXFx1MDAzZXJ4X2VuZCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTMzMD1pbnQgcDU0X3NldHVwX21hYyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzgwLVxcdFxcdG1lbXNldChzZXR1cC1cXHUwMDNldjEucnRzX3JhdGVzLCAwLCA4KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjM4MTpcXHRcXHRzZXR1cC1cXHUwMDNldjEucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtXFx1MDAzZXJ4X2VuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zODItXFx0XFx0c2V0dXAtXFx1MDAzZXYxLm1heF9yeCA9IGNwdV90b19sZTE2KHByaXYtXFx1MDAzZXJ4X210dSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4Ni1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mzg3OlxcdFxcdHNldHVwLVxcdTAwM2V2Mi5yeF9hZGRyID0gY3B1X3RvX2xlMzIocHJpdi1cXHUwMDNlcnhfZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4OC1cXHRcXHRzZXR1cC1cXHUwMDNldjIubWF4X3J4ID0gY3B1X3RvX2xlMTYocHJpdi1cXHUwMDNlcnhfbXR1KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD00Nz1zdHJ1Y3QgYm9vdHJlY19kZXNjIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC00OS1cXHRfX2xlMTYgZmxhZ3M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjUwOlxcdF9fbGUzMiByeF9zdGFydDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6NTE6XFx0X19sZTMyIHJ4X2VuZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtNTItXFx0dTggaGVhZHJvb207XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MTY0PXN0cnVjdCBwNTRfY29tbW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0xNzUtXFx0LyogbWVtb3J5IG1hbmFnZW1lbnQgKGFzIHNlZW4gYnkgdGhlIGZpcm13YXJlKSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoxNzY6XFx0dTMyIHJ4X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoxNzc6XFx0dTMyIHJ4X2VuZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMTc4LVxcdHUxNiByeF9tdHU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jPTI3PXN0YXRpYyB2b2lkIHA1NF9kdW1wX3R4X3F1ZXVlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy00MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjQyOlxcdHByZXZfYWRkciA9IHByaXYtXFx1MDAzZXJ4X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNDMtXFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNnByaXYtXFx1MDAzZXR4X3F1ZXVlLCBza2IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjAtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjE6XFx0ZnJlZSA9IHByaXYtXFx1MDAzZXJ4X2VuZCAtIHByZXZfYWRkcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTYyLVxcdGxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIGZyZWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz03OT1zdGF0aWMgaW50IHA1NF9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtODUtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjg2OlxcdHUzMiBsYXN0X2FkZHIgPSBwcml2LVxcdTAwM2VyeF9zdGFydDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjg3OlxcdHUzMiB0YXJnZXRfYWRkciA9IHByaXYtXFx1MDAzZXJ4X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtODgtXFx0dTE2IGxlbiA9IHByaXYtXFx1MDAzZWhlYWRyb29tICsgc2tiLVxcdTAwM2VsZW4gKyBwcml2LVxcdTAwM2V0YWlscm9vbSArIDM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTExOS1cXHRpZiAodW5saWtlbHkoIXRhcmdldF9za2IpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzoxMjA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXJ4X2VuZCAtIGxhc3RfYWRkciBcXHUwMDNlPSBsZW4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTEyMS1cXHRcXHRcXHR0YXJnZXRfc2tiID0gc2tiX3BlZWtfdGFpbChcXHUwMDI2cHJpdi1cXHUwMDNldHhfcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODo1Ni40MDI4NDY1MDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc3Nzg3MDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRmlybXdhcmUgUGFyc2luZyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBpbiBob3cgd2UncmUgaGFuZGxpbmcgdGhlIGBib290cmVjLVx1MDAzZWRhdGFgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB3ZSBoYWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIHByb2JsZW1zOlxuXG5GaXJzdCwgd2l0aG91dCBwcm9wZXIgYm91bmRzIGNoZWNraW5nLCB3ZSB3ZXJlIHBvdGVudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBgYm9vdHJlYy1cdTAwM2VkYXRhYCBidWZmZXIgd2hlbiBhY2Nlc3NpbmcgZmllbGRzIGxpa2UgYHJ4X3N0YXJ0YCwgYHJ4X2VuZGAsIGV0Yy4sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYnVmZmVyIG92ZXJydW5zLiBLQVNBTiB3b3VsZCBwaWNrIHRoYXQgdXAgdGhvdWdoLlxuXG5TZWNvbmQsIHRoZSBsaW5lIGBwcml2LVx1MDAzZXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKSAtIDB4MzUwMDtgIGNvdWxkIHVuZGVyZmxvdy4gSWYgYHJ4X2VuZGAgd2FzIGxlc3MgdGhhbiBgMHgzNTAwYCwgb3IgaWYgdGhlIHJlc3VsdCBvZiB0aGF0IHN1YnRyYWN0aW9uIHdhcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHJ4X3N0YXJ0YCwgd2UnZCBoYXZlIGludGVnZXIgdW5kZXJmbG93LCBwb3RlbnRpYWxseSBjcmVhdGluZyBpbXByb3BlciBib3VuZHMgZm9yIFRYL1JYIHF1ZXVlcy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBLTVNBTiByZXF1aXJlbWVudHMuIERvIHdlIGhhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwb3RlbnRpYWwgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIHRoZSBmaXJtd2FyZSBidWZmZXIgaXMgYWxyZWFkeSBsb2FkZWQgb3IgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIHNvIGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGRlYWwgd2l0aCBpdC4gVGhlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIHZhcmlhYmxlcyBhcmUgbG9jYWwsIGFuZCBpbml0aWFsaXplZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgYGxlMzJfdG9fY3B1KClgIGNvdW50ZXJwYXJ0cy4gVGhlIGJvdW5kcyBjaGVjayB3ZSBwdXQgaW4gcGxhY2Ugbm93IChgbGVuIFx1MDAzYyAuLi5gKSBtYWtlcyBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25kIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgcmFuZ2UgY2hlY2sgYWxzbyBwcmV2ZW50cyB0aGUgYXJpdGhtZXRpYyB1bmRlcmZsb3cuIEtBU0FOIGFscmVhZHkgYWRkcmVzc2VzIHRoZSBib3VuZHMgY2hlY2svb3ZlcnJ1biBpc3N1ZS5cblxuU28sIHRoaXMgaXNuJ3QgYSBLTVNBTiBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb2Yga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgdGhlIGJvdW5kcyBjaGVjayAqcHJldmVudHMqIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQncyBjb25maXJtIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3NCwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzk6MDEuMTgwNzIwMzU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIGluIGBwNTRfcGFyc2VfZmlybXdhcmUoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gZmlybXdhcmUgYm9vdCByZWNvcmRzIChgbGVuIFxcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKC4uLikpYCkgYW5kIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cvaW52YWxpZCBSWCByYW5nZSBjYWxjdWxhdGlvbiAoYHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnRgKS4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgcDU0X3BhcnNlX2Zpcm13YXJlKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGZpcm13YXJlIGJvb3QgcmVjb3JkcyAoYGxlbiBcXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFxcdTAwM2M9IHJ4X3N0YXJ0YCkuIFxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhbmQgaW50ZWdlciBhcml0aG1ldGljIGJ1Z3MsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 23:19:00 +0000 UTC FinishedAt: 2026-09-06 23:39:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211", "USB" ], "series_id": "af4e6037-5f92-415b-8785-10cdf4f5ba18" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "p54_parse_firmware", "p54u_start_ops", "p54u_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfcGFyc2VfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7cDU0dV9zdGFydF9vcHMmIzM0OywKICAgICYjMzQ7cDU0dV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBmaXJtd2FyZSBib290IHJlY29yZHMgKGBsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydGApLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG5pbmRleCBhM2Q5MDUzZjA0M2M2Li41ZDgyZTBhNDM4MzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xuQEAgLTc5LDkgJiM0Mzs3OSwyNiBAQCBpbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbiBcdFx0Y2FzZSBCUl9DT0RFX0RFU0NSOiB7XG4gXHRcdFx0c3RydWN0IGJvb3RyZWNfZGVzYyAqZGVzYyA9XG4gXHRcdFx0XHQoc3RydWN0IGJvb3RyZWNfZGVzYyAqKWJvb3RyZWMtXHUwMDNlZGF0YTtcbi1cdFx0XHRwcml2LVx1MDAzZXJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4tXHRcdFx0LyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqL1xuLVx0XHRcdHByaXYtXHUwMDNlcnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpIC0gMHgzNTAwO1xuJiM0MztcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZChzdHJ1Y3QgYm9vdHJlY19kZXNjLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHJ4X2tleWNhY2hlX3NpemUpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpib290cmVjLVx1MDAzZWRhdGEpKSkge1xuJiM0MztcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIHRvbyBzaG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4mIzQzO1x0XHRcdHJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKTtcbiYjNDM7XHRcdFx0aWYgKHJ4X2VuZCBcdTAwM2MgMHgzNTAwIHx8IHJ4X2VuZCAtIDB4MzUwMCBcdTAwM2M9IHJ4X3N0YXJ0KSB7XG4mIzQzO1x0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgIFwmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaGFzIGludmFsaWQgUlggcmFuZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXJ4X3N0YXJ0ID0gcnhfc3RhcnQ7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xuIFx0XHRcdHByaXYtXHUwMDNlaGVhZHJvb20gPSBkZXNjLVx1MDAzZWhlYWRyb29tO1xuIFx0XHRcdHByaXYtXHUwMDNldGFpbHJvb20gPSBkZXNjLVx1MDAzZXRhaWxyb29tO1xuIFx0XHRcdHByaXYtXHUwMDNlcHJpdmFjeV9jYXBzID0gZGVzYy1cdTAwM2Vwcml2YWN5X2NhcHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtwNTR1X3N0YXJ0X29wcyYjMzQ7LAogICAgJiMzNDtwNTR1X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMKaW5kZXggYTNkOTA1M2YwNDNjNi4uNWQ4MmUwYTQzODM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jCkBAIC03OSw5ICYjNDM7NzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiAJCWNhc2UgQlJfQ09ERV9ERVNDUjogewogCQkJc3RydWN0IGJvb3RyZWNfZGVzYyAqZGVzYyA9CiAJCQkJKHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLSZndDtkYXRhOwotCQkJcHJpdi0mZ3Q7cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9zdGFydCk7Ci0JCQkvKiBGSVhNRSBhZGQgc2FuaXR5IGNoZWNraW5nICovCi0JCQlwcml2LSZndDtyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9lbmQpIC0gMHgzNTAwOwomIzQzOwkJCXUzMiByeF9zdGFydCwgcnhfZW5kOwomIzQzOwomIzQzOwkJCWlmIChsZW4gJmx0OyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYywKJiM0MzsJCQkJCQkJICAgcnhfa2V5Y2FjaGVfc2l6ZSksCiYjNDM7CQkJCQkJICAgICAgIHNpemVvZigqYm9vdHJlYy0mZ3Q7ZGF0YSkpKSB7CiYjNDM7CQkJCXdpcGh5X2Vycihwcml2LSZndDtody0mZ3Q7d2lwaHksCiYjNDM7CQkJCQkgICYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBpcyB0b28gc2hvcnRcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnhfc3RhcnQpOwomIzQzOwkJCXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3J4X2VuZCk7CiYjNDM7CQkJaWYgKHJ4X2VuZCAmbHQ7IDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgJmx0Oz0gcnhfc3RhcnQpIHsKJiM0MzsJCQkJd2lwaHlfZXJyKHByaXYtJmd0O2h3LSZndDt3aXBoeSwKJiM0MzsJCQkJCSAgJiMzNDtmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlwcml2LSZndDtyeF9zdGFydCA9IHJ4X3N0YXJ0OwomIzQzOwkJCXByaXYtJmd0O3J4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDsKIAkJCXByaXYtJmd0O2hlYWRyb29tID0gZGVzYy0mZ3Q7aGVhZHJvb207CiAJCQlwcml2LSZndDt0YWlscm9vbSA9IGRlc2MtJmd0O3RhaWxyb29tOwogCQkJcHJpdi0mZ3Q7cHJpdmFjeV9jYXBzID0gZGVzYy0mZ3Q7cHJpdmFjeV9jYXBzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBzaXR0aW5nIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYHA1NGAgYWN0dWFsbHkgKmlzKi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGhlcmUsIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoaWNoIHNwZWNpZmljIGRyaXZlcnMgdXRpbGl6ZSB0aGUgcDU0IGluZnJhc3RydWN0dXJlPyBJcyBpdCBqdXN0IHA1NHVzYiwgcDU0cGNpLCBhbmQgcDU0c3BpLCBvciBhcmUgdGhlcmUgb3RoZXJzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyB3aWxsIGhlbHAgbWUgYm91bmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgpOZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGZ1enppbmcgbGFuZHNjYXBlIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIElzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB0aHJvdWdoIGFueSBleGlzdGluZyBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBJJiMzOTttIHRoaW5raW5nIGFsb25nIHRoZSBsaW5lcyBvZiBVU0IgZW11bGF0aW9uLCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIG1hYzgwMjExIGludGVncmF0aW9uLiBLbm93aW5nIGhvdyB0aGUgY29kZSBpcyBleHBvc2VkIHRvIHBvdGVudGlhbCBmdXp6aW5nIGlucHV0cyBpcyBjcml0aWNhbC4gV2hpY2gga2VybmVsIGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhlIGFmZmVjdGVkIHBhdGhzPyBXaGljaCBzeW1ib2xzIGFyZSBhdCBwbGF5IGhlcmU/CgpTbywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nLiBUaW1lIHRvIGJ1c3Qgb3V0IHRoZSBncmVwcyBhbmQgc3RhcnQgcmVhZGluZyB0aG9zZSBmaWxlcy4gR290dGEgZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBnYXRoZXJpbmcgdGhlIHJhdyBkYXRhIHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjc0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9Mj1jb25maWcgUDU0X0NPTU1PTlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTEyLVx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjEzOlx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxNTpcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTE3PWNvbmZpZyBQNTRfVVNCXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMjQtXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6MjU6XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0yNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjI3Olx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHVzYi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9Mjk9Y29uZmlnIFA1NF9QQ0lcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0zOC1cdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjM5Olx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo0MTpcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRwY2kuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTQzPWNvbmZpZyBQNTRfU1BJXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo1MDpcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRzcGkuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTUyPWNvbmZpZyBQNTRfU1BJX0RFRkFVTFRfRUVQUk9NXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo2NzpcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTY4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZToyOnA1NGNvbW1vbi1vYmpzXHRcdFx0Oj0gZWVwcm9tLm8gZndpby5vIHR4cngubyBtYWluLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZTozOnA1NGNvbW1vbi0kKENPTkZJR19QNTRfTEVEUylcdCYjNDM7PSBsZWQub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfUDU0X0NPTU1PTilcdCYjNDM7PSBwNTRjb21tb24ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1A1NF9VU0IpXHRcdCYjNDM7PSBwNTR1c2Iub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1A1NF9QQ0kpXHRcdCYjNDM7PSBwNTRwY2kub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1A1NF9TUEkpXHRcdCYjNDM7PSBwNTRzcGkub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoyNTojaW5jbHVkZSBcJiMzNDtwNTQuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI2LSNpbmNsdWRlIFwmIzM0O2VlcHJvbS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI5OnN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcDU0X2JncmF0ZXNbXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMC1cdHsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgfSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDQ6c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBwNTRfYXJhdGVzW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDUtXHR7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDQsIH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjU1OnN0YXRpYyBzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgcDU0X3Jzc2lfZGVmYXVsdCA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01Ni1cdC8qXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcxOnN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzItXHR1MTYgZnJlcTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Nzk6c3RydWN0IHA1NF9jaGFubmVsX2xpc3Qge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgwOlx0c3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICpjaGFubmVscztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04MS1cdHNpemVfdCBlbnRyaWVzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4NjpzdGF0aWMgaW50IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEodTE2IGZyZXEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05OT1zdGF0aWMgaW50IHNhbWVfYmFuZCh1MTYgZnJlcSwgdTE2IGZyZXEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwMC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTAxOlx0cmV0dXJuIHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSkgPT0gcDU0X2dldF9iYW5kX2Zyb21fZnJlcShmcmVxMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTAyLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTA0OnN0YXRpYyBpbnQgcDU0X2NvbXBhcmVfY2hhbm5lbHMoY29uc3Qgdm9pZCAqX2EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTA1LVx0XHRcdFx0Y29uc3Qgdm9pZCAqX2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTA2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDc6XHRjb25zdCBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKmEgPSBfYTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDg6XHRjb25zdCBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKmIgPSBfYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMDktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTExMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMTM6c3RhdGljIGludCBwNTRfY29tcGFyZV9yc3NpY2hhbihjb25zdCB2b2lkICpfYSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTQtXHRcdFx0XHRjb25zdCB2b2lkICpfYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExNjpcdGNvbnN0IHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqYSA9IF9hO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExNzpcdGNvbnN0IHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqYiA9IF9iO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTExOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEyMjpzdGF0aWMgaW50IHA1NF9maWxsX2JhbmRfYml0cmF0ZXMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEyMy1cdFx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZF9lbnRyeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTI5LVx0Y2FzZSBOTDgwMjExX0JBTkRfMkdIWjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMzA6XHRcdGJhbmRfZW50cnktXHUwMDNlYml0cmF0ZXMgPSBwNTRfYmdyYXRlcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMzE6XHRcdGJhbmRfZW50cnktXHUwMDNlbl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocDU0X2JncmF0ZXMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEzMi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTMzLVx0Y2FzZSBOTDgwMjExX0JBTkRfNUdIWjpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMzQ6XHRcdGJhbmRfZW50cnktXHUwMDNlYml0cmF0ZXMgPSBwNTRfYXJhdGVzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzNTpcdFx0YmFuZF9lbnRyeS1cdTAwM2VuX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYXJhdGVzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMzYtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTQ0OnN0YXRpYyBpbnQgcDU0X2dlbmVyYXRlX2JhbmQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjE0NTpcdFx0XHQgICAgIHN0cnVjdCBwNTRfY2hhbm5lbF9saXN0ICpsaXN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE0Ni1cdFx0XHQgICAgIHVuc2lnbmVkIGludCAqY2hhbl9udW0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE0OC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTQ5Olx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNTAtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICp0bXAsICpvbGQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNjY6XHRyZXQgPSBwNTRfZmlsbF9iYW5kX2JpdHJhdGVzKGRldiwgdG1wLCBiYW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNzEtXHRcdFx0ICAgKGkgXHUwMDNjIGxpc3QtXHUwMDNlZW50cmllcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTcyOlx0XHRzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKmNoYW4gPSBcdTAwMjZsaXN0LVx1MDAzZWNoYW5uZWxzW2ldO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE3My1cdFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpkZXN0ID0gXHUwMDI2dG1wLVx1MDAzZWNoYW5uZWxzW2pdO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yMzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKnA1NF91cGRhdGVfY2hhbm5lbF9wYXJhbShzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yMzItXHRcdFx0XHRcdFx0XHQgIHUxNiBmcmVxLCB1MTYgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjM0LVx0aW50IGk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjM1Olx0c3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICplbnRyeSA9IE5VTEw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjM2LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNTAtXHRcdC8qIGVudHJ5IGRvZXMgbm90IGV4aXN0IHlldC4gSW5pdGlhbGl6ZSBhIG5ldyBvbmUuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjUxOlx0XHRpbnQgYmFuZCA9IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjUyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Mjc2OnN0YXRpYyBpbnQgcDU0X2dldF9tYXhwb3dlcihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNzcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MzE5OnN0YXRpYyBpbnQgcDU0X2dlbmVyYXRlX2NoYW5uZWxfbGlzdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTMyMC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MzIxOlx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozMjI6XHRzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMjMtXHR1bnNpZ25lZCBpbnQgaSwgaiwgaywgbWF4X2NoYW5uZWxfbnVtO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNTAtXHRsaXN0LVx1MDAzZW1heF9lbnRyaWVzID0gbWF4X2NoYW5uZWxfbnVtO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM1MTpcdGxpc3QtXHUwMDNlY2hhbm5lbHMgPSBremFsbG9jX29ianMoc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5LCBtYXhfY2hhbm5lbF9udW0pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM1Mi1cdGlmICghbGlzdC1cdTAwM2VjaGFubmVscykge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNTktXHRcdFx0ZnJlcSA9IGxlMTZfdG9fY3B1KHByaXYtXHUwMDNlaXFfYXV0b2NhbFtpXS5mcmVxKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozNjA6XHRcdFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NBTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzYxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM2My1cdFx0aWYgKGkgXHUwMDNjIHByaXYtXHUwMDNlb3V0cHV0X2xpbWl0LVx1MDAzZWVudHJpZXMpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozNjQ6XHRcdFx0c3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICp0bXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzY1LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNzEtXHRcdFx0ZnJlcSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopIGRhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3MjpcdFx0XHR0bXAgPSBwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0obGlzdCwgZnJlcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNzMtXHRcdFx0XHRcdFx0ICAgICAgIENIQU5fSEFTX0xJTUlUKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNzQtXHRcdFx0aWYgKHRtcCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3NTpcdFx0XHRcdHRtcC1cdTAwM2VtYXhfcG93ZXIgPSBwNTRfZ2V0X21heHBvd2VyKHByaXYsIGRhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3Ni1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozODU6XHRcdFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NVUlZFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zODYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzg5LVx0Lyogc29ydCB0aGUgY2hhbm5lbCBsaXN0IGJ5IGZyZXF1ZW5jeSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM5MDpcdHNvcnQobGlzdC1cdTAwM2VjaGFubmVscywgbGlzdC1cdTAwM2VlbnRyaWVzLCBzaXplb2Yoc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozOTE6XHQgICAgIHA1NF9jb21wYXJlX2NoYW5uZWxzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM5NC1cdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBOVU1fTkw4MDIxMV9CQU5EUzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozOTU6XHRcdGlmIChwNTRfZ2VuZXJhdGVfYmFuZChkZXYsIGxpc3QsIFx1MDAyNmssIGkpID09IDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzk2LVx0XHRcdGomIzQzOyYjNDM7O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00MTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDE2OnN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE3LVx0XHRcdCAgICBzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0MTk6XHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQyMDpcdHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgKmRzdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00MjEtXHRzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjAgKnNyYztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQ2ODpzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQ2OS1cdFx0XHQgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQ3MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDcxOlx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0NzI6XHRzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlICpkc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDczLVx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxICpzcmM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUwOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTA6c3RhdGljIGNvbnN0IGNoYXIgKnA1NF9yZl9jaGlwc1tdID0geyBcJiMzNDtJTlZBTElELTBcJiMzNDssIFwmIzM0O0R1ZXR0ZTNcJiMzNDssIFwmIzM0O0R1ZXR0ZTJcJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTExLVx0XCYjMzQ7RnJpc2JlZVwmIzM0OywgXCYjMzQ7WGJvd1wmIzM0OywgXCYjMzQ7TG9uZ2Jvd1wmIzM0OywgXCYjMzQ7SU5WQUxJRC02XCYjMzQ7LCBcJiMzNDtJTlZBTElELTdcJiMzNDsgfTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01MTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTEzOnN0YXRpYyBpbnQgcDU0X3BhcnNlX3Jzc2ljYWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUxNC1cdFx0XHQgICAgIHU4ICpkYXRhLCBpbnQgbGVuLCB1MTYgdHlwZSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01MTUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjUxNjpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTE3Olx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01MTgtXHRzaXplX3QgZGJfbGVuLCBlbnRyaWVzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01ODUtXHQvKiBzb3J0IHRoZSBsaXN0IGJ5IGNoYW5uZWwgZnJlcXVlbmN5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTg2Olx0c29ydChlbnRyeSwgZW50cmllcywgc2l6ZW9mKCplbnRyeSksIHA1NF9jb21wYXJlX3Jzc2ljaGFuLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01ODctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTk5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYwMDpzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnA1NF9yc3NpX2ZpbmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIGNvbnN0IHUxNiBmcmVxKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYwMS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NjAyOlx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MDMtXHRpbnQgaSwgZm91bmQgPSAtMTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjA1LVx0aWYgKCFwcml2LVx1MDAzZXJzc2lfZGIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NjA2Olx0XHRyZXR1cm4gXHUwMDI2cDU0X3Jzc2lfZGVmYXVsdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MDctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo2Mjg6XHRyZXR1cm4gZm91bmQgXHUwMDNjIDAgPyBcdTAwMjZwNTRfcnNzaV9kZWZhdWx0IDogXHUwMDI2ZW50cnlbZm91bmRdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYyOS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjMwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYzMTpzdGF0aWMgdm9pZCBwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MzItXHRcdFx0XHQgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02NTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NjYwOnN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjYxLVx0XHRcdFx0ICAgICB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02NjIte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjY2MzpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjY0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02OTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Njk4OnN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTY5OS1cdFx0XHRcdFx0ICAgICAgIHNpemVfdCB0b3RhbF9sZW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzAwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3MDE6XHRzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqZHN0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcwMi1cdHNpemVfdCBwYXlsb2FkX2xlbiwgZW50cmllcywgZW50cnlfc2l6ZSwgb2Zmc2V0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI1OmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNi17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI3Olx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjgtXHRzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICp3cmFwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NTctXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3NTg6XHRcdFx0ZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LVx1MDAzZWRhdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzU5LVx0XHRcdFx0XHRcdFx0ZGF0YV9sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzItXHRcdFx0Y2FzZSAwOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc3MzpcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjAoZGV2LCBjdXJ2ZV9kYXRhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzQtXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzUtXHRcdFx0Y2FzZSAxOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc3NjpcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NzctXHRcdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzk5LVx0XHRjYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODAwOlx0XHRcdHA1NF9wYXJzZV9kZWZhdWx0X2NvdW50cnkoZGV2LCBlbnRyeS1cdTAwM2VkYXRhLCBkYXRhX2xlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODAxLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04MTgtXHRcdGNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQ6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODE5Olx0XHRcdGVyciA9IHA1NF9wYXJzZV9yc3NpY2FsKGRldiwgZW50cnktXHUwMDNlZGF0YSwgZGF0YV9sZW4sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODIwLVx0XHRcdFx0XHRcdGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWNvZGUpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgzMzpcdFx0XHRwcml2LVx1MDAzZXJzc2lfZGIgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04MzQtXHRcdFx0aWYgKCFwcml2LVx1MDAzZXJzc2lfZGIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg0OC1cdFx0XHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg0OTpcdFx0XHRwcml2LVx1MDAzZW91dHB1dF9saW1pdCA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1MC1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1NS1cdFx0XHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg1NjpcdFx0XHRwcml2LVx1MDAzZWN1cnZlX2RhdGEgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NTctXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODkzOlx0ZXJyID0gcDU0X2dlbmVyYXRlX2NoYW5uZWxfbGlzdHMoZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTQtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTctXHRpZiAocHJpdi1cdTAwM2VyeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9YQk9XKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg5ODpcdFx0cDU0X2luaXRfeGJvd19zeW50aChwcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04OTktXHRpZiAoIShzeW50aCBcdTAwMjYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkxOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5MTk6XHRwcml2LVx1MDAzZWN1cl9yc3NpID0gXHUwMDI2cDU0X3Jzc2lfZGVmYXVsdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05MjAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkyMi1cdFx0ICAgZGV2LVx1MDAzZXdpcGh5LVx1MDAzZXBlcm1fYWRkciwgcHJpdi1cdTAwM2V2ZXJzaW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjkyMzpcdFx0ICAgcDU0X3JmX2NoaXBzW3ByaXYtXHUwMDNlcnhod10pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkyNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQxLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5NDI6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk0NDppbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NDUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk0NjpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQ3LVx0c2l6ZV90IGVlcHJvbV9zaXplID0gMHgyMDIwLCBvZmZzZXQgPSAwLCBibG9ja3NpemUsIG1heGJsb2Nrc2l6ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTYyLVx0XHRibG9ja3NpemUgPSBtaW4oZWVwcm9tX3NpemUsIG1heGJsb2Nrc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTYzOlx0XHRyZXQgPSBwNTRfZG93bmxvYWRfZWVwcm9tKHByaXYsIGVlcHJvbSAmIzQzOyBvZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTY0LVx0XHRcdFx0XHQgIG9mZnNldCwgYmxvY2tzaXplKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk3MjpcdHJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCBlZXByb20sIG9mZnNldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTczLWZyZWU6XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk3Ni19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTc3OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oPTMwPXN0cnVjdCBlZXByb21fcGRhX3dyYXAge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaC0zNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaDozODpzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTM5LVx0X19sZTE2IGlxX3BhcmFtWzRdO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaD00Mj1zdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTQzLVx0X19sZTE2IGZyZXE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmg6NDQ6XHRzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgcGFyYW1zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTQ1LX0gX19wYWNrZWQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjM6I2luY2x1ZGUgXCYjMzQ7cDU0LmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjQtI2luY2x1ZGUgXCYjMzQ7ZWVwcm9tLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzppbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTpcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwLVx0c3RydWN0IGV4cF9pZiAqZXhwX2lmO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjItXHRcdFx0XHR3aXBoeV9pbmZvKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYzOlx0XHRcdFx0XHQgICBcJiMzNDtwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTY0LVx0XHRcdFx0XHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xMTEtXHRcdFx0bWF4bGVuID0gcHJpdi1cdTAwM2V0eF9oZHJfbGVuICYjNDM7IC8qIFVTQiBkZXZpY2VzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjExMjpcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xMTMtXHRcdFx0XHQgNCAmIzQzOyAvKiByeCBhbGlnbm1lbnQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNS1cdFx0XHRpZiAocHJpdi1cdTAwM2VyeF9tdHUgXHUwMDNlIG1heGxlbiBcdTAwMjZcdTAwMjYgUEFHRV9TSVpFID09IDQwOTYpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTE2Olx0XHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNy1cdFx0XHRcdCAgICAgICBcJiMzNDt0byAlZFxcblwmIzM0OywgcHJpdi1cdTAwM2VyeF9tdHUsIG1heGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xNTAtXHRcdHdpcGh5X2luZm8ocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTUxOlx0XHRcdCAgIFwmIzM0O3lvdSBhcmUgdXNpbmcgYW4gb2Jzb2xldGUgZmlybXdhcmUuIHZpc2l0IGh0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sIGFuZCBncmFiIG9uZSBmb3IgXFxcJiMzNDtrZXJuZWwgXHUwMDNlPSAyLjYuMjhcXFwmIzM0Oy4uLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xNTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xOTgtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxOTk6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMDE6c3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgaGRyX2ZsYWdzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDItXHRcdFx0XHQgICAgIHUxNiBwYXlsb2FkX2xlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMDQ6XHRzdHJ1Y3QgcDU0X2hkciAqaGRyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDUtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMjc6aW50IHA1NF9kb3dubG9hZF9lZXByb20oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmJ1ZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjI4LVx0XHRcdHUxNiBvZmZzZXQsIHUxNiBsZW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIyOS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjIzMDpcdHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKmVlcHJvbV9oZHI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIzMS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI0MTpcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIGVlcHJvbV9oZHJfc2l6ZSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNDItXHRcdFx0ICAgIGxlbiwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI2MjpcdHA1NF90eChwcml2LCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNjMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI3NzppbnQgcDU0X3VwZGF0ZV9iZWFjb25fdGltKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgYWlkLCBib29sIHNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjc4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjc5LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjgwOlx0c3RydWN0IHA1NF90aW0gKnRpbTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjgxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyODI6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnRpbSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4My1cdFx0XHQgICAgUDU0X0NPTlRST0xfVFlQRV9USU0sIEdGUF9BVE9NSUMpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjg5LVx0dGltLVx1MDAzZWVudHJ5WzBdID0gY3B1X3RvX2xlMTYoc2V0ID8gKGFpZCB8IDB4ODAwMCkgOiBhaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTA6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjkxLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI5NDppbnQgcDU0X3N0YV91bmxvY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4ICphZGRyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTYtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTc6XHRzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgKnN0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTk6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnN0YSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwMC1cdFx0XHQgICAgUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMDUtXHRtZW1jcHkoc3RhLVx1MDAzZWFkZHIsIGFkZHIsIEVUSF9BTEVOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzA2Olx0cDU0X3R4KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwNy1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzA5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMTA6aW50IHA1NF90eF9jYW5jZWwoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIF9fbGUzMiByZXFfaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxMS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxMi1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMxMzpcdHN0cnVjdCBwNTRfdHhjYW5jZWwgKmNhbmNlbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzE0LVx0dTMyIF9yZXFfaWQgPSBsZTMyX3RvX2NwdShyZXFfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzE4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMTk6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNhbmNlbCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMyMC1cdFx0XHQgICAgUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMjUtXHRjYW5jZWwtXHUwMDNlcmVxX2lkID0gcmVxX2lkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMjY6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzI3LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMzMDppbnQgcDU0X3NldHVwX21hYyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzMxLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzMyLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzMzOlx0c3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMzQtXHR1MTYgbW9kZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMzY6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnNldHVwKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM3LVx0XHRcdCAgICBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLCBHRlBfQVRPTUlDKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwMC1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDAxOlx0cDU0X3R4KHByaXYsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwMi1cdHByaXYtXHUwMDNlcGh5X2lkbGUgPSBtb2RlID09IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwNjppbnQgcDU0X3NjYW4oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBtb2RlLCB1MTYgZHdlbGwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwNy17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwOC1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwOTpcdHN0cnVjdCBwNTRfaGRyICpoZHI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMDpcdHN0cnVjdCBwNTRfc2Nhbl9oZWFkICpoZWFkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo0MTE6XHRzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgKmlxX2F1dG9jYWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMjpcdHVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gKmJvZHk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMzpcdHN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgKnJhdGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQxNC1cdHN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKnJzc2k7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxNTpcdHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqcnNzaV9kYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MTYtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQxOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDIwOlx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpoZWFkKSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MjEtXHRcdFx0ICAgIDIgJiM0Mzsgc2l6ZW9mKCppcV9hdXRvY2FsKSAmIzQzOyBzaXplb2YoKmJvZHkpICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00NDMtXHRcdG1lbWNweShpcV9hdXRvY2FsLCBcdTAwMjZwcml2LVx1MDAzZWlxX2F1dG9jYWxbaV0ucGFyYW1zLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo0NDQ6XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5KSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQ0NS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTYtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQ5NzpcdFx0XHRzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9IFx1MDAyNmJvZHktXHUwMDNlbm9ybWFsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTgtXHRcdFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUwNC1cdFx0XHRtZW1jcHkoY2hhbi1cdTAwM2VjdXJ2ZV9kYXRhLCBlbnRyeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTA1Olx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MDYtXHRcdFx0ICAgICAgIG1pbigodTgpOCwgY3VydmVfZGF0YS1cdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUyMC1cdHJzc2kgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjUyMTpcdHJzc2lfZGF0YSA9IHA1NF9yc3NpX2ZpbmQocHJpdiwgbGUxNl90b19jcHUoZnJlcSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MjItXHRyc3NpLVx1MDAzZW11bCA9IGNwdV90b19sZTE2KHJzc2lfZGF0YS1cdTAwM2VtdWwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Mzg6XHRoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUzOS1cdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKCpoZHIpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NDE6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTQyLVx0cHJpdi1cdTAwM2VjdXJfcnNzaSA9IHJzc2lfZGF0YTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTU0OmludCBwNTRfc2V0X2xlZHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1Ni1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU1NzpcdHN0cnVjdCBwNTRfbGVkICpsZWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTU5Olx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpsZWQpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NjAtXHRcdFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfTEVELCBHRlBfQVRPTUlDKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU2OC1cdGxlZC1cdTAwM2VkZWxheVsxXSA9IGNwdV90b19sZTE2KDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Njk6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTcwLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU3MzppbnQgcDU0X3NldF9lZGNmKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzQte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzUtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NzY6XHRzdHJ1Y3QgcDU0X2VkY2YgKmVkY2Y7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU3Ny1cdHU4IHJ0ZDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Nzk6XHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01ODAtXHRcdFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwgR0ZQX0FUT01JQyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MDUtXHRtZW1jcHkoZWRjZi1cdTAwM2VxdWV1ZSwgcHJpdi1cdTAwM2Vxb3NfcGFyYW1zLCBzaXplb2YoZWRjZi1cdTAwM2VxdWV1ZSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo2MDY6XHRwNTRfdHgocHJpdiwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjA3LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYxMDppbnQgcDU0X3NldF9wcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjExLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjEyLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NjEzOlx0c3RydWN0IHA1NF9wc20gKnBzbTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjE0LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MjMtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBGaXJtd2FyZSBQYXJzaW5nIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBmaXJtd2FyZSBpc3N1ZSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgcDU0X3BhcnNlX2Zpcm13YXJlYCBmdW5jdGlvbiBpcyBjbGVhcmx5IGltcG9ydGFudCBoZXJlLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJiMzOTtzIGNhbGxpbmcgaXQ7IHdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyBmb3IgdGhpcywgb2YgY291cnNlLCBiZWNhdXNlIG1hbnVhbCBzY2FubmluZyBpcyBqdXN0IGluZWZmaWNpZW50LiAKCkFuZCwgb2YgY291cnNlLCB0aGUgb2J2aW91cyBtb2R1bGVzIHRoYXQgd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gdGhpcyBhcmUgdGhlIGBwNTR1c2JgLCBgcDU0cGNpYCwgYW5kIGBwNTRzcGlgIGRyaXZlcnMgLSB0aGV5JiMzOTtyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBmaXJtd2FyZSBsb2FkaW5nIGluIGEgd2lyZWxlc3MgY29udGV4dC4KClJpZ2h0LiBUaW1lIHRvIGZpcmUgdXAgbXkgdHJ1c3R5IGdyZXAgYW5kIGZpbmQgZXZlcnkgc2luZ2xlIGluc3RhbmNlIHdoZXJlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaW5mZXIgdGhlIHBvc3NpYmxlIGZhaWx1cmUgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IHRoZSBjYXVzZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X3BhcnNlX2Zpcm13YXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI3OmludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xOTgtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxOTk6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD0yNjg9dm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoyNjk6aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oLTI3MC1pbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTQ4PXN0YXRpYyBpbnQgcDU0cF91cGxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYy03OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYzo3OTpcdGVyciA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtXHUwMDNlZmlybXdhcmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTgwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM9MTQwPXN0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0xNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MTUzOlx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cdTAwM2VmaXJtd2FyZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTU0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz04Njc9c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04NzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6ODcyOlx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cdTAwM2Vmdyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODczLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc1OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU2l0dWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgcDU0dXNiYCBzaXR1YXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gcGlucG9pbnQgYHA1NHVfc3RhcnRfb3BzYCB3aXRoaW4gYHA1NHVzYi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFRoZSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGV2ZW4gKnJlYWNoKiBgcDU0dXNiYCB2aWEgVVNCIGZ1enppbmcuIFRoYXQgbWVhbnMgc2VlaW5nIGlmIEkgY2FuIHRyaWdnZXIgaXQgd2l0aCBSYXcgR2FkZ2V0IG9yIFVTQiBlbXVsYXRpb24gdGVjaG5pcXVlcy4gRXNzZW50aWFsbHksIGNhbiBJIGdldCBjb2RlIGV4ZWN1dGlvbiBpbiB0aGlzIG1vZHVsZSB2aWEgVVNCIG1hbmlwdWxhdGlvbj8gU28sIGl0JiMzOTtzIGJhY2sgdG8gYHA1NHVzYi5jYCB0byBzZWUgaWYgdGhpcyBpcyBwb3NzaWJsZS4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHRrZnJlZShidWYpO1xuIDg1MTpcdFx0cmV0dXJuIGVycjtcbiA4NTI6XHR9XG4gODUzOlx0XG4gODU0Olx0c3RhdGljIGludCBwNTRfZmluZF90eXBlKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4gODU1Olx0e1xuIDg1NjpcdFx0aW50IGk7XG4gODU3Olx0XG4gODU4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBfX05VTV9QNTRVX0hXVFlQRVM7IGkmIzQzOyYjNDM7KVxuIDg1OTpcdFx0XHRpZiAocDU0dV9md2xpc3RbaV0udHlwZSA9PSBwcml2LVx1MDAzZWh3X3R5cGUpXG4gODYwOlx0XHRcdFx0YnJlYWs7XG4gODYxOlx0XHRpZiAoaSA9PSBfX05VTV9QNTRVX0hXVFlQRVMpXG4gODYyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA4NjM6XHRcbiA4NjQ6XHRcdHJldHVybiBpO1xuIDg2NTpcdH1cbiA4NjY6XHRcbiA4Njc6XHRzdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4gODY4Olx0e1xuIDg2OTpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcHJpdi1cdTAwM2Vjb21tb24uaHc7XG4gODcwOlx0XHRpbnQgcmV0O1xuIDg3MTpcdFxuIDg3MjpcdFx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cdTAwM2Vmdyk7XG4gODczOlx0XHRpZiAocmV0KVxuIDg3NDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4gODc1Olx0XG4gODc2Olx0XHRyZXQgPSBwNTRfZmluZF90eXBlKHByaXYpO1xuIDg3NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA4Nzg6XHRcdFx0Z290byBlcnJfb3V0O1xuIDg3OTpcdFxuIDg4MDpcdFx0aWYgKHByaXYtXHUwMDNlY29tbW9uLmZ3X2ludGVyZmFjZSAhPSBwNTR1X2Z3bGlzdFtyZXRdLmludGYpIHtcbiA4ODE6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt3cm9uZyBmaXJtd2FyZSwgcGxlYXNlIGdldCBcJiMzNDtcbiA4ODI6XHRcdFx0XHRcJiMzNDthIGZpcm13YXJlIGZvciBcXFwmIzM0OyVzXFxcJiMzNDsgYW5kIHRyeSBhZ2Fpbi5cXG5cJiMzNDssXG4gODgzOlx0XHRcdFx0cDU0dV9md2xpc3RbcmV0XS5odyk7XG4gODg0Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4gODg1Olx0XHRcdGdvdG8gZXJyX291dDtcbiA4ODY6XHRcdH1cbiA4ODc6XHRcbiA4ODg6XHRcdHJldCA9IHByaXYtXHUwMDNldXBsb2FkX2Z3KGRldik7XG4gODg5Olx0XHRpZiAocmV0KVxuIDg5MDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4gODkxOlx0XG4gODkyOlx0XHRyZXQgPSBwNTR1X29wZW4oZGV2KTtcbiA4OTM6XHRcdGlmIChyZXQpXG4gODk0Olx0XHRcdGdvdG8gZXJyX291dDtcbiA4OTU6XHRcbiA4OTY6XHRcdHJldCA9IHA1NF9yZWFkX2VlcHJvbShkZXYpO1xuIDg5NzpcdFx0aWYgKHJldClcbiA4OTg6XHRcdFx0Z290byBlcnJfc3RvcDtcbiA4OTk6XHRcbiA5MDA6XHRcdHA1NHVfc3RvcChkZXYpO1xuIDkwMTpcdFxuIDkwMjpcdFx0cmV0ID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsIFx1MDAyNnByaXYtXHUwMDNldWRldi1cdTAwM2VkZXYpO1xuIDkwMzpcdFx0aWYgKHJldClcbiA5MDQ6XHRcdFx0Z290byBlcnJfc3RvcDtcbiA5MDU6XHRcbiA5MDY6XHRcdHJldHVybiAwO1xuIDkwNzpcdFxuIDkwODpcdGVycl9zdG9wOlxuIDkwOTpcdFx0cDU0dV9zdG9wKGRldik7XG4gOTEwOlx0XG4gOTExOlx0ZXJyX291dDpcbiA5MTI6XHRcdC8qXG4gOTEzOlx0XHQgKiBwNTR1X2Rpc2Nvbm5lY3Qgd2lsbCBkbyB0aGUgcmVzdCBvZiB0aGVcbiA5MTQ6XHRcdCAqIGNsZWFudXBcbiA5MTU6XHRcdCAqL1xuIDkxNjpcdFx0cmV0dXJuIHJldDtcbiA5MTc6XHR9XG4gOTE4Olx0XG4gOTE5Olx0c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXG4gOTIwOlx0XHRcdFx0XHQgIHZvaWQgKmNvbnRleHQpXG4gOTIxOlx0e1xuIDkyMjpcdFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XG4gOTIzOlx0XHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHByaXYtXHUwMDNldWRldjtcbiA5MjQ6XHRcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gcHJpdi1cdTAwM2VpbnRmO1xuIDkyNTpcdFx0aW50IGVycjtcbiA5MjY6XHRcbiA5Mjc6XHRcdGlmIChmaXJtd2FyZSkge1xuIDkyODpcdFx0XHRwcml2LVx1MDAzZWZ3ID0gZmlybXdhcmU7XG4gOTI5Olx0XHRcdGVyciA9IHA1NHVfc3RhcnRfb3BzKHByaXYpO1xuIDkzMDpcdFx0fSBlbHNlIHtcbiA5MzE6XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiA5MzI6XHRcdFx0ZGV2X2VycihcdTAwMjZ1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmlybXdhcmUgbm90IGZvdW5kLlxcblwmIzM0Oyk7XG4gOTMzOlx0XHR9XG4gOTM0Olx0XG4gOTM1Olx0XHRjb21wbGV0ZShcdTAwMjZwcml2LVx1MDAzZWZ3X3dhaXRfbG9hZCk7XG4gOTM2Olx0XHQvKlxuIDkzNzpcdFx0ICogQXQgdGhpcyBwb2ludCBwNTR1X2Rpc2Nvbm5lY3QgbWF5IGhhdmUgYWxyZWFkeSBmcmVlZFxuIDkzODpcdFx0ICogdGhlIFwmIzM0O3ByaXZcJiMzNDsgY29udGV4dC4gRG8gbm90IHVzZSBpdCBhbnltb3JlIVxuIDkzOTpcdFx0ICovXG4gOTQwOlx0XHRwcml2ID0gTlVMTDtcbiA5NDE6XHRcbiA5NDI6XHRcdGlmIChlcnIpIHtcbiA5NDM6XHRcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlICglZClcXG5cJiMzNDssIGVycik7XG4gOTQ0Olx0XG4gOTQ1Olx0XHRcdHVzYl9sb2NrX2RldmljZSh1ZGV2KTtcbiA5NDY6XHRcdFx0dXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShcdTAwMjZwNTR1X2RyaXZlciwgaW50Zik7XG4gOTQ3Olx0XHRcdHVzYl91bmxvY2tfZGV2aWNlKHVkZXYpO1xuIDk0ODpcdFx0fVxuIDk0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzY2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaXJtd2FyZSBMb2FkaW5nIGluIHRoZSBJbnRlclNpbCBwNTQgVVNCIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCBpcyB0aGUgY2FsbGJhY2sgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgdHJpZ2dlcmVkIHdoZW4gZmlybXdhcmUgaXMgbmVlZGVkIGVpdGhlciBhc3luY2hyb25vdXNseSBvciBhcyBhIGZhbGxiYWNrLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIEkmIzM5O20gZ3JhcHBsaW5nIHdpdGggaXMgaG93IGZpcm13YXJlIGludGVyYWN0cyB3aXRoIFN5emthbGxlciBpbiB0aGlzIGNvbnRleHQuIENhbiBTeXprYWxsZXIgZGlyZWN0bHkgbG9hZCBvciBmdXp6IGZpcm13YXJlPyBJdCBzdXBwb3J0cyBVU0IgZnV6emluZyB0aHJvdWdoIGBzeXpfdXNiX2Nvbm5lY3RgIG9yIHJhdy1nYWRnZXQsIHdoaWNoIGlzIGEga2V5IHBvaW50LCBidXQgZG9lcyBpdCAqcHJvdmlkZSogdGhlIGZpcm13YXJlIGl0c2VsZiwgb3IgZG9lcyBpdCByZWx5IG9uIHVzZXItc3BhY2UgaW5qZWN0aW9uIHRocm91Z2ggdGhlIHN5c2ZzL2Zpcm13YXJlIGxvYWRlciBvciBidWlsdC1pbiBmaXJtd2FyZSBtZWNoYW5pc21zPyBUaGF0JiMzOTtzIHRoZSBjcnV4LgoKQWghIFNlY3Rpb24gMyBpbiB0aGUgZG9jdW1lbnQgaXMgcHJvbWlzaW5nOiAmIzM0O0RyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKSYjMzQ7IFRoaXMgbGlzdCBpbmNsdWRlcyBVU0IgZ2FkZ2V0LCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQuIEFuZCwgdGhlIEludGVyU2lsIHA1NCBVU0IgZHJpdmVyLCBgcDU0dXNiYCwgaXMgaW5kZWVkIGEgKlVTQiogZHJpdmVyLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gZmluZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgcDU0dXNiYCYjMzk7cyBwcm9iZSBmdW5jdGlvbiB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NHVfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTk1Mz1zdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5ODQ6c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4NS1cdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MTEyND1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjYtXHQuaWRfdGFibGUgPSBwNTR1X3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjc6XHQucHJvYmUgPSBwNTR1X3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjgtXHQuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFBhcnNpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgSW50ZXJzaWwgd2lyZWxlc3MgZHJpdmVyIGhhbmRsZXMgZmlybXdhcmUgcGFyc2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcDU0X3BhcnNlX2Zpcm13YXJlYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXMgcHJldHR5IGV4cGxpY2l0LCBzbyBpdCBzaG91bGQgYmUgdGhlIGNvcmUgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHdob2xlIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIG1ldGhvZCBzaWduYXR1cmU7IHRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGdyYXNwIHRoZSBlbnRpcmUgZmxvdyBhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgcGlja2luZyBhcGFydCB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0I2luY2x1ZGUgXCYjMzQ7bG1hYy5oXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gIDI4Olx0e1xuICAyOTpcdFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiAgMzA6XHRcdHN0cnVjdCBleHBfaWYgKmV4cF9pZjtcbiAgMzE6XHRcdHN0cnVjdCBib290cmVjICpib290cmVjO1xuICAzMjpcdFx0dTMyICpkYXRhID0gKHUzMiAqKWZ3LVx1MDAzZWRhdGE7XG4gIDMzOlx0XHR1MzIgKmVuZF9kYXRhID0gKHUzMiAqKWZ3LVx1MDAzZWRhdGEgJiM0MzsgKGZ3LVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIDIpO1xuICAzNDpcdFx0dTggKmZ3X3ZlcnNpb24gPSBOVUxMO1xuICAzNTpcdFx0c2l6ZV90IGxlbjtcbiAgMzY6XHRcdGludCBpO1xuICAzNzpcdFx0aW50IG1heGxlbjtcbiAgMzg6XHRcbiAgMzk6XHRcdGlmIChwcml2LVx1MDAzZXJ4X3N0YXJ0KVxuICA0MDpcdFx0XHRyZXR1cm4gMDtcbiAgNDE6XHRcbiAgNDI6XHRcdHdoaWxlIChkYXRhIFx1MDAzYyBlbmRfZGF0YSBcdTAwMjZcdTAwMjYgKmRhdGEpXG4gIDQzOlx0XHRcdGRhdGEmIzQzOyYjNDM7O1xuICA0NDpcdFxuICA0NTpcdFx0d2hpbGUgKGRhdGEgXHUwMDNjIGVuZF9kYXRhIFx1MDAyNlx1MDAyNiAhKmRhdGEpXG4gIDQ2Olx0XHRcdGRhdGEmIzQzOyYjNDM7O1xuICA0NzpcdFxuICA0ODpcdFx0Ym9vdHJlYyA9IChzdHJ1Y3QgYm9vdHJlYyAqKSBkYXRhO1xuICA0OTpcdFxuICA1MDpcdFx0d2hpbGUgKGJvb3RyZWMtXHUwMDNlZGF0YSBcdTAwM2M9IGVuZF9kYXRhIFx1MDAyNlx1MDAyNiAoYm9vdHJlYy1cdTAwM2VkYXRhICYjNDM7XG4gIDUxOlx0XHQgICAgICAgKGxlbiA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtXHUwMDNlbGVuKSkpIFx1MDAzYz0gZW5kX2RhdGEpIHtcbiAgNTI6XHRcdFx0dTMyIGNvZGUgPSBsZTMyX3RvX2NwdShib290cmVjLVx1MDAzZWNvZGUpO1xuICA1MzpcdFx0XHRzd2l0Y2ggKGNvZGUpIHtcbiAgNTQ6XHRcdFx0Y2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9JRDpcbiAgNTU6XHRcdFx0XHRwcml2LVx1MDAzZWZ3X2ludGVyZmFjZSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopXG4gIDU2Olx0XHRcdFx0XHRcdCAgICAgYm9vdHJlYy1cdTAwM2VkYXRhKTtcbiAgNTc6XHRcdFx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlZndfaW50ZXJmYWNlKSB7XG4gIDU4Olx0XHRcdFx0Y2FzZSBGV19MTTg2OlxuICA1OTpcdFx0XHRcdGNhc2UgRldfTE0yMDpcbiAgNjA6XHRcdFx0XHRjYXNlIEZXX0xNODc6IHtcbiAgNjE6XHRcdFx0XHRcdGNoYXIgKmlmdHlwZSA9IChjaGFyICopYm9vdHJlYy1cdTAwM2VkYXRhO1xuICA2MjpcdFx0XHRcdFx0d2lwaHlfaW5mbyhwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA2MzpcdFx0XHRcdFx0XHQgICBcJiMzNDtwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXG5cJiMzNDssXG4gIDY0Olx0XHRcdFx0XHRcdCAgIGlmdHlwZVsyXSwgaWZ0eXBlWzNdKTtcbiAgNjU6XHRcdFx0XHRcdGJyZWFrO1xuICA2NjpcdFx0XHRcdFx0fVxuICA2NzpcdFx0XHRcdGNhc2UgRldfRk1BQzpcbiAgNjg6XHRcdFx0XHRkZWZhdWx0OlxuICA2OTpcdFx0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4gIDcwOlx0XHRcdFx0XHRcdCAgXCYjMzQ7dW5zdXBwb3J0ZWQgZmlybXdhcmVcXG5cJiMzNDspO1xuICA3MTpcdFx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gIDcyOlx0XHRcdFx0fVxuICA3MzpcdFx0XHRcdGJyZWFrO1xuICA3NDpcdFx0XHRjYXNlIEJSX0NPREVfQ09NUE9ORU5UX1ZFUlNJT046XG4gIDc1Olx0XHRcdFx0LyogMjQgYnl0ZXMgc2hvdWxkIGJlIGVub3VnaCBmb3IgYWxsIGZpcm13YXJlcyAqL1xuICA3NjpcdFx0XHRcdGlmIChzdHJubGVuKCh1bnNpZ25lZCBjaGFyICopIGJvb3RyZWMtXHUwMDNlZGF0YSwgMjQpIFx1MDAzYyAyNClcbiAgNzc6XHRcdFx0XHRcdGZ3X3ZlcnNpb24gPSAodW5zaWduZWQgY2hhciAqKSBib290cmVjLVx1MDAzZWRhdGE7XG4gIDc4Olx0XHRcdFx0YnJlYWs7XG4gIDc5Olx0XHRcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xuICA4MDpcdFx0XHRcdHN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPVxuICA4MTpcdFx0XHRcdFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVx1MDAzZWRhdGE7XG4gIDgyOlx0XHRcdFx0dTMyIHJ4X3N0YXJ0LCByeF9lbmQ7XG4gIDgzOlx0XG4gIDg0Olx0XHRcdFx0aWYgKGxlbiBcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKHN0cnVjdCBib290cmVjX2Rlc2MsXG4gIDg1Olx0XHRcdFx0XHRcdFx0XHQgICByeF9rZXljYWNoZV9zaXplKSxcbiAgODY6XHRcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpib290cmVjLVx1MDAzZWRhdGEpKSkge1xuICA4NzpcdFx0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4gIDg4Olx0XHRcdFx0XHRcdCAgXCYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBpcyB0b28gc2hvcnRcXG5cJiMzNDspO1xuICA4OTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDkwOlx0XHRcdFx0fVxuICA5MTpcdFxuICA5MjpcdFx0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4gIDkzOlx0XHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuICA5NDpcdFx0XHRcdGlmIChyeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydCkge1xuICA5NTpcdFx0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4gIDk2Olx0XHRcdFx0XHRcdCAgXCYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBoYXMgaW52YWxpZCBSWCByYW5nZVxcblwmIzM0Oyk7XG4gIDk3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgOTg6XHRcdFx0XHR9XG4gIDk5Olx0XG4gMTAwOlx0XHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xuIDEwMTpcdFx0XHRcdHByaXYtXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xuIDEwMjpcdFx0XHRcdHByaXYtXHUwMDNlaGVhZHJvb20gPSBkZXNjLVx1MDAzZWhlYWRyb29tO1xuIDEwMzpcdFx0XHRcdHByaXYtXHUwMDNldGFpbHJvb20gPSBkZXNjLVx1MDAzZXRhaWxyb29tO1xuIDEwNDpcdFx0XHRcdHByaXYtXHUwMDNlcHJpdmFjeV9jYXBzID0gZGVzYy1cdTAwM2Vwcml2YWN5X2NhcHM7XG4gMTA1Olx0XHRcdFx0cHJpdi1cdTAwM2VyeF9rZXljYWNoZV9zaXplID0gZGVzYy1cdTAwM2VyeF9rZXljYWNoZV9zaXplO1xuIDEwNjpcdFx0XHRcdGlmIChsZTMyX3RvX2NwdShib290cmVjLVx1MDAzZWxlbikgPT0gMTEpXG4gMTA3Olx0XHRcdFx0XHRwcml2LVx1MDAzZXJ4X210dSA9IGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlcnhfbXR1KTtcbiAxMDg6XHRcdFx0XHRlbHNlXG4gMTA5Olx0XHRcdFx0XHRwcml2LVx1MDAzZXJ4X210dSA9IChzaXplX3QpXG4gMTEwOlx0XHRcdFx0XHRcdDB4NjIwIC0gcHJpdi1cdTAwM2V0eF9oZHJfbGVuO1xuIDExMTpcdFx0XHRcdG1heGxlbiA9IHByaXYtXHUwMDNldHhfaGRyX2xlbiAmIzQzOyAvKiBVU0IgZGV2aWNlcyAqL1xuIDExMjpcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgcDU0X3J4X2RhdGEpICYjNDM7XG4gMTEzOlx0XHRcdFx0XHQgNCAmIzQzOyAvKiByeCBhbGlnbm1lbnQgKi9cbiAxMTQ6XHRcdFx0XHRcdCBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEO1xuIDExNTpcdFx0XHRcdGlmIChwcml2LVx1MDAzZXJ4X210dSBcdTAwM2UgbWF4bGVuIFx1MDAyNlx1MDAyNiBQQUdFX1NJWkUgPT0gNDA5Nikge1xuIDExNjpcdFx0XHRcdFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgXCYjMzQ7XG4gMTE3Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7dG8gJWRcXG5cJiMzNDssIHByaXYtXHUwMDNlcnhfbXR1LCBtYXhsZW4pO1xuIDExODpcdFx0XHRcdFx0cHJpdi1cdTAwM2VyeF9tdHUgPSBtYXhsZW47XG4gMTE5Olx0XHRcdFx0fVxuIDEyMDpcdFx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0XHRcdH1cbiAxMjI6XHRcdFx0Y2FzZSBCUl9DT0RFX0VYUE9TRURfSUY6XG4gMTIzOlx0XHRcdFx0ZXhwX2lmID0gKHN0cnVjdCBleHBfaWYgKikgYm9vdHJlYy1cdTAwM2VkYXRhO1xuIDEyNDpcdFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChsZW4gKiBzaXplb2YoKmV4cF9pZikgLyA0KTsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDI1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgUGFyc2luZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyBjaGFuZ2VkIGhlcmUsIGFuZCB3aHk/JiMzNDsgVGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGhvdyB0aGUgZmlybXdhcmUmIzM5O3MgZGVzY3JpcHRvciBpcyBwYXJzZWQsIHNwZWNpZmljYWxseSB0aGUgYEJSX0NPREVfREVTQ1JgIGNhc2UuIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgZGVhbGluZyB3aXRoIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIGFkZHJlc3Nlcywgd2hpY2ggYXJlIGNydWNpYWwgZm9yIHRoZSBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIHJlY2VpdmVyLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBkaXJlY3QgYXNzaWdubWVudCBhbmQgYSBoYXJkY29kZWQgc3VidHJhY3Rpb24gb2YgYDB4MzUwMGAuIFRoYXQgc3VidHJhY3Rpb24gbG9va3MgYSBiaXQgc3VzcGVjdCAtIGEgbWFnaWMgbnVtYmVyLCBhbHdheXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycyBkb3duIHRoZSBsaW5lIGlmIHRoZSBmaXJtd2FyZSBjaGFuZ2VzLgoKQWgsIEkgc2VlIGl0IG5vdy4gVGhlIHBhdGNoIGludHJvZHVjZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzLiBGaXJzdCwgaXQgZW5zdXJlcyB0aGF0IHRoZSBmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyByZWFkcywgYSBjb21tb24gc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBhbmQgY3Jhc2hlcywgcGFydGljdWxhcmx5IGluIGxvdy1sZXZlbCBkcml2ZXJzIGxpa2UgdGhpcy4gSXQgdGhlbiBjaGVja3MgaWYgdGhlIGNhbGN1bGF0ZWQgYHJ4X2VuZGAgaXMgYSB2YWxpZCByYW5nZSwgZW5zdXJpbmcgaXQmIzM5O3Mgbm90IGxlc3MgdGhhbiBhIGJhc2UgdmFsdWUgYW5kIHRoYXQgdGhlIHN1YnRyYWN0aW9uIGZyb20gYDB4MzUwMGAgZG9lc24mIzM5O3QgcmVzdWx0IGluIGFuIGludmFsaWQgcmFuZ2UgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHJ4X3N0YXJ0YC4gVGhpcyBtYWtlcyB0aGUgY29kZSBtdWNoIG1vcmUgcm9idXN0IGFuZCBzYWZlci4gSWYgdGhlIGNoZWNrcyBmYWlsLCB0aGUgY29kZSBub3cgcmV0dXJucyBhbiBlcnJvciAoYC1FSU5WQUxgKSwgd2hpY2ggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGluIHRoaXMgc2l0dWF0aW9uLgoKU28sIHRoZSBrZXkgaW1wcm92ZW1lbnQgaGVyZSBpcyB0aGUgYWRkZWQgZXJyb3IgaGFuZGxpbmcgYW5kIHJhbmdlIHZhbGlkYXRpb24uIEJ5IHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgZmlybXdhcmUgZGVzY3JpcHRvciwgaXQgbWFrZXMgdGhlIGRyaXZlciBtb3JlIHJlc2lzdGFudCB0byBwb3RlbnRpYWxseSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzbHkgY3JhZnRlZCBmaXJtd2FyZS4gR29vZCB3b3JrLiBOb3csIGxldCYjMzk7cyBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBwNTQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQNTRfQ09NTU9OXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAgNjpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXG4gICA5Olx0XHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xuICAxMDpcdFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxuICAxMTpcdFxuICAxMjpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMTM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFA1NF9VU0JcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgVVNCIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgVVNCXG4gIDIwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMjU6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMjY6XHRcbiAgMjc6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTR1c2IuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFA1NF9QQ0lcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgUENJIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgUENJXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0kgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbW9zdCBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGVcbiAgMzU6XHRcdCAgZnVsbG1hYyBwcmlzbTU0IGRyaXZlciBwbHVzIG1hbnkgZGV2aWNlcyB3aGljaCBhcmUgbm90XG4gIDM2Olx0XHQgIHN1cHBvcnRlZCBieSB0aGUgZnVsbG1hYyBkcml2ZXIvZmlybXdhcmUuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDM5Olx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0cGNpLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBQNTRfU1BJXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgU1BJX01BU1RFUlxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcbiAgNDg6XHRcdCAgc3VjaCBhcyBOb2tpYSYjMzk7cyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHNwaS5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgUDU0X1NQSV9ERUZBVUxUX0VFUFJPTVxuICA1MzpcdFx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZhbGxiYWNrIEVFUFJPTSBibG9iXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFA1NF9TUElcbiAgNTU6XHRcdGRlZmF1bHQgblxuICA1NjpcdFx0aGVscFxuICA1NzpcdFx0IFVubGlrZSB0aGUgUENJIG9yIFVTQiBkZXZpY2VzLCB0aGUgU1BJIHZhcmlhbnRzIGRvbiYjMzk7dCBoYXZlXG4gIDU4Olx0XHQgYSBkZWRpY2F0ZWQgRUVQUk9NIGNoaXAgdG8gc3RvcmUgYWxsIGRldmljZSBzcGVjaWZpYyB2YWx1ZXNcbiAgNTk6XHRcdCBmb3IgY2FsaWJyYXRpb24sIGNvdW50cnkgYW5kIGludGVyZmFjZSBzZXR0aW5ncy5cbiAgNjA6XHRcbiAgNjE6XHRcdCBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIGltYWdlIFwmIzM0OzM4MjYuZWVwcm9tXCYjMzQ7LCBpZiB0aGVcbiAgNjI6XHRcdCBmaWxlIGlzIHB1dCBhdCB0aGUgcmlnaHQgcGxhY2UuICh1c3VhbGx5IC9saWIvZmlybXdhcmUuKVxuICA2MzpcdFxuICA2NDpcdFx0IE9ubHkgaWYgdGhpcyByZXF1ZXN0IGZhaWxzLCB0aGlzIG9wdGlvbiB3aWxsIHByb3ZpZGUgYVxuICA2NTpcdFx0IGJhY2t1cCBzZXQgb2YgZ2VuZXJpYyB2YWx1ZXMgdG8gZ2V0IHRoZSBkZXZpY2Ugd29ya2luZy5cbiAgNjY6XHRcbiAgNjc6XHRcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgUDU0X0xFRFNcbiAgNzA6XHRcdGJvb2xcbiAgNzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgTUFDODAyMTFfTEVEUyBcdTAwMjZcdTAwMjYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBQNTRfQ09NTU9OKVxuICA3MjpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDExCgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDk3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMgZm9yIHA1NF9wYXJzZV9maXJtd2FyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGZ1enppbmcgYHA1NF9wYXJzZV9maXJtd2FyZWAgaXMgYSB3b3J0aHdoaWxlIGVuZGVhdm9yLiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBUaGUgZnVuY3Rpb24sIHBhcnQgb2YgdGhlIGBwNTRjb21tb25gIGRyaXZlciwgaXMgY2FsbGVkIGJ5IGBwNTR1c2JgLCB3aGljaCBpcyBhIFVTQiB3aXJlbGVzcyBkZXZpY2UgZHJpdmVyLiBVU0IgZGV2aWNlcyBhcmUgcmVhZGlseSBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbjsgdGhhdCBpcyBncmVhdCBiZWNhdXNlIGl0IGltcGxpZXMgYSBjbGVhciBhdHRhY2sgc3VyZmFjZS4gV2hlbiBhIHNpbXVsYXRlZCBVU0IgZGV2aWNlIG1hdGNoaW5nIHRoZSBgcDU0dV90YWJsZWAgSUQgdGFibGUgaXMgcGx1Z2dlZCBpbiwgYHA1NHVfcHJvYmVgIGlzIGNhbGxlZC4gVGhhdCBwcm9iZSBmdW5jdGlvbiByZXF1ZXN0cyBmaXJtd2FyZSBsb2FkaW5nLiBVbHRpbWF0ZWx5LCB0aGUgcmVsZXZhbnQgY2FsbHN0YWNrIGlzIGBwNTR1X3Byb2JlYCAtJmd0OyBgcDU0dV9sb2FkX2Zpcm13YXJlYCAtJmd0OyBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCAtJmd0OyBgcDU0dV9zdGFydF9vcHNgIC0mZ3Q7IGBwNTRfcGFyc2VfZmlybXdhcmVgLiBUaGUgcGF0aCBpcyB0aGVyZSwgYW5kIGl0IGlzIGFjY2Vzc2libGUhIFRoZSBwYXRjaGVkIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBhIGZpcm13YXJlIGJ1ZmZlciBuZWVkcyB0byBiZSBwYXJzZWQsIHdoaWNoIHNob3VsZCBiZSB0aGUgbm9ybWFsIGNhc2UgaW4gdGVzdGluZy9mdXp6aW5nIGVudmlyb25tZW50cy4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgYGRlc2MtJmd0O3J4X3N0YXJ0YCBhbmQgYGRlc2MtJmd0O3J4X2VuZGAsIGFzIHdlbGwgYXMgZGVzY3JpcHRvciBsZW5ndGggY2hlY2tpbmcsIHdpdGhpbiBgcDU0X3BhcnNlX2Zpcm13YXJlYC4KCk5vdywgbGV0JiMzOTtzIGNvbnN1bHQgdGhlIHJlbGV2YW50IGZ1enppbmcgY3JpdGVyaWEuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyB1bmRlciAmIzM0O0RyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywmIzM0OyB0aGUgVVNCIGRyaXZlciBjZXJ0YWlubHkgZml0cyB0aGF0IGRlc2NyaXB0aW9uLiBUaGUgbmV4dCBjcnVjaWFsIHBvaW50IGlzIHRoYXQgd2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4dHJhY3RlZCBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyLiBUaGVzZSB3b3VsZCBpbmNsdWRlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGl0c2VsZiBhbmQgcG90ZW50aWFsbHkgdGhlIGNhbGwgY2hhaW4sIGBwNTR1X3N0YXJ0X29wc2AgLyBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCAvIGBwNTR1X3Byb2JlYC4KCkltcG9ydGFudGx5LCBgcDU0X3BhcnNlX2Zpcm13YXJlYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIGBFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZmlybXdhcmUpO2AuIFBlcmZlY3Q7IHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyByZWFkaWx5IGFjY2Vzc2libGUuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgYFA1NF9DT01NT05gLCBgUDU0X1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYCBhcmUgbmVlZGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIGBQNTRfQ09NTU9OYCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAsIGBQNTRfVVNCYCBkZXBlbmRzIG9uIGBQNTRfQ09NTU9OICZhbXA7JmFtcDsgVVNCYCwgYFA1NF9QQ0lgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gJmFtcDsmYW1wOyBQQ0lgLCBhbmQgYFA1NF9TUElgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gJmFtcDsmYW1wOyBTUElfTUFTVEVSYC4gTm8gaGlkZGVuIGdvdGNoYXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXMgQyBjb2RlIHdpdGhpbiBhIGRyaXZlciwgc28gaXQgaXNuJiMzOTt0IGEgbm9uLWtlcm5lbCBvciBub24tZXhlY3V0YWJsZSBjaGFuZ2UuIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBpc24mIzM5O3QgYW4gaXNzdWU7IGBQNTRfVVNCYCBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24uIEZpbmFsbHksIHRoZSBleGVjdXRpb24gcGF0aCBpcyByZWFjaGFibGUgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSwgc28gdGhpcyBpc24mIzM5O3QgdW5yZWFjaGFibGUuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCkkmIzM5O2xsIGZpbmFsaXplIHRoZSBGb2N1c1N5bWJvbHMgYXM6IGBwNTRfcGFyc2VfZmlybXdhcmVgLCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCwgYHA1NHVfc3RhcnRfb3BzYCwgYW5kIGBwNTR1X3Byb2JlYC4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuCgpTbywgdGhlIGNvbmNpc2UgcmVhc29uaW5nIGlzIHRoaXM6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNyaXRpY2FsIHZhbGlkYXRpb24gZm9yIGZpcm13YXJlIGRlc2NyaXB0b3IgbGVuZ3RoIGFuZCBSWCByYW5nZSBzYW5pdHkgY2hlY2tzIGluIGBwNTRfcGFyc2VfZmlybXdhcmUoKWAuIFRoaXMgZnVuY3Rpb24gaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZm9yIFVTQiBQcmlzbTU0IHdpcmVsZXNzIGRldmljZXMgKGBwNTR1c2JgKSB2aWEgVVNCIGVtdWxhdGlvbi9nYWRnZXQgZnV6emluZy4gRnV6emluZyBwcm92aWRlcyBhIG1lYW5zIHRvIHZlcmlmeSB0aGF0IGZpcm13YXJlIHBhcnNpbmcgaGFuZGxlcyBtYWxmb3JtZWQgZGVzY3JpcHRvcnMgY29ycmVjdGx5IHdpdGhvdXQgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyByZWFkcywgb3IgaW52YWxpZCBzdGF0ZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtwNTR1X3N0YXJ0X29wcyYjMzQ7LAogICAgJiMzNDtwNTR1X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9maXJtd2FyZSYjMzQ7LAogICAgJiMzNDtwNTR1X3N0YXJ0X29wcyYjMzQ7LAogICAgJiMzNDtwNTR1X3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgc2FuaXR5IGNoZWNrcyBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGhzIGFuZCBSWCByYW5nZXMgaW4gcDU0X3BhcnNlX2Zpcm13YXJlKCkuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgcDU0dXNiIGRyaXZlciB0aHJvdWdoIFVTQiBnYWRnZXQvZGV2aWNlIGVtdWxhdGlvbiBmdXp6aW5nIGR1cmluZyBmaXJtd2FyZSBwYXJzaW5nIG9uIGRldmljZSBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBmaXJtd2FyZSBib290IHJlY29yZHMgKGBsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydGApLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkY2VkNDViYWJiNTIwOGRjM2QxNmY5ZGVmNzM5ODMxNDkyZDExMzcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMzozODowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jCmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYwpAQCAtNzksOSAmIzQzOzc5LDI2IEBAIGludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogCQljYXNlIEJSX0NPREVfREVTQ1I6IHsKIAkJCXN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPQogCQkJCShzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy0mZ3Q7ZGF0YTsKLQkJCXByaXYtJmd0O3J4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnhfc3RhcnQpOwotCQkJLyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqLwotCQkJcHJpdi0mZ3Q7cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnhfZW5kKSAtIDB4MzUwMDsKJiM0MzsJCQl1MzIgcnhfc3RhcnQsIHJ4X2VuZDsKJiM0MzsKJiM0MzsJCQlpZiAobGVuICZsdDsgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKHN0cnVjdCBib290cmVjX2Rlc2MsCiYjNDM7CQkJCQkJCSAgIHJ4X2tleWNhY2hlX3NpemUpLAomIzQzOwkJCQkJCSAgICAgICBzaXplb2YoKmJvb3RyZWMtJmd0O2RhdGEpKSkgewomIzQzOwkJCQl3aXBoeV9lcnIocHJpdi0mZ3Q7aHctJmd0O3dpcGh5LAomIzQzOwkJCQkJICAmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3J4X3N0YXJ0KTsKJiM0MzsJCQlyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9lbmQpOwomIzQzOwkJCWlmIChyeF9lbmQgJmx0OyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwICZsdDs9IHJ4X3N0YXJ0KSB7CiYjNDM7CQkJCXdpcGh5X2Vycihwcml2LSZndDtody0mZ3Q7d2lwaHksCiYjNDM7CQkJCQkgICYjMzQ7ZmlybXdhcmUgZGVzY3JpcHRvciBoYXMgaW52YWxpZCBSWCByYW5nZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcHJpdi0mZ3Q7cnhfc3RhcnQgPSByeF9zdGFydDsKJiM0MzsJCQlwcml2LSZndDtyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7CiAJCQlwcml2LSZndDtoZWFkcm9vbSA9IGRlc2MtJmd0O2hlYWRyb29tOwogCQkJcHJpdi0mZ3Q7dGFpbHJvb20gPSBkZXNjLSZndDt0YWlscm9vbTsKIAkJCXByaXYtJmd0O3ByaXZhY3lfY2FwcyA9IGRlc2MtJmd0O3ByaXZhY3lfY2FwczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpcm13YXJlIEkvTyBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGRpZmYgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY2AuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgYXJvdW5kIGxpbmUgNzksIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgcHVycG9zZS4gTXkgcGxhbiBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYHJlYWQtZmlsZWAgY2FsbDsgSSBuZWVkIHRvIGNvbXByZWhlbmQgZXhhY3RseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpcm13YXJlIEkvTyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uIHdpbGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdHdoaWxlIChib290cmVjLVx1MDAzZWRhdGEgXHUwMDNjPSBlbmRfZGF0YSBcdTAwMjZcdTAwMjYgKGJvb3RyZWMtXHUwMDNlZGF0YSAmIzQzO1xuICA1MTpcdFx0ICAgICAgIChsZW4gPSBsZTMyX3RvX2NwdShib290cmVjLVx1MDAzZWxlbikpKSBcdTAwM2M9IGVuZF9kYXRhKSB7XG4gIDUyOlx0XHRcdHUzMiBjb2RlID0gbGUzMl90b19jcHUoYm9vdHJlYy1cdTAwM2Vjb2RlKTtcbiAgNTM6XHRcdFx0c3dpdGNoIChjb2RlKSB7XG4gIDU0Olx0XHRcdGNhc2UgQlJfQ09ERV9DT01QT05FTlRfSUQ6XG4gIDU1Olx0XHRcdFx0cHJpdi1cdTAwM2Vmd19pbnRlcmZhY2UgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKVxuICA1NjpcdFx0XHRcdFx0XHQgICAgIGJvb3RyZWMtXHUwMDNlZGF0YSk7XG4gIDU3Olx0XHRcdFx0c3dpdGNoIChwcml2LVx1MDAzZWZ3X2ludGVyZmFjZSkge1xuICA1ODpcdFx0XHRcdGNhc2UgRldfTE04NjpcbiAgNTk6XHRcdFx0XHRjYXNlIEZXX0xNMjA6XG4gIDYwOlx0XHRcdFx0Y2FzZSBGV19MTTg3OiB7XG4gIDYxOlx0XHRcdFx0XHRjaGFyICppZnR5cGUgPSAoY2hhciAqKWJvb3RyZWMtXHUwMDNlZGF0YTtcbiAgNjI6XHRcdFx0XHRcdHdpcGh5X2luZm8ocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbiAgNjM6XHRcdFx0XHRcdFx0ICAgXCYjMzQ7cDU0IGRldGVjdGVkIGEgTE0lYyVjIGZpcm13YXJlXFxuXCYjMzQ7LFxuICA2NDpcdFx0XHRcdFx0XHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XG4gIDY1Olx0XHRcdFx0XHRicmVhaztcbiAgNjY6XHRcdFx0XHRcdH1cbiAgNjc6XHRcdFx0XHRjYXNlIEZXX0ZNQUM6XG4gIDY4Olx0XHRcdFx0ZGVmYXVsdDpcbiAgNjk6XHRcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA3MDpcdFx0XHRcdFx0XHQgIFwmIzM0O3Vuc3VwcG9ydGVkIGZpcm13YXJlXFxuXCYjMzQ7KTtcbiAgNzE6XHRcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuICA3MjpcdFx0XHRcdH1cbiAgNzM6XHRcdFx0XHRicmVhaztcbiAgNzQ6XHRcdFx0Y2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OOlxuICA3NTpcdFx0XHRcdC8qIDI0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFsbCBmaXJtd2FyZXMgKi9cbiAgNzY6XHRcdFx0XHRpZiAoc3RybmxlbigodW5zaWduZWQgY2hhciAqKSBib290cmVjLVx1MDAzZWRhdGEsIDI0KSBcdTAwM2MgMjQpXG4gIDc3Olx0XHRcdFx0XHRmd192ZXJzaW9uID0gKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy1cdTAwM2VkYXRhO1xuICA3ODpcdFx0XHRcdGJyZWFrO1xuICA3OTpcdFx0XHRjYXNlIEJSX0NPREVfREVTQ1I6IHtcbiAgODA6XHRcdFx0XHRzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID1cbiAgODE6XHRcdFx0XHRcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cdTAwM2VkYXRhO1xuICA4MjpcdFx0XHRcdHUzMiByeF9zdGFydCwgcnhfZW5kO1xuICA4MzpcdFxuICA4NDpcdFx0XHRcdGlmIChsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZChzdHJ1Y3QgYm9vdHJlY19kZXNjLFxuICA4NTpcdFx0XHRcdFx0XHRcdFx0ICAgcnhfa2V5Y2FjaGVfc2l6ZSksXG4gIDg2Olx0XHRcdFx0XHRcdFx0ICAgICAgIHNpemVvZigqYm9vdHJlYy1cdTAwM2VkYXRhKSkpIHtcbiAgODc6XHRcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA4ODpcdFx0XHRcdFx0XHQgIFwmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxuXCYjMzQ7KTtcbiAgODk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA5MDpcdFx0XHRcdH1cbiAgOTE6XHRcbiAgOTI6XHRcdFx0XHRyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfc3RhcnQpO1xuICA5MzpcdFx0XHRcdHJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKTtcbiAgOTQ6XHRcdFx0XHRpZiAocnhfZW5kIFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFx1MDAzYz0gcnhfc3RhcnQpIHtcbiAgOTU6XHRcdFx0XHRcdHdpcGh5X2Vycihwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuICA5NjpcdFx0XHRcdFx0XHQgIFwmIzM0O2Zpcm13YXJlIGRlc2NyaXB0b3IgaGFzIGludmFsaWQgUlggcmFuZ2VcXG5cJiMzNDspO1xuICA5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDk4Olx0XHRcdFx0fVxuICA5OTpcdFxuIDEwMDpcdFx0XHRcdHByaXYtXHUwMDNlcnhfc3RhcnQgPSByeF9zdGFydDtcbiAxMDE6XHRcdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDtcbiAxMDI6XHRcdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbiAxMDM6XHRcdFx0XHRwcml2LVx1MDAzZXRhaWxyb29tID0gZGVzYy1cdTAwM2V0YWlscm9vbTtcbiAxMDQ6XHRcdFx0XHRwcml2LVx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXHUwMDNlcHJpdmFjeV9jYXBzO1xuIDEwNTpcdFx0XHRcdHByaXYtXHUwMDNlcnhfa2V5Y2FjaGVfc2l6ZSA9IGRlc2MtXHUwMDNlcnhfa2V5Y2FjaGVfc2l6ZTtcbiAxMDY6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoYm9vdHJlYy1cdTAwM2VsZW4pID09IDExKVxuIDEwNzpcdFx0XHRcdFx0cHJpdi1cdTAwM2VyeF9tdHUgPSBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZXJ4X210dSk7XG4gMTA4Olx0XHRcdFx0ZWxzZVxuIDEwOTpcdFx0XHRcdFx0cHJpdi1cdTAwM2VyeF9tdHUgPSAoc2l6ZV90KVxuIDExMDpcdFx0XHRcdFx0XHQweDYyMCAtIHByaXYtXHUwMDNldHhfaGRyX2xlbjtcbiAxMTE6XHRcdFx0XHRtYXhsZW4gPSBwcml2LVx1MDAzZXR4X2hkcl9sZW4gJiM0MzsgLyogVVNCIGRldmljZXMgKi9cbiAxMTI6XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSAmIzQzO1xuIDExMzpcdFx0XHRcdFx0IDQgJiM0MzsgLyogcnggYWxpZ25tZW50ICovXG4gMTE0Olx0XHRcdFx0XHQgSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDtcbiAxMTU6XHRcdFx0XHRpZiAocHJpdi1cdTAwM2VyeF9tdHUgXHUwMDNlIG1heGxlbiBcdTAwMjZcdTAwMjYgUEFHRV9TSVpFID09IDQwOTYpIHtcbiAxMTY6XHRcdFx0XHRcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7cDU0OiByeF9tdHUgcmVkdWNlZCBmcm9tICVkIFwmIzM0O1xuIDExNzpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3RvICVkXFxuXCYjMzQ7LCBwcml2LVx1MDAzZXJ4X210dSwgbWF4bGVuKTtcbiAxMTg6XHRcdFx0XHRcdHByaXYtXHUwMDNlcnhfbXR1ID0gbWF4bGVuO1xuIDExOTpcdFx0XHRcdH1cbiAxMjA6XHRcdFx0XHRicmVhaztcbiAxMjE6XHRcdFx0XHR9XG4gMTIyOlx0XHRcdGNhc2UgQlJfQ09ERV9FWFBPU0VEX0lGOlxuIDEyMzpcdFx0XHRcdGV4cF9pZiA9IChzdHJ1Y3QgZXhwX2lmICopIGJvb3RyZWMtXHUwMDNlZGF0YTtcbiAxMjQ6XHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAobGVuICogc2l6ZW9mKCpleHBfaWYpIC8gNCk7IGkmIzQzOyYjNDM7KVxuIDEyNTpcdFx0XHRcdFx0aWYgKGV4cF9pZltpXS5pZl9pZCA9PSBjcHVfdG9fbGUxNihJRl9JRF9MTUFDKSlcbiAxMjY6XHRcdFx0XHRcdFx0cHJpdi1cdTAwM2Vmd192YXIgPSBsZTE2X3RvX2NwdShleHBfaWZbaV0udmFyaWFudCk7XG4gMTI3Olx0XHRcdFx0YnJlYWs7XG4gMTI4Olx0XHRcdGNhc2UgQlJfQ09ERV9ERVBFTkRFTlRfSUY6XG4gMTI5Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IEZpcm13YXJlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiB0aGUgZmlybXdhcmUgZGVzY3JpcHRvciBwYXJzaW5nLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGNydWNpYWwgc2FuaXR5IGNoZWNrcywgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIHVuZGVyZmxvdyBpc3N1ZXMuCgpTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHR3byBrZXkgY29uY2VybnM6CgoxLiAgVGhlcmUmIzM5O3MgYSBjaGVjayBvbiBgbGVuYCB0byBtYWtlIHN1cmUgaXQgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYSBgYm9vdHJlY19kZXNjYCBzdHJ1Y3R1cmUgd2hlbiBhY2Nlc3NpbmcgaXRzIG1lbWJlcnMuIEl0JiMzOTtzIHVzaW5nIGBESVZfUk9VTkRfVVBgIGFuZCBgb2Zmc2V0b2ZlbmRgIHRvIGVuc3VyZSB0aGF0IGl0IG9ubHkgYWNjZXNzZXMgdmFsaWQgbWVtb3J5IHdpdGhpbiB0aGUgZGVzY3JpcHRvciYjMzk7cyBkZWZpbmVkIGJvdW5kcy4gVGhpcyBsb29rcyBsaWtlIGEgcHJlZW1wdGl2ZSBtZWFzdXJlIGFnYWluc3QgYSBidWZmZXIgb3ZlcmZsb3csIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuCgoyLiAgVGhlIHNlY29uZCBjaGVjayBvbiBgcnhfZW5kYCByZWxhdGVzIHRvIHRoZSByZWNlaXZlciByYW5nZS4gSXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCB0aGUgcG9zc2liaWxpdHkgb2YgYHJ4X2VuZGAgYmVpbmcgYW4gaW52YWxpZCB2YWx1ZSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGByeF9zdGFydGAuIEl0IHNlZW1zIHRoYXQgYW4gaW52YWxpZCBgcnhfZW5kYCBjb3VsZCBsZWFkIHRvIGFuIHVuZGVyZmxvdywgd2hpY2ggd291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIHZhcmlhYmxlcyB3aXRoaW4gdGhlIHA1NCBkcml2ZXImIzM5O3MgY29kZWJhc2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gZnVsbHkgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgaWYgdGhpcyBpcyBhIGtub3duIHJpc2sgaW4gb3VyIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwYCBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9gIGRpcmVjdG9yeSB0byB0cmFjayBkb3duIHRoZSBsb2NhdGlvbnMgd2hlcmUgYHJ4X3N0YXJ0YCBhbmQgYHJ4X2VuZGAgYXJlIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgd2lsbCBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeF8oc3RhcnR8ZW5kKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYz0yNz1pbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozOTpcdGlmIChwcml2LVx1MDAzZXJ4X3N0YXJ0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy04MS1cdFx0XHRcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo4MjpcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy05MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTI6XHRcdFx0cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJ4X3N0YXJ0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTM6XHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo5NDpcdFx0XHRpZiAocnhfZW5kIFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFx1MDAzYz0gcnhfc3RhcnQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtOTUtXHRcdFx0XHR3aXBoeV9lcnIocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMDA6XHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMDE6XHRcdFx0cHJpdi1cdTAwM2VyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTEwMi1cdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTMxMD1pbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzE2Olx0aWYgKHVubGlrZWx5KF9yZXFfaWQgXHUwMDNjIHByaXYtXHUwMDNlcnhfc3RhcnQgfHwgX3JlcV9pZCBcdTAwM2UgcHJpdi1cdTAwM2VyeF9lbmQpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9MzMwPWludCBwNTRfc2V0dXBfbWFjKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzgwLVx0XHRtZW1zZXQoc2V0dXAtXHUwMDNldjEucnRzX3JhdGVzLCAwLCA4KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzgxOlx0XHRzZXR1cC1cdTAwM2V2MS5yeF9hZGRyID0gY3B1X3RvX2xlMzIocHJpdi1cdTAwM2VyeF9lbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zODItXHRcdHNldHVwLVx1MDAzZXYxLm1heF9yeCA9IGNwdV90b19sZTE2KHByaXYtXHUwMDNlcnhfbXR1KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4Ni1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjM4NzpcdFx0c2V0dXAtXHUwMDNldjIucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtXHUwMDNlcnhfZW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzg4LVx0XHRzZXR1cC1cdTAwM2V2Mi5tYXhfcnggPSBjcHVfdG9fbGUxNihwcml2LVx1MDAzZXJ4X210dSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTQ3PXN0cnVjdCBib290cmVjX2Rlc2Mge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC00OS1cdF9fbGUxNiBmbGFncztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDo1MDpcdF9fbGUzMiByeF9zdGFydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDo1MTpcdF9fbGUzMiByeF9lbmQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtNTItXHR1OCBoZWFkcm9vbTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MTY0PXN0cnVjdCBwNTRfY29tbW9uIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMTc1LVx0LyogbWVtb3J5IG1hbmFnZW1lbnQgKGFzIHNlZW4gYnkgdGhlIGZpcm13YXJlKSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjE3NjpcdHUzMiByeF9zdGFydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoxNzc6XHR1MzIgcnhfZW5kO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oLTE3OC1cdHUxNiByeF9tdHU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz0yNz1zdGF0aWMgdm9pZCBwNTRfZHVtcF90eF9xdWV1ZShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzo0MjpcdHByZXZfYWRkciA9IHByaXYtXHUwMDNlcnhfc3RhcnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTQzLVx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2cHJpdi1cdTAwM2V0eF9xdWV1ZSwgc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy02MC1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjE6XHRmcmVlID0gcHJpdi1cdTAwM2VyeF9lbmQgLSBwcmV2X2FkZHI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTYyLVx0bGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgZnJlZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz03OT1zdGF0aWMgaW50IHA1NF9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTg1LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6ODY6XHR1MzIgbGFzdF9hZGRyID0gcHJpdi1cdTAwM2VyeF9zdGFydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6ODc6XHR1MzIgdGFyZ2V0X2FkZHIgPSBwcml2LVx1MDAzZXJ4X3N0YXJ0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy04OC1cdHUxNiBsZW4gPSBwcml2LVx1MDAzZWhlYWRyb29tICYjNDM7IHNrYi1cdTAwM2VsZW4gJiM0MzsgcHJpdi1cdTAwM2V0YWlscm9vbSAmIzQzOyAzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtMTE5LVx0aWYgKHVubGlrZWx5KCF0YXJnZXRfc2tiKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzoxMjA6XHRcdGlmIChwcml2LVx1MDAzZXJ4X2VuZCAtIGxhc3RfYWRkciBcdTAwM2U9IGxlbikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy0xMjEtXHRcdFx0dGFyZ2V0X3NrYiA9IHNrYl9wZWVrX3RhaWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9xdWV1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzQKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogNjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGaXJtd2FyZSBQYXJzaW5nIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW4gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgYGJvb3RyZWMtJmd0O2RhdGFgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB3ZSBoYWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIHByb2JsZW1zOgoKRmlyc3QsIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZywgd2Ugd2VyZSBwb3RlbnRpYWxseSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJvb3RyZWMtJmd0O2RhdGFgIGJ1ZmZlciB3aGVuIGFjY2Vzc2luZyBmaWVsZHMgbGlrZSBgcnhfc3RhcnRgLCBgcnhfZW5kYCwgZXRjLiwgd2hpY2ggY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcnJ1bnMuIEtBU0FOIHdvdWxkIHBpY2sgdGhhdCB1cCB0aG91Z2guCgpTZWNvbmQsIHRoZSBsaW5lIGBwcml2LSZndDtyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyeF9lbmQpIC0gMHgzNTAwO2AgY291bGQgdW5kZXJmbG93LiBJZiBgcnhfZW5kYCB3YXMgbGVzcyB0aGFuIGAweDM1MDBgLCBvciBpZiB0aGUgcmVzdWx0IG9mIHRoYXQgc3VidHJhY3Rpb24gd2FzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgcnhfc3RhcnRgLCB3ZSYjMzk7ZCBoYXZlIGludGVnZXIgdW5kZXJmbG93LCBwb3RlbnRpYWxseSBjcmVhdGluZyBpbXByb3BlciBib3VuZHMgZm9yIFRYL1JYIHF1ZXVlcy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IEtNU0FOIHJlcXVpcmVtZW50cy4gRG8gd2UgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBpbmZvIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8sIGJlY2F1c2UgdGhlIGZpcm13YXJlIGJ1ZmZlciBpcyBhbHJlYWR5IGxvYWRlZCBvciBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gc28gaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGRlYWwgd2l0aCBpdC4gVGhlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIHZhcmlhYmxlcyBhcmUgbG9jYWwsIGFuZCBpbml0aWFsaXplZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgYGxlMzJfdG9fY3B1KClgIGNvdW50ZXJwYXJ0cy4gVGhlIGJvdW5kcyBjaGVjayB3ZSBwdXQgaW4gcGxhY2Ugbm93IChgbGVuICZsdDsgLi4uYCkgbWFrZXMgc3VyZSB3ZSBkb24mIzM5O3QgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSByYW5nZSBjaGVjayBhbHNvIHByZXZlbnRzIHRoZSBhcml0aG1ldGljIHVuZGVyZmxvdy4gS0FTQU4gYWxyZWFkeSBhZGRyZXNzZXMgdGhlIGJvdW5kcyBjaGVjay9vdmVycnVuIGlzc3VlLgoKU28sIHRoaXMgaXNuJiMzOTt0IGEgS01TQU4gaXNzdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHJlYWRzIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIHRoZSBib3VuZHMgY2hlY2sgKnByZXZlbnRzKiBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuIExldCYjMzk7cyBjb25maXJtIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgcDU0X3BhcnNlX2Zpcm13YXJlKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGZpcm13YXJlIGJvb3QgcmVjb3JkcyAoYGxlbiBcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKC4uLikpYCkgYW5kIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cvaW52YWxpZCBSWCByYW5nZSBjYWxjdWxhdGlvbiAoYHJ4X2VuZCBcdTAwM2MgMHgzNTAwIHx8IHJ4X2VuZCAtIDB4MzUwMCBcdTAwM2M9IHJ4X3N0YXJ0YCkuIFxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYW5kIGludGVnZXIgYXJpdGhtZXRpYyBidWdzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHN1Y2ggYXMgS0FTQU4gYW5kIFVCU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYCB0byBwcmV2ZW50IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBmaXJtd2FyZSBib290IHJlY29yZHMgKGBsZW4gXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydGApLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjA3Ljc1OTgxMzY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDIwOTQwNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZmlybXdhcmVcIixcbiAgICBcInA1NHVfc3RhcnRfb3BzXCIsXG4gICAgXCJwNTR1X3Byb2JlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIGluIGBwNTRfcGFyc2VfZmlybXdhcmUoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gZmlybXdhcmUgYm9vdCByZWNvcmRzIChgbGVuIFxcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKC4uLikpYCkgYW5kIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cvaW52YWxpZCBSWCByYW5nZSBjYWxjdWxhdGlvbiAoYHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnRgKS4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBzYW5pdHkgY2hlY2tzIGZvciBmaXJtd2FyZSBkZXNjcmlwdG9yIGxlbmd0aHMgYW5kIFJYIHJhbmdlcyBpbiBwNTRfcGFyc2VfZmlybXdhcmUoKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBwNTR1c2IgZHJpdmVyIHRocm91Z2ggVVNCIGdhZGdldC9kZXZpY2UgZW11bGF0aW9uIGZ1enppbmcgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcgb24gZGV2aWNlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODowNy43NTk4MjA5MjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzk0MTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMzozODowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xcbmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcXG5AQCAtNzksOSArNzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuIFxcdFxcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID1cXG4gXFx0XFx0XFx0XFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVxcdTAwM2VkYXRhO1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X3N0YXJ0KTtcXG4tXFx0XFx0XFx0LyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqL1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9lbmQpIC0gMHgzNTAwO1xcbitcXHRcXHRcXHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcXG4rXFxuK1xcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcnhfa2V5Y2FjaGVfc2l6ZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXFx1MDAzZWRhdGEpKSkge1xcbitcXHRcXHRcXHRcXHR3aXBoeV9lcnIocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIHRvbyBzaG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X3N0YXJ0KTtcXG4rXFx0XFx0XFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlcnhfZW5kKTtcXG4rXFx0XFx0XFx0aWYgKHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnQpIHtcXG4rXFx0XFx0XFx0XFx0d2lwaHlfZXJyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiZmlybXdhcmUgZGVzY3JpcHRvciBoYXMgaW52YWxpZCBSWCByYW5nZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZWhlYWRyb29tID0gZGVzYy1cXHUwMDNlaGVhZHJvb207XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZXRhaWxyb29tID0gZGVzYy1cXHUwMDNldGFpbHJvb207XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXFx1MDAzZXByaXZhY3lfY2FwcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MDguMjI0NDM5NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2OTI1NjQ5ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZmlybXdhcmVcIixcbiAgICBcInA1NHVfc3RhcnRfb3BzXCIsXG4gICAgXCJwNTR1X3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBzYW5pdHkgY2hlY2tzIGZvciBmaXJtd2FyZSBkZXNjcmlwdG9yIGxlbmd0aHMgYW5kIFJYIHJhbmdlcyBpbiBwNTRfcGFyc2VfZmlybXdhcmUoKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBwNTR1c2IgZHJpdmVyIHRocm91Z2ggVVNCIGdhZGdldC9kZXZpY2UgZW11bGF0aW9uIGZ1enppbmcgZHVyaW5nIGZpcm13YXJlIHBhcnNpbmcgb24gZGV2aWNlIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcbmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG5AQCAtNzksOSArNzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xuIFx0XHRcdHN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPVxuIFx0XHRcdFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVx1MDAzZWRhdGE7XG4tXHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfc3RhcnQpO1xuLVx0XHRcdC8qIEZJWE1FIGFkZCBzYW5pdHkgY2hlY2tpbmcgKi9cbi1cdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKSAtIDB4MzUwMDtcbitcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzYyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYyxcbitcdFx0XHRcdFx0XHRcdCAgIHJ4X2tleWNhY2hlX3NpemUpLFxuK1x0XHRcdFx0XHRcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXHUwMDNlZGF0YSkpKSB7XG4rXHRcdFx0XHR3aXBoeV9lcnIocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICBcImZpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4rXHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuK1x0XHRcdGlmIChyeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydCkge1xuK1x0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4rXHRcdFx0XHRcdCAgXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHByaXYtXHUwMDNlcnhfc3RhcnQgPSByeF9zdGFydDtcbitcdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDtcbiBcdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXRhaWxyb29tID0gZGVzYy1cdTAwM2V0YWlscm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXHUwMDNlcHJpdmFjeV9jYXBzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MDguMjI0NDQwODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDM1MDY3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHNpdHRpbmcgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBgcDU0YCBhY3R1YWxseSAqaXMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgaGVyZSwgc28gSSdtIHRoaW5raW5nLCB3aGljaCBzcGVjaWZpYyBkcml2ZXJzIHV0aWxpemUgdGhlIHA1NCBpbmZyYXN0cnVjdHVyZT8gSXMgaXQganVzdCBwNTR1c2IsIHA1NHBjaSwgYW5kIHA1NHNwaSwgb3IgYXJlIHRoZXJlIG90aGVycyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgd2lsbCBoZWxwIG1lIGJvdW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGZ1enppbmcgbGFuZHNjYXBlIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuIElzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB0aHJvdWdoIGFueSBleGlzdGluZyBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBJJ20gdGhpbmtpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIFVTQiBlbXVsYXRpb24sIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbnMsIG9yIGV2ZW4gbWFjODAyMTEgaW50ZWdyYXRpb24uIEtub3dpbmcgaG93IHRoZSBjb2RlIGlzIGV4cG9zZWQgdG8gcG90ZW50aWFsIGZ1enppbmcgaW5wdXRzIGlzIGNyaXRpY2FsLiBXaGljaCBrZXJuZWwgY29uZmlncyBhcmUgbmVlZGVkIHRvIGVuYWJsZSB0aGUgYWZmZWN0ZWQgcGF0aHM/IFdoaWNoIHN5bWJvbHMgYXJlIGF0IHBsYXkgaGVyZT9cblxuU28sIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nLiBUaW1lIHRvIGJ1c3Qgb3V0IHRoZSBncmVwcyBhbmQgc3RhcnQgcmVhZGluZyB0aG9zZSBmaWxlcy4gR290dGEgZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBnYXRoZXJpbmcgdGhlIHJhdyBkYXRhIHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MTcuNjU5NTEwNzQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjE1NTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjc0OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9Mj1jb25maWcgUDU0X0NPTU1PTlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTItXFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxMzpcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxNTpcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9MTc9Y29uZmlnIFA1NF9VU0JcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTI0LVxcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6MjU6XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6Mjc6XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0dXNiLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTI5PWNvbmZpZyBQNTRfUENJXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy0zOC1cXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6Mzk6XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc6NDE6XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0cGNpLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTQzPWNvbmZpZyBQNTRfU1BJXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy00OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzo1MDpcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRzcGkuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctNTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWc9NTI9Y29uZmlnIFA1NF9TUElfREVGQVVMVF9FRVBST01cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjY3OlxcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZy02OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGU6MjpwNTRjb21tb24tb2Jqc1xcdFxcdFxcdDo9IGVlcHJvbS5vIGZ3aW8ubyB0eHJ4Lm8gbWFpbi5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjM6cDU0Y29tbW9uLSQoQ09ORklHX1A1NF9MRURTKVxcdCs9IGxlZC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1A1NF9DT01NT04pXFx0Kz0gcDU0Y29tbW9uLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUDU0X1VTQilcXHRcXHQrPSBwNTR1c2Iub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QNTRfUENJKVxcdFxcdCs9IHA1NHBjaS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1A1NF9TUEkpXFx0XFx0Kz0gcDU0c3BpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjU6I2luY2x1ZGUgXFxcInA1NC5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNi0jaW5jbHVkZSBcXFwiZWVwcm9tLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI5OnN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcDU0X2JncmF0ZXNbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzAtXFx0eyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAwLCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0NDpzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHA1NF9hcmF0ZXNbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDUtXFx0eyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1NTpzdGF0aWMgc3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5IHA1NF9yc3NpX2RlZmF1bHQgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU2LVxcdC8qXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcxOnN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyLVxcdHUxNiBmcmVxO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3OTpzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgwOlxcdHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqY2hhbm5lbHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgxLVxcdHNpemVfdCBlbnRyaWVzO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4NjpzdGF0aWMgaW50IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEodTE2IGZyZXEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05OT1zdGF0aWMgaW50IHNhbWVfYmFuZCh1MTYgZnJlcSwgdTE2IGZyZXEyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMDAte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDE6XFx0cmV0dXJuIHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSkgPT0gcDU0X2dldF9iYW5kX2Zyb21fZnJlcShmcmVxMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwMi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTA0OnN0YXRpYyBpbnQgcDU0X2NvbXBhcmVfY2hhbm5lbHMoY29uc3Qgdm9pZCAqX2EsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwNS1cXHRcXHRcXHRcXHRjb25zdCB2b2lkICpfYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTA2LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTA3OlxcdGNvbnN0IHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqYSA9IF9hO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMDg6XFx0Y29uc3Qgc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICpiID0gX2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEwOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExMzpzdGF0aWMgaW50IHA1NF9jb21wYXJlX3Jzc2ljaGFuKGNvbnN0IHZvaWQgKl9hLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTQtXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqX2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTExNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjExNjpcXHRjb25zdCBzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKmEgPSBfYTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTE3OlxcdGNvbnN0IHN0cnVjdCBwNTRfcnNzaV9kYl9lbnRyeSAqYiA9IF9iO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTIxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxMjI6c3RhdGljIGludCBwNTRfZmlsbF9iYW5kX2JpdHJhdGVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTIzLVxcdFxcdFxcdFxcdCAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZF9lbnRyeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xMjktXFx0Y2FzZSBOTDgwMjExX0JBTkRfMkdIWjpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTMwOlxcdFxcdGJhbmRfZW50cnktXFx1MDAzZWJpdHJhdGVzID0gcDU0X2JncmF0ZXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzMTpcXHRcXHRiYW5kX2VudHJ5LVxcdTAwM2VuX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYmdyYXRlcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTEzMi1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTMzLVxcdGNhc2UgTkw4MDIxMV9CQU5EXzVHSFo6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzNDpcXHRcXHRiYW5kX2VudHJ5LVxcdTAwM2ViaXRyYXRlcyA9IHA1NF9hcmF0ZXM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjEzNTpcXHRcXHRiYW5kX2VudHJ5LVxcdTAwM2VuX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYXJhdGVzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTM2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE0My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTQ0OnN0YXRpYyBpbnQgcDU0X2dlbmVyYXRlX2JhbmQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNDU6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTQ2LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50ICpjaGFuX251bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0xNDgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNDk6XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE1MC1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICp0bXAsICpvbGQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTY1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzoxNjY6XFx0cmV0ID0gcDU0X2ZpbGxfYmFuZF9iaXRyYXRlcyhkZXYsIHRtcCwgYmFuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE2Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTE3MS1cXHRcXHRcXHQgICAoaSBcXHUwMDNjIGxpc3QtXFx1MDAzZWVudHJpZXMpOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MTcyOlxcdFxcdHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqY2hhbiA9IFxcdTAwMjZsaXN0LVxcdTAwM2VjaGFubmVsc1tpXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMTczLVxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqZGVzdCA9IFxcdTAwMjZ0bXAtXFx1MDAzZWNoYW5uZWxzW2pdO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTIzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjMxOnN0YXRpYyBzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKnA1NF91cGRhdGVfY2hhbm5lbF9wYXJhbShzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjMyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTE2IGZyZXEsIHUxNiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTIzNC1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MjM1OlxcdHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yMzYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMjUwLVxcdFxcdC8qIGVudHJ5IGRvZXMgbm90IGV4aXN0IHlldC4gSW5pdGlhbGl6ZSBhIG5ldyBvbmUuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI1MTpcXHRcXHRpbnQgYmFuZCA9IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI1Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0yNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjI3NjpzdGF0aWMgaW50IHA1NF9nZXRfbWF4cG93ZXIoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTI3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozMTk6c3RhdGljIGludCBwNTRfZ2VuZXJhdGVfY2hhbm5lbF9saXN0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTMyMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjMyMTpcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6MzIyOlxcdHN0cnVjdCBwNTRfY2hhbm5lbF9saXN0ICpsaXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zMjMtXFx0dW5zaWduZWQgaW50IGksIGosIGssIG1heF9jaGFubmVsX251bTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zNTAtXFx0bGlzdC1cXHUwMDNlbWF4X2VudHJpZXMgPSBtYXhfY2hhbm5lbF9udW07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM1MTpcXHRsaXN0LVxcdTAwM2VjaGFubmVscyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnksIG1heF9jaGFubmVsX251bSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM1Mi1cXHRpZiAoIWxpc3QtXFx1MDAzZWNoYW5uZWxzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzU5LVxcdFxcdFxcdGZyZXEgPSBsZTE2X3RvX2NwdShwcml2LVxcdTAwM2VpcV9hdXRvY2FsW2ldLmZyZXEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozNjA6XFx0XFx0XFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NBTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM2MS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzYzLVxcdFxcdGlmIChpIFxcdTAwM2MgcHJpdi1cXHUwMDNlb3V0cHV0X2xpbWl0LVxcdTAwM2VlbnRyaWVzKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM2NDpcXHRcXHRcXHRzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKnRtcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzY1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3MS1cXHRcXHRcXHRmcmVxID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikgZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3MjpcXHRcXHRcXHR0bXAgPSBwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0obGlzdCwgZnJlcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzczLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBDSEFOX0hBU19MSU1JVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3NC1cXHRcXHRcXHRpZiAodG1wKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM3NTpcXHRcXHRcXHRcXHR0bXAtXFx1MDAzZW1heF9wb3dlciA9IHA1NF9nZXRfbWF4cG93ZXIocHJpdiwgZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM3Ni1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozODU6XFx0XFx0XFx0cDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NVUlZFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzg2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zODktXFx0Lyogc29ydCB0aGUgY2hhbm5lbCBsaXN0IGJ5IGZyZXF1ZW5jeSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzozOTA6XFx0c29ydChsaXN0LVxcdTAwM2VjaGFubmVscywgbGlzdC1cXHUwMDNlZW50cmllcywgc2l6ZW9mKHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjM5MTpcXHQgICAgIHA1NF9jb21wYXJlX2NoYW5uZWxzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtMzkyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTM5NC1cXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIE5VTV9OTDgwMjExX0JBTkRTOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Mzk1OlxcdFxcdGlmIChwNTRfZ2VuZXJhdGVfYmFuZChkZXYsIGxpc3QsIFxcdTAwMjZrLCBpKSA9PSAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy0zOTYtXFx0XFx0XFx0aisrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDE2OnN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQxNy1cXHRcXHRcXHQgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00MTgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0MTk6XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQyMDpcXHRzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlICpkc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQyMS1cXHRzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjAgKnNyYztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00NjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQ2ODpzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00NjktXFx0XFx0XFx0ICAgIHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDcwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NDcxOlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0NzI6XFx0c3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSAqZHN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy00NzMtXFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxICpzcmM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTA6c3RhdGljIGNvbnN0IGNoYXIgKnA1NF9yZl9jaGlwc1tdID0geyBcXFwiSU5WQUxJRC0wXFxcIiwgXFxcIkR1ZXR0ZTNcXFwiLCBcXFwiRHVldHRlMlxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUxMS1cXHRcXFwiRnJpc2JlZVxcXCIsIFxcXCJYYm93XFxcIiwgXFxcIkxvbmdib3dcXFwiLCBcXFwiSU5WQUxJRC02XFxcIiwgXFxcIklOVkFMSUQtN1xcXCIgfTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTM6c3RhdGljIGludCBwNTRfcGFyc2VfcnNzaWNhbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTUxNC1cXHRcXHRcXHQgICAgIHU4ICpkYXRhLCBpbnQgbGVuLCB1MTYgdHlwZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTE1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTE2OlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo1MTc6XFx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTE4LVxcdHNpemVfdCBkYl9sZW4sIGVudHJpZXM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNTg1LVxcdC8qIHNvcnQgdGhlIGxpc3QgYnkgY2hhbm5lbCBmcmVxdWVuY3kgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NTg2OlxcdHNvcnQoZW50cnksIGVudHJpZXMsIHNpemVvZigqZW50cnkpLCBwNTRfY29tcGFyZV9yc3NpY2hhbiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTU4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy01OTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYwMDpzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnA1NF9yc3NpX2ZpbmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIGNvbnN0IHUxNiBmcmVxKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MDEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo2MDI6XFx0c3RydWN0IHA1NF9yc3NpX2RiX2VudHJ5ICplbnRyeTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjAzLVxcdGludCBpLCBmb3VuZCA9IC0xO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYwNS1cXHRpZiAoIXByaXYtXFx1MDAzZXJzc2lfZGIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYwNjpcXHRcXHRyZXR1cm4gXFx1MDAyNnA1NF9yc3NpX2RlZmF1bHQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTYwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYyODpcXHRyZXR1cm4gZm91bmQgXFx1MDAzYyAwID8gXFx1MDAyNnA1NF9yc3NpX2RlZmF1bHQgOiBcXHUwMDI2ZW50cnlbZm91bmRdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MjktfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02MzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjYzMTpzdGF0aWMgdm9pZCBwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjMyLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo2NjA6c3RhdGljIGludCBwNTRfY29udmVydF9vdXRwdXRfbGltaXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjYxLVxcdFxcdFxcdFxcdCAgICAgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTY2Mi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjY2MzpcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNjY0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTY5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Njk4OnN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy02OTktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCB0b3RhbF9sZW4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcwMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcwMTpcXHRzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqZHN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MDItXFx0c2l6ZV90IHBheWxvYWRfbGVuLCBlbnRyaWVzLCBlbnRyeV9zaXplLCBvZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3MjU6aW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjcyNzpcXHRzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzI4LVxcdHN0cnVjdCBlZXByb21fcGRhX3dyYXAgKndyYXA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzU3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3NTg6XFx0XFx0XFx0ZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LVxcdTAwM2VkYXRhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03NTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGF0YV9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc3Mi1cXHRcXHRcXHRjYXNlIDA6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc3MzpcXHRcXHRcXHRcXHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc3NC1cXHRcXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzc1LVxcdFxcdFxcdGNhc2UgMTpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6Nzc2OlxcdFxcdFxcdFxcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzc3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc5OS1cXHRcXHRjYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjgwMDpcXHRcXHRcXHRwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KGRldiwgZW50cnktXFx1MDAzZWRhdGEsIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODAxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgxOC1cXHRcXHRjYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0VYVEVOREVEOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4MTk6XFx0XFx0XFx0ZXJyID0gcDU0X3BhcnNlX3Jzc2ljYWwoZGV2LCBlbnRyeS1cXHUwMDNlZGF0YSwgZGF0YV9sZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgyMC1cXHRcXHRcXHRcXHRcXHRcXHRsZTE2X3RvX2NwdShlbnRyeS1cXHUwMDNlY29kZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTgzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6ODMzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXJzc2lfZGIgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODM0LVxcdFxcdFxcdGlmICghcHJpdi1cXHUwMDNlcnNzaV9kYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NDgtXFx0XFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg0OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VvdXRwdXRfbGltaXQgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODUwLVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy04NTUtXFx0XFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjg1NjpcXHRcXHRcXHRwcml2LVxcdTAwM2VjdXJ2ZV9kYXRhID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTg1Ny1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4OTM6XFx0ZXJyID0gcDU0X2dlbmVyYXRlX2NoYW5uZWxfbGlzdHMoZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODk0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODk3LVxcdGlmIChwcml2LVxcdTAwM2VyeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9YQk9XKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo4OTg6XFx0XFx0cDU0X2luaXRfeGJvd19zeW50aChwcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtODk5LVxcdGlmICghKHN5bnRoIFxcdTAwMjYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5MTk6XFx0cHJpdi1cXHUwMDNlY3VyX3Jzc2kgPSBcXHUwMDI2cDU0X3Jzc2lfZGVmYXVsdDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTIwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTkyMi1cXHRcXHQgICBkZXYtXFx1MDAzZXdpcGh5LVxcdTAwM2VwZXJtX2FkZHIsIHByaXYtXFx1MDAzZXZlcnNpb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjkyMzpcXHRcXHQgICBwNTRfcmZfY2hpcHNbcHJpdi1cXHUwMDNlcnhod10pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05MjQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQxLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTQyOkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk0NDppbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTQ1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTQ2OlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NDctXFx0c2l6ZV90IGVlcHJvbV9zaXplID0gMHgyMDIwLCBvZmZzZXQgPSAwLCBibG9ja3NpemUsIG1heGJsb2Nrc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NjItXFx0XFx0YmxvY2tzaXplID0gbWluKGVlcHJvbV9zaXplLCBtYXhibG9ja3NpemUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5NjM6XFx0XFx0cmV0ID0gcDU0X2Rvd25sb2FkX2VlcHJvbShwcml2LCBlZXByb20gKyBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk2NC1cXHRcXHRcXHRcXHRcXHQgIG9mZnNldCwgYmxvY2tzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk3MjpcXHRyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgZWVwcm9tLCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzMtZnJlZTpcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzYtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5Nzc6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlYWRfZWVwcm9tKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaD0zMD1zdHJ1Y3QgZWVwcm9tX3BkYV93cmFwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaC0zNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmg6Mzg6c3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmgtMzktXFx0X19sZTE2IGlxX3BhcmFtWzRdO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oPTQyPXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5oLTQzLVxcdF9fbGUxNiBmcmVxO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaDo0NDpcXHRzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgcGFyYW1zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uaC00NS19IF9fcGFja2VkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjIzOiNpbmNsdWRlIFxcXCJwNTQuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI0LSNpbmNsdWRlIFxcXCJlZXByb20uaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzppbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI5OlxcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzAtXFx0c3RydWN0IGV4cF9pZiAqZXhwX2lmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02Mi1cXHRcXHRcXHRcXHR3aXBoeV9pbmZvKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02NC1cXHRcXHRcXHRcXHRcXHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExMS1cXHRcXHRcXHRtYXhsZW4gPSBwcml2LVxcdTAwM2V0eF9oZHJfbGVuICsgLyogVVNCIGRldmljZXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjExMjpcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBwNTRfcnhfZGF0YSkgK1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTEzLVxcdFxcdFxcdFxcdCA0ICsgLyogcnggYWxpZ25tZW50ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNS1cXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnhfbXR1IFxcdTAwM2UgbWF4bGVuIFxcdTAwMjZcXHUwMDI2IFBBR0VfU0laRSA9PSA0MDk2KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMTY6XFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwicDU0OiByeF9tdHUgcmVkdWNlZCBmcm9tICVkIFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTExNy1cXHRcXHRcXHRcXHQgICAgICAgXFxcInRvICVkXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VyeF9tdHUsIG1heGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTE1MC1cXHRcXHR3aXBoeV9pbmZvKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjE1MTpcXHRcXHRcXHQgICBcXFwieW91IGFyZSB1c2luZyBhbiBvYnNvbGV0ZSBmaXJtd2FyZS4gdmlzaXQgaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWwgYW5kIGdyYWIgb25lIGZvciBcXFxcXFxcImtlcm5lbCBcXHUwMDNlPSAyLjYuMjhcXFxcXFxcIi4uLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0xOTgtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTk5OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9maXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMDE6c3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgaGRyX2ZsYWdzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAyLVxcdFxcdFxcdFxcdCAgICAgdTE2IHBheWxvYWRfbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDMte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjA0OlxcdHN0cnVjdCBwNTRfaGRyICpoZHI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDUtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjI3OmludCBwNTRfZG93bmxvYWRfZWVwcm9tKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB2b2lkICpidWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMjgtXFx0XFx0XFx0dTE2IG9mZnNldCwgdTE2IGxlbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIyOS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyMzA6XFx0c3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTIzMS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNDE6XFx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgZWVwcm9tX2hkcl9zaXplICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI0Mi1cXHRcXHRcXHQgICAgbGVuLCBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjYyOlxcdHA1NF90eChwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzc6aW50IHA1NF91cGRhdGVfYmVhY29uX3RpbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IGFpZCwgYm9vbCBzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yNzgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjc5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyODA6XFx0c3RydWN0IHA1NF90aW0gKnRpbTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI4MjpcXHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnRpbSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yODMtXFx0XFx0XFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjg5LVxcdHRpbS1cXHUwMDNlZW50cnlbMF0gPSBjcHVfdG9fbGUxNihzZXQgPyAoYWlkIHwgMHg4MDAwKSA6IGFpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyOTA6XFx0cDU0X3R4KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yOTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjI5NDppbnQgcDU0X3N0YV91bmxvY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4ICphZGRyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjk1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI5Ni1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mjk3OlxcdHN0cnVjdCBwNTRfc3RhX3VubG9jayAqc3RhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mjk5OlxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc3RhKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwMC1cXHRcXHRcXHQgICAgUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwNS1cXHRtZW1jcHkoc3RhLVxcdTAwM2VhZGRyLCBhZGRyLCBFVEhfQUxFTik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMDY6XFx0cDU0X3R4KHByaXYsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMDctXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMwOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMxMDppbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTMxMS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTItXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjMxMzpcXHRzdHJ1Y3QgcDU0X3R4Y2FuY2VsICpjYW5jZWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTQtXFx0dTMyIF9yZXFfaWQgPSBsZTMyX3RvX2NwdShyZXFfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMTk6XFx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpjYW5jZWwpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzIwLVxcdFxcdFxcdCAgICBQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzI1LVxcdGNhbmNlbC1cXHUwMDNlcmVxX2lkID0gcmVxX2lkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzI2OlxcdHA1NF90eChwcml2LCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzI3LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMzA6aW50IHA1NF9zZXR1cF9tYWMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMzEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzMyLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzozMzM6XFx0c3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM0LVxcdHUxNiBtb2RlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzM2OlxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzM3LVxcdFxcdFxcdCAgICBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDAwLVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwMTpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwMi1cXHRwcml2LVxcdTAwM2VwaHlfaWRsZSA9IG1vZGUgPT0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDA2OmludCBwNTRfc2NhbihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IG1vZGUsIHUxNiBkd2VsbClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQwNy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MDgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQwOTpcXHRzdHJ1Y3QgcDU0X2hkciAqaGRyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDEwOlxcdHN0cnVjdCBwNTRfc2Nhbl9oZWFkICpoZWFkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDExOlxcdHN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxMjpcXHR1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uICpib2R5O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDEzOlxcdHN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgKnJhdGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00MTQtXFx0c3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqcnNzaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQxNTpcXHRzdHJ1Y3QgcDU0X3Jzc2lfZGJfZW50cnkgKnJzc2lfZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTQxNi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDE5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NDIwOlxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqaGVhZCkgK1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDIxLVxcdFxcdFxcdCAgICAyICsgc2l6ZW9mKCppcV9hdXRvY2FsKSArIHNpemVvZigqYm9keSkgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00NDMtXFx0XFx0bWVtY3B5KGlxX2F1dG9jYWwsIFxcdTAwMjZwcml2LVxcdTAwM2VpcV9hdXRvY2FsW2ldLnBhcmFtcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQ0NDpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDQ1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTYtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjQ5NzpcXHRcXHRcXHRzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9IFxcdTAwMjZib2R5LVxcdTAwM2Vub3JtYWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy00OTgtXFx0XFx0XFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTA0LVxcdFxcdFxcdG1lbWNweShjaGFuLVxcdTAwM2VjdXJ2ZV9kYXRhLCBlbnRyeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjUwNTpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUwNi1cXHRcXHRcXHQgICAgICAgbWluKCh1OCk4LCBjdXJ2ZV9kYXRhLVxcdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTIwLVxcdHJzc2kgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1MjE6XFx0cnNzaV9kYXRhID0gcDU0X3Jzc2lfZmluZChwcml2LCBsZTE2X3RvX2NwdShmcmVxKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MjItXFx0cnNzaS1cXHUwMDNlbXVsID0gY3B1X3RvX2xlMTYocnNzaV9kYXRhLVxcdTAwM2VtdWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01MzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1Mzg6XFx0aGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi1cXHUwMDNlZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTUzOS1cXHRoZHItXFx1MDAzZWxlbiA9IGNwdV90b19sZTE2KHNrYi1cXHUwMDNlbGVuIC0gc2l6ZW9mKCpoZHIpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU0MTpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU0Mi1cXHRwcml2LVxcdTAwM2VjdXJfcnNzaSA9IHJzc2lfZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTU0OmludCBwNTRfc2V0X2xlZHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NTUte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTU2LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NTc6XFx0c3RydWN0IHA1NF9sZWQgKmxlZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU1OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU1OTpcXHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NjAtXFx0XFx0XFx0ICAgIFA1NF9DT05UUk9MX1RZUEVfTEVELCBHRlBfQVRPTUlDKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTY4LVxcdGxlZC1cXHUwMDNlZGVsYXlbMV0gPSBjcHVfdG9fbGUxNigwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU2OTpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU3MC1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTcyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NTczOmludCBwNTRfc2V0X2VkY2Yoc3RydWN0IHA1NF9jb21tb24gKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy01NzQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTc1LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo1NzY6XFx0c3RydWN0IHA1NF9lZGNmICplZGNmO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTc3LVxcdHU4IHJ0ZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTU3OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjU3OTpcXHRza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNTgwLVxcdFxcdFxcdCAgICBQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsIEdGUF9BVE9NSUMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MDUtXFx0bWVtY3B5KGVkY2YtXFx1MDAzZXF1ZXVlLCBwcml2LVxcdTAwM2Vxb3NfcGFyYW1zLCBzaXplb2YoZWRjZi1cXHUwMDNlcXVldWUpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjYwNjpcXHRwNTRfdHgocHJpdiwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTYwNy1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NjEwOmludCBwNTRfc2V0X3BzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNjExLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTYxMi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6NjEzOlxcdHN0cnVjdCBwNTRfcHNtICpwc207XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy02MTQtXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTYyMy1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MTcuODQxNjcxNTM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1MDA5NTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIEZpcm13YXJlIFBhcnNpbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgZmlybXdhcmUgaXNzdWUsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgY29udGV4dC4gTGV0J3Mgc2VlLi4uIHRoZSBgcDU0X3BhcnNlX2Zpcm13YXJlYCBmdW5jdGlvbiBpcyBjbGVhcmx5IGltcG9ydGFudCBoZXJlLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvJ3MgY2FsbGluZyBpdDsgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgdG9vbHMgZm9yIHRoaXMsIG9mIGNvdXJzZSwgYmVjYXVzZSBtYW51YWwgc2Nhbm5pbmcgaXMganVzdCBpbmVmZmljaWVudC4gXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgb2J2aW91cyBtb2R1bGVzIHRoYXQgd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gdGhpcyBhcmUgdGhlIGBwNTR1c2JgLCBgcDU0cGNpYCwgYW5kIGBwNTRzcGlgIGRyaXZlcnMgLSB0aGV5J3JlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggZmlybXdhcmUgbG9hZGluZyBpbiBhIHdpcmVsZXNzIGNvbnRleHQuXG5cblJpZ2h0LiBUaW1lIHRvIGZpcmUgdXAgbXkgdHJ1c3R5IGdyZXAgYW5kIGZpbmQgZXZlcnkgc2luZ2xlIGluc3RhbmNlIHdoZXJlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG1hcCBvZiBpdHMgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaW5mZXIgdGhlIHBvc3NpYmxlIGZhaWx1cmUgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IHRoZSBjYXVzZSBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MjAuNzkxNzY5MjUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTY2NjI4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0X3BhcnNlX2Zpcm13YXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoyNzppbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTk4LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjE5OTpFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZmlybXdhcmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjAwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTI2OD12b2lkIHA1NF9mcmVlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoyNjk6aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNzAtaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTQ4PXN0YXRpYyBpbnQgcDU0cF91cGxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYzo3OTpcXHRlcnIgPSBwNTRfcGFyc2VfZmlybXdhcmUoZGV2LCBwcml2LVxcdTAwM2VmaXJtd2FyZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTgwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM9MTQwPXN0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTE1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MTUzOlxcdHJldCA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtXFx1MDAzZWZpcm13YXJlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTU0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz04Njc9c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTg3MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6ODcyOlxcdHJldCA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtXFx1MDAzZWZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODczLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjIyLjQ4ODQ0MTc3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjEyMjIwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTaXR1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgcDU0dXNiYCBzaXR1YXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gcGlucG9pbnQgYHA1NHVfc3RhcnRfb3BzYCB3aXRoaW4gYHA1NHVzYi5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gVGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZXZlbiAqcmVhY2gqIGBwNTR1c2JgIHZpYSBVU0IgZnV6emluZy4gVGhhdCBtZWFucyBzZWVpbmcgaWYgSSBjYW4gdHJpZ2dlciBpdCB3aXRoIFJhdyBHYWRnZXQgb3IgVVNCIGVtdWxhdGlvbiB0ZWNobmlxdWVzLiBFc3NlbnRpYWxseSwgY2FuIEkgZ2V0IGNvZGUgZXhlY3V0aW9uIGluIHRoaXMgbW9kdWxlIHZpYSBVU0IgbWFuaXB1bGF0aW9uPyBTbywgaXQncyBiYWNrIHRvIGBwNTR1c2IuY2AgdG8gc2VlIGlmIHRoaXMgaXMgcG9zc2libGUuIEl0J3MgdGltZSB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc1OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjI0Ljg0OTY2NjU1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHRrZnJlZShidWYpO1xcbiA4NTE6XFx0XFx0cmV0dXJuIGVycjtcXG4gODUyOlxcdH1cXG4gODUzOlxcdFxcbiA4NTQ6XFx0c3RhdGljIGludCBwNTRfZmluZF90eXBlKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXFxuIDg1NTpcXHR7XFxuIDg1NjpcXHRcXHRpbnQgaTtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fTlVNX1A1NFVfSFdUWVBFUzsgaSsrKVxcbiA4NTk6XFx0XFx0XFx0aWYgKHA1NHVfZndsaXN0W2ldLnR5cGUgPT0gcHJpdi1cXHUwMDNlaHdfdHlwZSlcXG4gODYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NjE6XFx0XFx0aWYgKGkgPT0gX19OVU1fUDU0VV9IV1RZUEVTKVxcbiA4NjI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRyZXR1cm4gaTtcXG4gODY1OlxcdH1cXG4gODY2OlxcdFxcbiA4Njc6XFx0c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxcbiA4Njg6XFx0e1xcbiA4Njk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcHJpdi1cXHUwMDNlY29tbW9uLmh3O1xcbiA4NzA6XFx0XFx0aW50IHJldDtcXG4gODcxOlxcdFxcbiA4NzI6XFx0XFx0cmV0ID0gcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgcHJpdi1cXHUwMDNlZncpO1xcbiA4NzM6XFx0XFx0aWYgKHJldClcXG4gODc0OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0cmV0ID0gcDU0X2ZpbmRfdHlwZShwcml2KTtcXG4gODc3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4Nzg6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY29tbW9uLmZ3X2ludGVyZmFjZSAhPSBwNTR1X2Z3bGlzdFtyZXRdLmludGYpIHtcXG4gODgxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgXFxcIndyb25nIGZpcm13YXJlLCBwbGVhc2UgZ2V0IFxcXCJcXG4gODgyOlxcdFxcdFxcdFxcdFxcXCJhIGZpcm13YXJlIGZvciBcXFxcXFxcIiVzXFxcXFxcXCIgYW5kIHRyeSBhZ2Fpbi5cXFxcblxcXCIsXFxuIDg4MzpcXHRcXHRcXHRcXHRwNTR1X2Z3bGlzdFtyZXRdLmh3KTtcXG4gODg0OlxcdFxcdFxcdHJldCA9IC1FTk9ERVY7XFxuIDg4NTpcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIDg4NjpcXHRcXHR9XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXVwbG9hZF9mdyhkZXYpO1xcbiA4ODk6XFx0XFx0aWYgKHJldClcXG4gODkwOlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0cmV0ID0gcDU0dV9vcGVuKGRldik7XFxuIDg5MzpcXHRcXHRpZiAocmV0KVxcbiA4OTQ6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRyZXQgPSBwNTRfcmVhZF9lZXByb20oZGV2KTtcXG4gODk3OlxcdFxcdGlmIChyZXQpXFxuIDg5ODpcXHRcXHRcXHRnb3RvIGVycl9zdG9wO1xcbiA4OTk6XFx0XFxuIDkwMDpcXHRcXHRwNTR1X3N0b3AoZGV2KTtcXG4gOTAxOlxcdFxcbiA5MDI6XFx0XFx0cmV0ID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYpO1xcbiA5MDM6XFx0XFx0aWYgKHJldClcXG4gOTA0OlxcdFxcdFxcdGdvdG8gZXJyX3N0b3A7XFxuIDkwNTpcXHRcXG4gOTA2OlxcdFxcdHJldHVybiAwO1xcbiA5MDc6XFx0XFxuIDkwODpcXHRlcnJfc3RvcDpcXG4gOTA5OlxcdFxcdHA1NHVfc3RvcChkZXYpO1xcbiA5MTA6XFx0XFxuIDkxMTpcXHRlcnJfb3V0OlxcbiA5MTI6XFx0XFx0LypcXG4gOTEzOlxcdFxcdCAqIHA1NHVfZGlzY29ubmVjdCB3aWxsIGRvIHRoZSByZXN0IG9mIHRoZVxcbiA5MTQ6XFx0XFx0ICogY2xlYW51cFxcbiA5MTU6XFx0XFx0ICovXFxuIDkxNjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MTc6XFx0fVxcbiA5MTg6XFx0XFxuIDkxOTpcXHRzdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG4gOTIwOlxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqY29udGV4dClcXG4gOTIxOlxcdHtcXG4gOTIyOlxcdFxcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBjb250ZXh0O1xcbiA5MjM6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwcml2LVxcdTAwM2V1ZGV2O1xcbiA5MjQ6XFx0XFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSBwcml2LVxcdTAwM2VpbnRmO1xcbiA5MjU6XFx0XFx0aW50IGVycjtcXG4gOTI2OlxcdFxcbiA5Mjc6XFx0XFx0aWYgKGZpcm13YXJlKSB7XFxuIDkyODpcXHRcXHRcXHRwcml2LVxcdTAwM2VmdyA9IGZpcm13YXJlO1xcbiA5Mjk6XFx0XFx0XFx0ZXJyID0gcDU0dV9zdGFydF9vcHMocHJpdik7XFxuIDkzMDpcXHRcXHR9IGVsc2Uge1xcbiA5MzE6XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4gOTMyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnVkZXYtXFx1MDAzZWRldiwgXFxcIkZpcm13YXJlIG5vdCBmb3VuZC5cXFxcblxcXCIpO1xcbiA5MzM6XFx0XFx0fVxcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2cHJpdi1cXHUwMDNlZndfd2FpdF9sb2FkKTtcXG4gOTM2OlxcdFxcdC8qXFxuIDkzNzpcXHRcXHQgKiBBdCB0aGlzIHBvaW50IHA1NHVfZGlzY29ubmVjdCBtYXkgaGF2ZSBhbHJlYWR5IGZyZWVkXFxuIDkzODpcXHRcXHQgKiB0aGUgXFxcInByaXZcXFwiIGNvbnRleHQuIERvIG5vdCB1c2UgaXQgYW55bW9yZSFcXG4gOTM5OlxcdFxcdCAqL1xcbiA5NDA6XFx0XFx0cHJpdiA9IE5VTEw7XFxuIDk0MTpcXHRcXG4gOTQyOlxcdFxcdGlmIChlcnIpIHtcXG4gOTQzOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZSAoJWQpXFxcXG5cXFwiLCBlcnIpO1xcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRcXHR1c2JfbG9ja19kZXZpY2UodWRldik7XFxuIDk0NjpcXHRcXHRcXHR1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKFxcdTAwMjZwNTR1X2RyaXZlciwgaW50Zik7XFxuIDk0NzpcXHRcXHRcXHR1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTtcXG4gOTQ4OlxcdFxcdH1cXG4gOTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODoyNC44NDk4OTU4NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc5NzgwMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGaXJtd2FyZSBMb2FkaW5nIGluIHRoZSBJbnRlclNpbCBwNTQgVVNCIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgaXMgdGhlIGNhbGxiYWNrIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdHJpZ2dlcmVkIHdoZW4gZmlybXdhcmUgaXMgbmVlZGVkIGVpdGhlciBhc3luY2hyb25vdXNseSBvciBhcyBhIGZhbGxiYWNrLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIEknbSBncmFwcGxpbmcgd2l0aCBpcyBob3cgZmlybXdhcmUgaW50ZXJhY3RzIHdpdGggU3l6a2FsbGVyIGluIHRoaXMgY29udGV4dC4gQ2FuIFN5emthbGxlciBkaXJlY3RseSBsb2FkIG9yIGZ1enogZmlybXdhcmU/IEl0IHN1cHBvcnRzIFVTQiBmdXp6aW5nIHRocm91Z2ggYHN5el91c2JfY29ubmVjdGAgb3IgcmF3LWdhZGdldCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQsIGJ1dCBkb2VzIGl0ICpwcm92aWRlKiB0aGUgZmlybXdhcmUgaXRzZWxmLCBvciBkb2VzIGl0IHJlbHkgb24gdXNlci1zcGFjZSBpbmplY3Rpb24gdGhyb3VnaCB0aGUgc3lzZnMvZmlybXdhcmUgbG9hZGVyIG9yIGJ1aWx0LWluIGZpcm13YXJlIG1lY2hhbmlzbXM/IFRoYXQncyB0aGUgY3J1eC5cblxuQWghIFNlY3Rpb24gMyBpbiB0aGUgZG9jdW1lbnQgaXMgcHJvbWlzaW5nOiBcIkRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKVwiIFRoaXMgbGlzdCBpbmNsdWRlcyBVU0IgZ2FkZ2V0LCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQuIEFuZCwgdGhlIEludGVyU2lsIHA1NCBVU0IgZHJpdmVyLCBgcDU0dXNiYCwgaXMgaW5kZWVkIGEgKlVTQiogZHJpdmVyLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gZmluZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgcDU0dXNiYCdzIHByb2JlIGZ1bmN0aW9uIHRvIGdhaW4gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODoyOC4yMjk2NzkwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTI0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0dV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTk1Mz1zdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTgzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5ODQ6c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05ODUtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTExMjQ9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHA1NHVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjYtXFx0LmlkX3RhYmxlID0gcDU0dV90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6MTEyNzpcXHQucHJvYmUgPSBwNTR1X3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMTI4LVxcdC5kaXNjb25uZWN0ID0gcDU0dV9kaXNjb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODoyOC4yNzU4ODEyODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwNzU0MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFBhcnNpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBJbnRlcnNpbCB3aXJlbGVzcyBkcml2ZXIgaGFuZGxlcyBmaXJtd2FyZSBwYXJzaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBwNTRfcGFyc2VfZmlybXdhcmVgIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIGl0IHNob3VsZCBiZSB0aGUgY29yZSBvZiB3aGF0IEknbSBsb29raW5nIGZvci4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHdob2xlIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIG1ldGhvZCBzaWduYXR1cmU7IHRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ3Jhc3AgdGhlIGVudGlyZSBmbG93IGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRoZSBiaWcgcGljdHVyZSBiZWZvcmUgSSBzdGFydCBwaWNraW5nIGFwYXJ0IHRoZSBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTU2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MzAuNzgzNDI2Mzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdCNpbmNsdWRlIFxcXCJsbWFjLmhcXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgZXhwX2lmICpleHBfaWY7XFxuICAzMTpcXHRcXHRzdHJ1Y3QgYm9vdHJlYyAqYm9vdHJlYztcXG4gIDMyOlxcdFxcdHUzMiAqZGF0YSA9ICh1MzIgKilmdy1cXHUwMDNlZGF0YTtcXG4gIDMzOlxcdFxcdHUzMiAqZW5kX2RhdGEgPSAodTMyICopZnctXFx1MDAzZWRhdGEgKyAoZnctXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgMik7XFxuICAzNDpcXHRcXHR1OCAqZndfdmVyc2lvbiA9IE5VTEw7XFxuICAzNTpcXHRcXHRzaXplX3QgbGVuO1xcbiAgMzY6XFx0XFx0aW50IGk7XFxuICAzNzpcXHRcXHRpbnQgbWF4bGVuO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnhfc3RhcnQpXFxuICA0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0d2hpbGUgKGRhdGEgXFx1MDAzYyBlbmRfZGF0YSBcXHUwMDI2XFx1MDAyNiAqZGF0YSlcXG4gIDQzOlxcdFxcdFxcdGRhdGErKztcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0d2hpbGUgKGRhdGEgXFx1MDAzYyBlbmRfZGF0YSBcXHUwMDI2XFx1MDAyNiAhKmRhdGEpXFxuICA0NjpcXHRcXHRcXHRkYXRhKys7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdGJvb3RyZWMgPSAoc3RydWN0IGJvb3RyZWMgKikgZGF0YTtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0d2hpbGUgKGJvb3RyZWMtXFx1MDAzZWRhdGEgXFx1MDAzYz0gZW5kX2RhdGEgXFx1MDAyNlxcdTAwMjYgKGJvb3RyZWMtXFx1MDAzZWRhdGEgK1xcbiAgNTE6XFx0XFx0ICAgICAgIChsZW4gPSBsZTMyX3RvX2NwdShib290cmVjLVxcdTAwM2VsZW4pKSkgXFx1MDAzYz0gZW5kX2RhdGEpIHtcXG4gIDUyOlxcdFxcdFxcdHUzMiBjb2RlID0gbGUzMl90b19jcHUoYm9vdHJlYy1cXHUwMDNlY29kZSk7XFxuICA1MzpcXHRcXHRcXHRzd2l0Y2ggKGNvZGUpIHtcXG4gIDU0OlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9DT01QT05FTlRfSUQ6XFxuICA1NTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vmd19pbnRlcmZhY2UgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKVxcbiAgNTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib290cmVjLVxcdTAwM2VkYXRhKTtcXG4gIDU3OlxcdFxcdFxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlZndfaW50ZXJmYWNlKSB7XFxuICA1ODpcXHRcXHRcXHRcXHRjYXNlIEZXX0xNODY6XFxuICA1OTpcXHRcXHRcXHRcXHRjYXNlIEZXX0xNMjA6XFxuICA2MDpcXHRcXHRcXHRcXHRjYXNlIEZXX0xNODc6IHtcXG4gIDYxOlxcdFxcdFxcdFxcdFxcdGNoYXIgKmlmdHlwZSA9IChjaGFyICopYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdHdpcGh5X2luZm8ocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LFxcbiAgNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcInA1NCBkZXRlY3RlZCBhIExNJWMlYyBmaXJtd2FyZVxcXFxuXFxcIixcXG4gIDY0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGlmdHlwZVsyXSwgaWZ0eXBlWzNdKTtcXG4gIDY1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNjY6XFx0XFx0XFx0XFx0XFx0fVxcbiAgNjc6XFx0XFx0XFx0XFx0Y2FzZSBGV19GTUFDOlxcbiAgNjg6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG4gIDY5OlxcdFxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuICA3MDpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJ1bnN1cHBvcnRlZCBmaXJtd2FyZVxcXFxuXFxcIik7XFxuICA3MTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gIDcyOlxcdFxcdFxcdFxcdH1cXG4gIDczOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNzQ6XFx0XFx0XFx0Y2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OOlxcbiAgNzU6XFx0XFx0XFx0XFx0LyogMjQgYnl0ZXMgc2hvdWxkIGJlIGVub3VnaCBmb3IgYWxsIGZpcm13YXJlcyAqL1xcbiAgNzY6XFx0XFx0XFx0XFx0aWYgKHN0cm5sZW4oKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy1cXHUwMDNlZGF0YSwgMjQpIFxcdTAwM2MgMjQpXFxuICA3NzpcXHRcXHRcXHRcXHRcXHRmd192ZXJzaW9uID0gKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gIDc4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNzk6XFx0XFx0XFx0Y2FzZSBCUl9DT0RFX0RFU0NSOiB7XFxuICA4MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID1cXG4gIDgxOlxcdFxcdFxcdFxcdFxcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gIDgyOlxcdFxcdFxcdFxcdHUzMiByeF9zdGFydCwgcnhfZW5kO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKHN0cnVjdCBib290cmVjX2Rlc2MsXFxuICA4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICByeF9rZXljYWNoZV9zaXplKSxcXG4gIDg2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXFx1MDAzZWRhdGEpKSkge1xcbiAgODc6XFx0XFx0XFx0XFx0XFx0d2lwaHlfZXJyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcImZpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxcXG5cXFwiKTtcXG4gIDg5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgOTA6XFx0XFx0XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRcXHRcXHRyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X3N0YXJ0KTtcXG4gIDkzOlxcdFxcdFxcdFxcdHJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJ4X2VuZCk7XFxuICA5NDpcXHRcXHRcXHRcXHRpZiAocnhfZW5kIFxcdTAwM2MgMHgzNTAwIHx8IHJ4X2VuZCAtIDB4MzUwMCBcXHUwMDNjPSByeF9zdGFydCkge1xcbiAgOTU6XFx0XFx0XFx0XFx0XFx0d2lwaHlfZXJyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcImZpcm13YXJlIGRlc2NyaXB0b3IgaGFzIGludmFsaWQgUlggcmFuZ2VcXFxcblxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA5ODpcXHRcXHRcXHRcXHR9XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X3N0YXJ0ID0gcnhfc3RhcnQ7XFxuIDEwMTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9lbmQgPSByeF9lbmQgLSAweDM1MDA7XFxuIDEwMjpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VoZWFkcm9vbSA9IGRlc2MtXFx1MDAzZWhlYWRyb29tO1xcbiAxMDM6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNldGFpbHJvb20gPSBkZXNjLVxcdTAwM2V0YWlscm9vbTtcXG4gMTA0OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXFx1MDAzZXByaXZhY3lfY2FwcztcXG4gMTA1OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X2tleWNhY2hlX3NpemUgPSBkZXNjLVxcdTAwM2VyeF9rZXljYWNoZV9zaXplO1xcbiAxMDY6XFx0XFx0XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGJvb3RyZWMtXFx1MDAzZWxlbikgPT0gMTEpXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9tdHUgPSBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VyeF9tdHUpO1xcbiAxMDg6XFx0XFx0XFx0XFx0ZWxzZVxcbiAxMDk6XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfbXR1ID0gKHNpemVfdClcXG4gMTEwOlxcdFxcdFxcdFxcdFxcdFxcdDB4NjIwIC0gcHJpdi1cXHUwMDNldHhfaGRyX2xlbjtcXG4gMTExOlxcdFxcdFxcdFxcdG1heGxlbiA9IHByaXYtXFx1MDAzZXR4X2hkcl9sZW4gKyAvKiBVU0IgZGV2aWNlcyAqL1xcbiAxMTI6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgcDU0X3J4X2RhdGEpICtcXG4gMTEzOlxcdFxcdFxcdFxcdFxcdCA0ICsgLyogcnggYWxpZ25tZW50ICovXFxuIDExNDpcXHRcXHRcXHRcXHRcXHQgSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDtcXG4gMTE1OlxcdFxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VyeF9tdHUgXFx1MDAzZSBtYXhsZW4gXFx1MDAyNlxcdTAwMjYgUEFHRV9TSVpFID09IDQwOTYpIHtcXG4gMTE2OlxcdFxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0lORk8gXFxcInA1NDogcnhfbXR1IHJlZHVjZWQgZnJvbSAlZCBcXFwiXFxuIDExNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInRvICVkXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VyeF9tdHUsIG1heGxlbik7XFxuIDExODpcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9tdHUgPSBtYXhsZW47XFxuIDExOTpcXHRcXHRcXHRcXHR9XFxuIDEyMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTIxOlxcdFxcdFxcdFxcdH1cXG4gMTIyOlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9FWFBPU0VEX0lGOlxcbiAxMjM6XFx0XFx0XFx0XFx0ZXhwX2lmID0gKHN0cnVjdCBleHBfaWYgKikgYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG4gMTI0OlxcdFxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAobGVuICogc2l6ZW9mKCpleHBfaWYpIC8gNCk7IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6MzAuNzgzNTIwOTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0Mzk5NTUyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBQYXJzaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIGNoYW5nZWQgaGVyZSwgYW5kIHdoeT9cIiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gaG93IHRoZSBmaXJtd2FyZSdzIGRlc2NyaXB0b3IgaXMgcGFyc2VkLCBzcGVjaWZpY2FsbHkgdGhlIGBCUl9DT0RFX0RFU0NSYCBjYXNlLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBgcnhfc3RhcnRgIGFuZCBgcnhfZW5kYCBhZGRyZXNzZXMsIHdoaWNoIGFyZSBjcnVjaWFsIGZvciB0aGUgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHRoZSByZWNlaXZlci4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgZGlyZWN0IGFzc2lnbm1lbnQgYW5kIGEgaGFyZGNvZGVkIHN1YnRyYWN0aW9uIG9mIGAweDM1MDBgLiBUaGF0IHN1YnRyYWN0aW9uIGxvb2tzIGEgYml0IHN1c3BlY3QgLSBhIG1hZ2ljIG51bWJlciwgYWx3YXlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMgZG93biB0aGUgbGluZSBpZiB0aGUgZmlybXdhcmUgY2hhbmdlcy5cblxuQWgsIEkgc2VlIGl0IG5vdy4gVGhlIHBhdGNoIGludHJvZHVjZXMgc29tZSBjcml0aWNhbCBzYW5pdHkgY2hlY2tzLiBGaXJzdCwgaXQgZW5zdXJlcyB0aGF0IHRoZSBmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIGxvbmcgZW5vdWdoIHRvIGNvbnRhaW4gYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyByZWFkcywgYSBjb21tb24gc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBhbmQgY3Jhc2hlcywgcGFydGljdWxhcmx5IGluIGxvdy1sZXZlbCBkcml2ZXJzIGxpa2UgdGhpcy4gSXQgdGhlbiBjaGVja3MgaWYgdGhlIGNhbGN1bGF0ZWQgYHJ4X2VuZGAgaXMgYSB2YWxpZCByYW5nZSwgZW5zdXJpbmcgaXQncyBub3QgbGVzcyB0aGFuIGEgYmFzZSB2YWx1ZSBhbmQgdGhhdCB0aGUgc3VidHJhY3Rpb24gZnJvbSBgMHgzNTAwYCBkb2Vzbid0IHJlc3VsdCBpbiBhbiBpbnZhbGlkIHJhbmdlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGByeF9zdGFydGAuIFRoaXMgbWFrZXMgdGhlIGNvZGUgbXVjaCBtb3JlIHJvYnVzdCBhbmQgc2FmZXIuIElmIHRoZSBjaGVja3MgZmFpbCwgdGhlIGNvZGUgbm93IHJldHVybnMgYW4gZXJyb3IgKGAtRUlOVkFMYCksIHdoaWNoIGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBpbiB0aGlzIHNpdHVhdGlvbi5cblxuU28sIHRoZSBrZXkgaW1wcm92ZW1lbnQgaGVyZSBpcyB0aGUgYWRkZWQgZXJyb3IgaGFuZGxpbmcgYW5kIHJhbmdlIHZhbGlkYXRpb24uIEJ5IHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgZmlybXdhcmUgZGVzY3JpcHRvciwgaXQgbWFrZXMgdGhlIGRyaXZlciBtb3JlIHJlc2lzdGFudCB0byBwb3RlbnRpYWxseSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzbHkgY3JhZnRlZCBmaXJtd2FyZS4gR29vZCB3b3JrLiBOb3csIGxldCdzIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIHA1NCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb25maWd1cmVkIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjM3LjIyMzQ3OTc0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFA1NF9DT01NT05cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBpcyBjb21tb24gY29kZSBmb3IgaXNsMzh4eC9zdGxjNDV4eCBiYXNlZCBtb2R1bGVzLlxcbiAgIDk6XFx0XFx0ICBUaGlzIG1vZHVsZSBkb2VzIG5vdGhpbmcgYnkgaXRzZWxmIC0gdGhlIFVTQi9QQ0kvU1BJIGZyb250LWVuZHNcXG4gIDEwOlxcdFxcdCAgYWxzbyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBhbnkgZGV2aWNlcy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBQNTRfVVNCXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBVU0Igc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgVVNCIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuICAyNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0dXNiLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgUDU0X1BDSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgUENJIHN1cHBvcnRcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgUENJXFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0kgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cXG4gIDM0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbW9zdCBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGVcXG4gIDM1OlxcdFxcdCAgZnVsbG1hYyBwcmlzbTU0IGRyaXZlciBwbHVzIG1hbnkgZGV2aWNlcyB3aGljaCBhcmUgbm90XFxuICAzNjpcXHRcXHQgIHN1cHBvcnRlZCBieSB0aGUgZnVsbG1hYyBkcml2ZXIvZmlybXdhcmUuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDM5OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRwY2kuXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBQNTRfU1BJXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBTUEkgKHN0bGM0NXh4KSBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFNQSV9NQVNURVJcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIHN0bGM0NTUwIG9yIHN0bGM0NTYwIGJhc2VkIHdpcmVsZXNzIGNoaXBzXFxuICA0ODpcXHRcXHQgIHN1Y2ggYXMgTm9raWEncyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRzcGkuXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBQNTRfU1BJX0RFRkFVTFRfRUVQUk9NXFxuICA1MzpcXHRcXHRib29sIFxcXCJJbmNsdWRlIGZhbGxiYWNrIEVFUFJPTSBibG9iXFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfU1BJXFxuICA1NTpcXHRcXHRkZWZhdWx0IG5cXG4gIDU2OlxcdFxcdGhlbHBcXG4gIDU3OlxcdFxcdCBVbmxpa2UgdGhlIFBDSSBvciBVU0IgZGV2aWNlcywgdGhlIFNQSSB2YXJpYW50cyBkb24ndCBoYXZlXFxuICA1ODpcXHRcXHQgYSBkZWRpY2F0ZWQgRUVQUk9NIGNoaXAgdG8gc3RvcmUgYWxsIGRldmljZSBzcGVjaWZpYyB2YWx1ZXNcXG4gIDU5OlxcdFxcdCBmb3IgY2FsaWJyYXRpb24sIGNvdW50cnkgYW5kIGludGVyZmFjZSBzZXR0aW5ncy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0IFRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gbG9hZCB0aGUgaW1hZ2UgXFxcIjM4MjYuZWVwcm9tXFxcIiwgaWYgdGhlXFxuICA2MjpcXHRcXHQgZmlsZSBpcyBwdXQgYXQgdGhlIHJpZ2h0IHBsYWNlLiAodXN1YWxseSAvbGliL2Zpcm13YXJlLilcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0IE9ubHkgaWYgdGhpcyByZXF1ZXN0IGZhaWxzLCB0aGlzIG9wdGlvbiB3aWxsIHByb3ZpZGUgYVxcbiAgNjU6XFx0XFx0IGJhY2t1cCBzZXQgb2YgZ2VuZXJpYyB2YWx1ZXMgdG8gZ2V0IHRoZSBkZXZpY2Ugd29ya2luZy5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0IEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYWJvdXQgNGsgdG8gcDU0c3BpLlxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgUDU0X0xFRFNcXG4gIDcwOlxcdFxcdGJvb2xcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9MRURTIFxcdTAwMjZcXHUwMDI2IChMRURTX0NMQVNTID0geSB8fCBMRURTX0NMQVNTID0gUDU0X0NPTU1PTilcXG4gIDcyOlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODozNy4yMjM1NjQwMzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg0OTcwNTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXMgZm9yIHA1NF9wYXJzZV9maXJtd2FyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBmdXp6aW5nIGBwNTRfcGFyc2VfZmlybXdhcmVgIGlzIGEgd29ydGh3aGlsZSBlbmRlYXZvci4gRmlyc3QsIHJlYWNoYWJpbGl0eS4gVGhlIGZ1bmN0aW9uLCBwYXJ0IG9mIHRoZSBgcDU0Y29tbW9uYCBkcml2ZXIsIGlzIGNhbGxlZCBieSBgcDU0dXNiYCwgd2hpY2ggaXMgYSBVU0Igd2lyZWxlc3MgZGV2aWNlIGRyaXZlci4gVVNCIGRldmljZXMgYXJlIHJlYWRpbHkgZnV6emVkIGJ5IHN5emthbGxlciB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb247IHRoYXQgaXMgZ3JlYXQgYmVjYXVzZSBpdCBpbXBsaWVzIGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuIFdoZW4gYSBzaW11bGF0ZWQgVVNCIGRldmljZSBtYXRjaGluZyB0aGUgYHA1NHVfdGFibGVgIElEIHRhYmxlIGlzIHBsdWdnZWQgaW4sIGBwNTR1X3Byb2JlYCBpcyBjYWxsZWQuIFRoYXQgcHJvYmUgZnVuY3Rpb24gcmVxdWVzdHMgZmlybXdhcmUgbG9hZGluZy4gVWx0aW1hdGVseSwgdGhlIHJlbGV2YW50IGNhbGxzdGFjayBpcyBgcDU0dV9wcm9iZWAgLVx1MDAzZSBgcDU0dV9sb2FkX2Zpcm13YXJlYCAtXHUwMDNlIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIC1cdTAwM2UgYHA1NHVfc3RhcnRfb3BzYCAtXHUwMDNlIGBwNTRfcGFyc2VfZmlybXdhcmVgLiBUaGUgcGF0aCBpcyB0aGVyZSwgYW5kIGl0IGlzIGFjY2Vzc2libGUhIFRoZSBwYXRjaGVkIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBhIGZpcm13YXJlIGJ1ZmZlciBuZWVkcyB0byBiZSBwYXJzZWQsIHdoaWNoIHNob3VsZCBiZSB0aGUgbm9ybWFsIGNhc2UgaW4gdGVzdGluZy9mdXp6aW5nIGVudmlyb25tZW50cy4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgYGRlc2MtXHUwMDNlcnhfc3RhcnRgIGFuZCBgZGVzYy1cdTAwM2VyeF9lbmRgLCBhcyB3ZWxsIGFzIGRlc2NyaXB0b3IgbGVuZ3RoIGNoZWNraW5nLCB3aXRoaW4gYHA1NF9wYXJzZV9maXJtd2FyZWAuXG5cbk5vdywgbGV0J3MgY29uc3VsdCB0aGUgcmVsZXZhbnQgZnV6emluZyBjcml0ZXJpYS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGZhbGxzIHVuZGVyIFwiRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzLFwiIHRoZSBVU0IgZHJpdmVyIGNlcnRhaW5seSBmaXRzIHRoYXQgZGVzY3JpcHRpb24uIFRoZSBuZXh0IGNydWNpYWwgcG9pbnQgaXMgdGhhdCB3aGVuIFdvcnRoRnV6emluZz10cnVlLCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZXh0cmFjdGVkIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXIuIFRoZXNlIHdvdWxkIGluY2x1ZGUgYHA1NF9wYXJzZV9maXJtd2FyZWAgaXRzZWxmIGFuZCBwb3RlbnRpYWxseSB0aGUgY2FsbCBjaGFpbiwgYHA1NHVfc3RhcnRfb3BzYCAvIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIC8gYHA1NHVfcHJvYmVgLlxuXG5JbXBvcnRhbnRseSwgYHA1NF9wYXJzZV9maXJtd2FyZWAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBgRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTtgLiBQZXJmZWN0OyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gc2VlaW5nIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAgYXJlIG5lZWRlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gYFA1NF9DT01NT05gIGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYFA1NF9VU0JgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFVTQmAsIGBQNTRfUENJYCBkZXBlbmRzIG9uIGBQNTRfQ09NTU9OIFx1MDAyNlx1MDAyNiBQQ0lgLCBhbmQgYFA1NF9TUElgIGRlcGVuZHMgb24gYFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFNQSV9NQVNURVJgLiBObyBoaWRkZW4gZ290Y2hhcyB0aGVyZS5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFRoaXMgaXMgQyBjb2RlIHdpdGhpbiBhIGRyaXZlciwgc28gaXQgaXNuJ3QgYSBub24ta2VybmVsIG9yIG5vbi1leGVjdXRhYmxlIGNoYW5nZS4gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGlzbid0IGFuIGlzc3VlOyBgUDU0X1VTQmAgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uLiBGaW5hbGx5LCB0aGUgZXhlY3V0aW9uIHBhdGggaXMgcmVhY2hhYmxlIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHNvIHRoaXMgaXNuJ3QgdW5yZWFjaGFibGUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5JJ2xsIGZpbmFsaXplIHRoZSBGb2N1c1N5bWJvbHMgYXM6IGBwNTRfcGFyc2VfZmlybXdhcmVgLCBgcDU0dV9sb2FkX2Zpcm13YXJlX2NiYCwgYHA1NHVfc3RhcnRfb3BzYCwgYW5kIGBwNTR1X3Byb2JlYC4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuXG5cblNvLCB0aGUgY29uY2lzZSByZWFzb25pbmcgaXMgdGhpczogVGhlIHBhdGNoIGludHJvZHVjZXMgY3JpdGljYWwgdmFsaWRhdGlvbiBmb3IgZmlybXdhcmUgZGVzY3JpcHRvciBsZW5ndGggYW5kIFJYIHJhbmdlIHNhbml0eSBjaGVja3MgaW4gYHA1NF9wYXJzZV9maXJtd2FyZSgpYC4gVGhpcyBmdW5jdGlvbiBpcyBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBmb3IgVVNCIFByaXNtNTQgd2lyZWxlc3MgZGV2aWNlcyAoYHA1NHVzYmApIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldCBmdXp6aW5nLiBGdXp6aW5nIHByb3ZpZGVzIGEgbWVhbnMgdG8gdmVyaWZ5IHRoYXQgZmlybXdhcmUgcGFyc2luZyBoYW5kbGVzIG1hbGZvcm1lZCBkZXNjcmlwdG9ycyBjb3JyZWN0bHkgd2l0aG91dCBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIHJlYWRzLCBvciBpbnZhbGlkIHN0YXRlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NDUuMDczMjcxNzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgxNDA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9wYXJzZV9maXJtd2FyZVwiLFxuICAgIFwicDU0dV9zdGFydF9vcHNcIixcbiAgICBcInA1NHVfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gYW5kIHNhbml0eSBjaGVja3MgZm9yIGZpcm13YXJlIGRlc2NyaXB0b3IgbGVuZ3RocyBhbmQgUlggcmFuZ2VzIGluIHA1NF9wYXJzZV9maXJtd2FyZSgpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIHA1NHVzYiBkcml2ZXIgdGhyb3VnaCBVU0IgZ2FkZ2V0L2RldmljZSBlbXVsYXRpb24gZnV6emluZyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZyBvbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9wYXJzZV9maXJtd2FyZVwiLFxuICAgIFwicDU0dV9zdGFydF9vcHNcIixcbiAgICBcInA1NHVfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gYW5kIHNhbml0eSBjaGVja3MgZm9yIGZpcm13YXJlIGRlc2NyaXB0b3IgbGVuZ3RocyBhbmQgUlggcmFuZ2VzIGluIHA1NF9wYXJzZV9maXJtd2FyZSgpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIHA1NHVzYiBkcml2ZXIgdGhyb3VnaCBVU0IgZ2FkZ2V0L2RldmljZSBlbXVsYXRpb24gZnV6emluZyBkdXJpbmcgZmlybXdhcmUgcGFyc2luZyBvbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjQ1LjE1MDA5NDE5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzA2NDk1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODo0NS4xNTA2OTEwOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjAzMDA0ODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgcDU0X3BhcnNlX2Zpcm13YXJlKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGZpcm13YXJlIGJvb3QgcmVjb3JkcyAoYGxlbiBcXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFxcdTAwM2M9IHJ4X3N0YXJ0YCkuIFxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhbmQgaW50ZWdlciBhcml0aG1ldGljIGJ1Z3MsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRjZWQ0NWJhYmI1MjA4ZGMzZDE2ZjlkZWY3Mzk4MzE0OTJkMTEzNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjM4OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcbmluZGV4IGEzZDkwNTNmMDQzYzYuLjVkODJlMGE0MzgzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXG5AQCAtNzksOSArNzksMjYgQEAgaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4gXHRcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xuIFx0XHRcdHN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPVxuIFx0XHRcdFx0KHN0cnVjdCBib290cmVjX2Rlc2MgKilib290cmVjLVx1MDAzZWRhdGE7XG4tXHRcdFx0cHJpdi1cdTAwM2VyeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfc3RhcnQpO1xuLVx0XHRcdC8qIEZJWE1FIGFkZCBzYW5pdHkgY2hlY2tpbmcgKi9cbi1cdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKSAtIDB4MzUwMDtcbitcdFx0XHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcbitcbitcdFx0XHRpZiAobGVuIFx1MDAzYyBESVZfUk9VTkRfVVAob2Zmc2V0b2ZlbmQoc3RydWN0IGJvb3RyZWNfZGVzYyxcbitcdFx0XHRcdFx0XHRcdCAgIHJ4X2tleWNhY2hlX3NpemUpLFxuK1x0XHRcdFx0XHRcdCAgICAgICBzaXplb2YoKmJvb3RyZWMtXHUwMDNlZGF0YSkpKSB7XG4rXHRcdFx0XHR3aXBoeV9lcnIocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICBcImZpcm13YXJlIGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0XFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9zdGFydCk7XG4rXHRcdFx0cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VyeF9lbmQpO1xuK1x0XHRcdGlmIChyeF9lbmQgXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXHUwMDNjPSByeF9zdGFydCkge1xuK1x0XHRcdFx0d2lwaHlfZXJyKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHksXG4rXHRcdFx0XHRcdCAgXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHByaXYtXHUwMDNlcnhfc3RhcnQgPSByeF9zdGFydDtcbitcdFx0XHRwcml2LVx1MDAzZXJ4X2VuZCA9IHJ4X2VuZCAtIDB4MzUwMDtcbiBcdFx0XHRwcml2LVx1MDAzZWhlYWRyb29tID0gZGVzYy1cdTAwM2VoZWFkcm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXRhaWxyb29tID0gZGVzYy1cdTAwM2V0YWlscm9vbTtcbiBcdFx0XHRwcml2LVx1MDAzZXByaXZhY3lfY2FwcyA9IGRlc2MtXHUwMDNlcHJpdmFjeV9jYXBzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NDUuMTUwNjkyMzg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNDM4NDI1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBJL08gQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZGlmZiBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jYC4gTXkgaW1tZWRpYXRlIHRhcmdldCBpcyBhcm91bmQgbGluZSA3OSwgc28gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaXRzIHB1cnBvc2UuIE15IHBsYW4gaXMgdG8gemVybyBpbiBvbiB0aGF0IGByZWFkLWZpbGVgIGNhbGw7IEkgbmVlZCB0byBjb21wcmVoZW5kIGV4YWN0bHkgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpcm13YXJlIEkvTyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2hhdCBkYXRhIGl0J3MgaGFuZGxpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGludmVzdGlnYXRpb24gd2lsbCBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NTMuMTk0NTM3NDEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdHdoaWxlIChib290cmVjLVxcdTAwM2VkYXRhIFxcdTAwM2M9IGVuZF9kYXRhIFxcdTAwMjZcXHUwMDI2IChib290cmVjLVxcdTAwM2VkYXRhICtcXG4gIDUxOlxcdFxcdCAgICAgICAobGVuID0gbGUzMl90b19jcHUoYm9vdHJlYy1cXHUwMDNlbGVuKSkpIFxcdTAwM2M9IGVuZF9kYXRhKSB7XFxuICA1MjpcXHRcXHRcXHR1MzIgY29kZSA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtXFx1MDAzZWNvZGUpO1xcbiAgNTM6XFx0XFx0XFx0c3dpdGNoIChjb2RlKSB7XFxuICA1NDpcXHRcXHRcXHRjYXNlIEJSX0NPREVfQ09NUE9ORU5UX0lEOlxcbiAgNTU6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfaW50ZXJmYWNlID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilcXG4gIDU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYm9vdHJlYy1cXHUwMDNlZGF0YSk7XFxuICA1NzpcXHRcXHRcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWZ3X2ludGVyZmFjZSkge1xcbiAgNTg6XFx0XFx0XFx0XFx0Y2FzZSBGV19MTTg2OlxcbiAgNTk6XFx0XFx0XFx0XFx0Y2FzZSBGV19MTTIwOlxcbiAgNjA6XFx0XFx0XFx0XFx0Y2FzZSBGV19MTTg3OiB7XFxuICA2MTpcXHRcXHRcXHRcXHRcXHRjaGFyICppZnR5cGUgPSAoY2hhciAqKWJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuICA2MjpcXHRcXHRcXHRcXHRcXHR3aXBoeV9pbmZvKHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG4gIDYzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgZmlybXdhcmVcXFxcblxcXCIsXFxuICA2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBpZnR5cGVbMl0sIGlmdHlwZVszXSk7XFxuICA2NTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDY2OlxcdFxcdFxcdFxcdFxcdH1cXG4gIDY3OlxcdFxcdFxcdFxcdGNhc2UgRldfRk1BQzpcXG4gIDY4OlxcdFxcdFxcdFxcdGRlZmF1bHQ6XFxuICA2OTpcXHRcXHRcXHRcXHRcXHR3aXBoeV9lcnIocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LFxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwidW5zdXBwb3J0ZWQgZmlybXdhcmVcXFxcblxcXCIpO1xcbiAgNzE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuICA3MjpcXHRcXHRcXHRcXHR9XFxuICA3MzpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDc0OlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9DT01QT05FTlRfVkVSU0lPTjpcXG4gIDc1OlxcdFxcdFxcdFxcdC8qIDI0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFsbCBmaXJtd2FyZXMgKi9cXG4gIDc2OlxcdFxcdFxcdFxcdGlmIChzdHJubGVuKCh1bnNpZ25lZCBjaGFyICopIGJvb3RyZWMtXFx1MDAzZWRhdGEsIDI0KSBcXHUwMDNjIDI0KVxcbiAgNzc6XFx0XFx0XFx0XFx0XFx0ZndfdmVyc2lvbiA9ICh1bnNpZ25lZCBjaGFyICopIGJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuICA3ODpcXHRcXHRcXHRcXHRicmVhaztcXG4gIDc5OlxcdFxcdFxcdGNhc2UgQlJfQ09ERV9ERVNDUjoge1xcbiAgODA6XFx0XFx0XFx0XFx0c3RydWN0IGJvb3RyZWNfZGVzYyAqZGVzYyA9XFxuICA4MTpcXHRcXHRcXHRcXHRcXHQoc3RydWN0IGJvb3RyZWNfZGVzYyAqKWJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuICA4MjpcXHRcXHRcXHRcXHR1MzIgcnhfc3RhcnQsIHJ4X2VuZDtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZChzdHJ1Y3QgYm9vdHJlY19kZXNjLFxcbiAgODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcnhfa2V5Y2FjaGVfc2l6ZSksXFxuICA4NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCpib290cmVjLVxcdTAwM2VkYXRhKSkpIHtcXG4gIDg3OlxcdFxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuICA4ODpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGlzIHRvbyBzaG9ydFxcXFxuXFxcIik7XFxuICA4OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDkwOlxcdFxcdFxcdFxcdH1cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0XFx0XFx0cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9zdGFydCk7XFxuICA5MzpcXHRcXHRcXHRcXHRyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9lbmQpO1xcbiAgOTQ6XFx0XFx0XFx0XFx0aWYgKHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnQpIHtcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuICA5NjpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJmaXJtd2FyZSBkZXNjcmlwdG9yIGhhcyBpbnZhbGlkIFJYIHJhbmdlXFxcXG5cXFwiKTtcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgOTg6XFx0XFx0XFx0XFx0fVxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9zdGFydCA9IHJ4X3N0YXJ0O1xcbiAxMDE6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xcbiAxMDI6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlaGVhZHJvb20gPSBkZXNjLVxcdTAwM2VoZWFkcm9vbTtcXG4gMTAzOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXRhaWxyb29tID0gZGVzYy1cXHUwMDNldGFpbHJvb207XFxuIDEwNDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vwcml2YWN5X2NhcHMgPSBkZXNjLVxcdTAwM2Vwcml2YWN5X2NhcHM7XFxuIDEwNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyeF9rZXljYWNoZV9zaXplID0gZGVzYy1cXHUwMDNlcnhfa2V5Y2FjaGVfc2l6ZTtcXG4gMTA2OlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShib290cmVjLVxcdTAwM2VsZW4pID09IDExKVxcbiAxMDc6XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfbXR1ID0gbGUxNl90b19jcHUoZGVzYy1cXHUwMDNlcnhfbXR1KTtcXG4gMTA4OlxcdFxcdFxcdFxcdGVsc2VcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X210dSA9IChzaXplX3QpXFxuIDExMDpcXHRcXHRcXHRcXHRcXHRcXHQweDYyMCAtIHByaXYtXFx1MDAzZXR4X2hkcl9sZW47XFxuIDExMTpcXHRcXHRcXHRcXHRtYXhsZW4gPSBwcml2LVxcdTAwM2V0eF9oZHJfbGVuICsgLyogVVNCIGRldmljZXMgKi9cXG4gMTEyOlxcdFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSArXFxuIDExMzpcXHRcXHRcXHRcXHRcXHQgNCArIC8qIHJ4IGFsaWdubWVudCAqL1xcbiAxMTQ6XFx0XFx0XFx0XFx0XFx0IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQ7XFxuIDExNTpcXHRcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnhfbXR1IFxcdTAwM2UgbWF4bGVuIFxcdTAwMjZcXHUwMDI2IFBBR0VfU0laRSA9PSA0MDk2KSB7XFxuIDExNjpcXHRcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9JTkZPIFxcXCJwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgXFxcIlxcbiAxMTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ0byAlZFxcXFxuXFxcIiwgcHJpdi1cXHUwMDNlcnhfbXR1LCBtYXhsZW4pO1xcbiAxMTg6XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfbXR1ID0gbWF4bGVuO1xcbiAxMTk6XFx0XFx0XFx0XFx0fVxcbiAxMjA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyMTpcXHRcXHRcXHRcXHR9XFxuIDEyMjpcXHRcXHRcXHRjYXNlIEJSX0NPREVfRVhQT1NFRF9JRjpcXG4gMTIzOlxcdFxcdFxcdFxcdGV4cF9pZiA9IChzdHJ1Y3QgZXhwX2lmICopIGJvb3RyZWMtXFx1MDAzZWRhdGE7XFxuIDEyNDpcXHRcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGxlbiAqIHNpemVvZigqZXhwX2lmKSAvIDQpOyBpKyspXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRpZiAoZXhwX2lmW2ldLmlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0xNQUMpKVxcbiAxMjY6XFx0XFx0XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfdmFyID0gbGUxNl90b19jcHUoZXhwX2lmW2ldLnZhcmlhbnQpO1xcbiAxMjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyODpcXHRcXHRcXHRjYXNlIEJSX0NPREVfREVQRU5ERU5UX0lGOlxcbiAxMjk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjM4OjUzLjE5NDY0MDIxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTU1Mzk4OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBGaXJtd2FyZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyB0aGUgYHA1NF9wYXJzZV9maXJtd2FyZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGZpcm13YXJlIGRlc2NyaXB0b3IgcGFyc2luZy4gSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBjcnVjaWFsIHNhbml0eSBjaGVja3MsIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCB1bmRlcmZsb3cgaXNzdWVzLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHR3byBrZXkgY29uY2VybnM6XG5cbjEuICBUaGVyZSdzIGEgY2hlY2sgb24gYGxlbmAgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYSBgYm9vdHJlY19kZXNjYCBzdHJ1Y3R1cmUgd2hlbiBhY2Nlc3NpbmcgaXRzIG1lbWJlcnMuIEl0J3MgdXNpbmcgYERJVl9ST1VORF9VUGAgYW5kIGBvZmZzZXRvZmVuZGAgdG8gZW5zdXJlIHRoYXQgaXQgb25seSBhY2Nlc3NlcyB2YWxpZCBtZW1vcnkgd2l0aGluIHRoZSBkZXNjcmlwdG9yJ3MgZGVmaW5lZCBib3VuZHMuIFRoaXMgbG9va3MgbGlrZSBhIHByZWVtcHRpdmUgbWVhc3VyZSBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJmbG93LCB3aGljaCBpcyBnb29kIHByYWN0aWNlLlxuXG4yLiAgVGhlIHNlY29uZCBjaGVjayBvbiBgcnhfZW5kYCByZWxhdGVzIHRvIHRoZSByZWNlaXZlciByYW5nZS4gSXQncyBndWFyZGluZyBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0eSBvZiBgcnhfZW5kYCBiZWluZyBhbiBpbnZhbGlkIHZhbHVlLCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gYHJ4X3N0YXJ0YC4gSXQgc2VlbXMgdGhhdCBhbiBpbnZhbGlkIGByeF9lbmRgIGNvdWxkIGxlYWQgdG8gYW4gdW5kZXJmbG93LCB3aGljaCB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBgcnhfc3RhcnRgIGFuZCBgcnhfZW5kYCB2YXJpYWJsZXMgd2l0aGluIHRoZSBwNTQgZHJpdmVyJ3MgY29kZWJhc2UuIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBmdWxseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBpZiB0aGlzIGlzIGEga25vd24gcmlzayBpbiBvdXIgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvYCBkaXJlY3RvcnkgdG8gdHJhY2sgZG93biB0aGUgbG9jYXRpb25zIHdoZXJlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIGFyZSB1c2VkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBwYXRjaCdzIGNoYW5nZXMgd2lsbCBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzg6NTYuMzUwMDQyMzUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc5OTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeF8oc3RhcnR8ZW5kKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9Mjc9aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mzk6XFx0aWYgKHByaXYtXFx1MDAzZXJ4X3N0YXJ0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtNDAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTgxLVxcdFxcdFxcdFxcdChzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy1cXHUwMDNlZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjgyOlxcdFxcdFxcdHUzMiByeF9zdGFydCwgcnhfZW5kO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtODMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTI6XFx0XFx0XFx0cnhfc3RhcnQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9zdGFydCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzo5MzpcXHRcXHRcXHRyeF9lbmQgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2VyeF9lbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6OTQ6XFx0XFx0XFx0aWYgKHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk1LVxcdFxcdFxcdFxcdHdpcGh5X2Vycihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTk5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MTAwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXJ4X3N0YXJ0ID0gcnhfc3RhcnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYzoxMDE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnhfZW5kID0gcnhfZW5kIC0gMHgzNTAwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMTAyLVxcdFxcdFxcdHByaXYtXFx1MDAzZWhlYWRyb29tID0gZGVzYy1cXHUwMDNlaGVhZHJvb207XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTMxMD1pbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MzE2OlxcdGlmICh1bmxpa2VseShfcmVxX2lkIFxcdTAwM2MgcHJpdi1cXHUwMDNlcnhfc3RhcnQgfHwgX3JlcV9pZCBcXHUwMDNlIHByaXYtXFx1MDAzZXJ4X2VuZCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zMTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTMzMD1pbnQgcDU0X3NldHVwX21hYyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMzgwLVxcdFxcdG1lbXNldChzZXR1cC1cXHUwMDNldjEucnRzX3JhdGVzLCAwLCA4KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjM4MTpcXHRcXHRzZXR1cC1cXHUwMDNldjEucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtXFx1MDAzZXJ4X2VuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0zODItXFx0XFx0c2V0dXAtXFx1MDAzZXYxLm1heF9yeCA9IGNwdV90b19sZTE2KHByaXYtXFx1MDAzZXJ4X210dSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4Ni1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6Mzg3OlxcdFxcdHNldHVwLVxcdTAwM2V2Mi5yeF9hZGRyID0gY3B1X3RvX2xlMzIocHJpdi1cXHUwMDNlcnhfZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jLTM4OC1cXHRcXHRzZXR1cC1cXHUwMDNldjIubWF4X3J4ID0gY3B1X3RvX2xlMTYocHJpdi1cXHUwMDNlcnhfbXR1KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD00Nz1zdHJ1Y3QgYm9vdHJlY19kZXNjIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC00OS1cXHRfX2xlMTYgZmxhZ3M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjUwOlxcdF9fbGUzMiByeF9zdGFydDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6NTE6XFx0X19sZTMyIHJ4X2VuZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtNTItXFx0dTggaGVhZHJvb207XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MTY0PXN0cnVjdCBwNTRfY29tbW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0xNzUtXFx0LyogbWVtb3J5IG1hbmFnZW1lbnQgKGFzIHNlZW4gYnkgdGhlIGZpcm13YXJlKSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoxNzY6XFx0dTMyIHJ4X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoxNzc6XFx0dTMyIHJ4X2VuZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMTc4LVxcdHUxNiByeF9tdHU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jPTI3PXN0YXRpYyB2b2lkIHA1NF9kdW1wX3R4X3F1ZXVlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYy00MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjQyOlxcdHByZXZfYWRkciA9IHByaXYtXFx1MDAzZXJ4X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNDMtXFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNnByaXYtXFx1MDAzZXR4X3F1ZXVlLCBza2IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtNjAtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmM6NjE6XFx0ZnJlZSA9IHByaXYtXFx1MDAzZXJ4X2VuZCAtIHByZXZfYWRkcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTYyLVxcdGxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIGZyZWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYz03OT1zdGF0aWMgaW50IHA1NF9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtODUtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjg2OlxcdHUzMiBsYXN0X2FkZHIgPSBwcml2LVxcdTAwM2VyeF9zdGFydDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jOjg3OlxcdHUzMiB0YXJnZXRfYWRkciA9IHByaXYtXFx1MDAzZXJ4X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC90eHJ4LmMtODgtXFx0dTE2IGxlbiA9IHByaXYtXFx1MDAzZWhlYWRyb29tICsgc2tiLVxcdTAwM2VsZW4gKyBwcml2LVxcdTAwM2V0YWlscm9vbSArIDM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTExOS1cXHRpZiAodW5saWtlbHkoIXRhcmdldF9za2IpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3R4cnguYzoxMjA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXJ4X2VuZCAtIGxhc3RfYWRkciBcXHUwMDNlPSBsZW4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvdHhyeC5jLTEyMS1cXHRcXHRcXHR0YXJnZXRfc2tiID0gc2tiX3BlZWtfdGFpbChcXHUwMDI2cHJpdi1cXHUwMDNldHhfcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzozODo1Ni40MDI4NDY1MDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc3Nzg3MDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRmlybXdhcmUgUGFyc2luZyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBpbiBob3cgd2UncmUgaGFuZGxpbmcgdGhlIGBib290cmVjLVx1MDAzZWRhdGFgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGBwNTRfcGFyc2VfZmlybXdhcmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB3ZSBoYWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIHByb2JsZW1zOlxuXG5GaXJzdCwgd2l0aG91dCBwcm9wZXIgYm91bmRzIGNoZWNraW5nLCB3ZSB3ZXJlIHBvdGVudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBgYm9vdHJlYy1cdTAwM2VkYXRhYCBidWZmZXIgd2hlbiBhY2Nlc3NpbmcgZmllbGRzIGxpa2UgYHJ4X3N0YXJ0YCwgYHJ4X2VuZGAsIGV0Yy4sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYnVmZmVyIG92ZXJydW5zLiBLQVNBTiB3b3VsZCBwaWNrIHRoYXQgdXAgdGhvdWdoLlxuXG5TZWNvbmQsIHRoZSBsaW5lIGBwcml2LVx1MDAzZXJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnhfZW5kKSAtIDB4MzUwMDtgIGNvdWxkIHVuZGVyZmxvdy4gSWYgYHJ4X2VuZGAgd2FzIGxlc3MgdGhhbiBgMHgzNTAwYCwgb3IgaWYgdGhlIHJlc3VsdCBvZiB0aGF0IHN1YnRyYWN0aW9uIHdhcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHJ4X3N0YXJ0YCwgd2UnZCBoYXZlIGludGVnZXIgdW5kZXJmbG93LCBwb3RlbnRpYWxseSBjcmVhdGluZyBpbXByb3BlciBib3VuZHMgZm9yIFRYL1JYIHF1ZXVlcy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBLTVNBTiByZXF1aXJlbWVudHMuIERvIHdlIGhhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwb3RlbnRpYWwgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIHRoZSBmaXJtd2FyZSBidWZmZXIgaXMgYWxyZWFkeSBsb2FkZWQgb3IgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIHNvIGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGRlYWwgd2l0aCBpdC4gVGhlIGByeF9zdGFydGAgYW5kIGByeF9lbmRgIHZhcmlhYmxlcyBhcmUgbG9jYWwsIGFuZCBpbml0aWFsaXplZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgYGxlMzJfdG9fY3B1KClgIGNvdW50ZXJwYXJ0cy4gVGhlIGJvdW5kcyBjaGVjayB3ZSBwdXQgaW4gcGxhY2Ugbm93IChgbGVuIFx1MDAzYyAuLi5gKSBtYWtlcyBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25kIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgcmFuZ2UgY2hlY2sgYWxzbyBwcmV2ZW50cyB0aGUgYXJpdGhtZXRpYyB1bmRlcmZsb3cuIEtBU0FOIGFscmVhZHkgYWRkcmVzc2VzIHRoZSBib3VuZHMgY2hlY2svb3ZlcnJ1biBpc3N1ZS5cblxuU28sIHRoaXMgaXNuJ3QgYSBLTVNBTiBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb2Yga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgdGhlIGJvdW5kcyBjaGVjayAqcHJldmVudHMqIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQncyBjb25maXJtIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3NCwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6Mzk6MDEuMTgwNzIwMzU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIGluIGBwNTRfcGFyc2VfZmlybXdhcmUoKWAgdG8gcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gZmlybXdhcmUgYm9vdCByZWNvcmRzIChgbGVuIFxcdTAwM2MgRElWX1JPVU5EX1VQKG9mZnNldG9mZW5kKC4uLikpYCkgYW5kIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cvaW52YWxpZCBSWCByYW5nZSBjYWxjdWxhdGlvbiAoYHJ4X2VuZCBcXHUwMDNjIDB4MzUwMCB8fCByeF9lbmQgLSAweDM1MDAgXFx1MDAzYz0gcnhfc3RhcnRgKS4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFuZCBpbnRlZ2VyIGFyaXRobWV0aWMgYnVncywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOIGFuZCBVQlNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgcDU0X3BhcnNlX2Zpcm13YXJlKClgIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGZpcm13YXJlIGJvb3QgcmVjb3JkcyAoYGxlbiBcXHUwMDNjIERJVl9ST1VORF9VUChvZmZzZXRvZmVuZCguLi4pKWApIGFuZCB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93L2ludmFsaWQgUlggcmFuZ2UgY2FsY3VsYXRpb24gKGByeF9lbmQgXFx1MDAzYyAweDM1MDAgfHwgcnhfZW5kIC0gMHgzNTAwIFxcdTAwM2M9IHJ4X3N0YXJ0YCkuIFxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhbmQgaW50ZWdlciBhcml0aG1ldGljIGJ1Z3MsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiBhbmQgVUJTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[1] Phase: Succeeded StartedAt: 2026-09-06 23:39:34 +0000 UTC FinishedAt: 2026-09-06 23:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 23:39:34 +0000 UTC FinishedAt: 2026-09-06 23:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2] Phase: Succeeded StartedAt: 2026-09-06 23:39:34 +0000 UTC FinishedAt: 2026-09-07 00:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 23:39:34 +0000 UTC FinishedAt: 2026-09-07 00:25:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 23:39:34 +0000 UTC FinishedAt: 2026-09-06 23:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 23:39:34 +0000 UTC FinishedAt: 2026-09-06 23:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflowz8gln/series-workflowz8gln-convert-artifact-2759157687/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 23:39:44 +0000 UTC FinishedAt: 2026-09-07 00:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 23:39:44 +0000 UTC FinishedAt: 2026-09-07 00:04:02 +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:*fee76e66-3986-4dba-9a4f-3aed976f91ec,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-workflowz8gln/series-workflowz8gln-convert-artifact-2759157687/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": "811c859c-d27f-435e-93ef-1eaf7b3ffd5d", "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-workflowz8gln/series-workflowz8gln-build-action-3449472781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 23:39:44 +0000 UTC FinishedAt: 2026-09-07 00:03:52 +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:*fee76e66-3986-4dba-9a4f-3aed976f91ec,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-workflowz8gln/series-workflowz8gln-convert-artifact-2759157687/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": "811c859c-d27f-435e-93ef-1eaf7b3ffd5d", "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-workflowz8gln/series-workflowz8gln-build-action-3449472781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 00:04:02 +0000 UTC FinishedAt: 2026-09-07 00:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 00:04:02 +0000 UTC FinishedAt: 2026-09-07 00:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 00:04:02 +0000 UTC FinishedAt: 2026-09-07 00:04:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 00:04:02 +0000 UTC FinishedAt: 2026-09-07 00:04:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflowz8gln/series-workflowz8gln-convert-artifact-2348394726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 00:04:12 +0000 UTC FinishedAt: 2026-09-07 00:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 00:04:12 +0000 UTC FinishedAt: 2026-09-07 00:06:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*811c859c-d27f-435e-93ef-1eaf7b3ffd5d,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-workflowz8gln/series-workflowz8gln-build-action-3449472781/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-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 00:06:17 +0000 UTC FinishedAt: 2026-09-07 00:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 00:06:17 +0000 UTC FinishedAt: 2026-09-07 00:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 00:06:17 +0000 UTC FinishedAt: 2026-09-07 00:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 00:06:17 +0000 UTC FinishedAt: 2026-09-07 00:22:28 +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:*fee76e66-3986-4dba-9a4f-3aed976f91ec,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-workflowz8gln/series-workflowz8gln-convert-artifact-2348394726/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": "e00a9a0b-b47d-4cbe-9e84-db83a15b92a1", "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-workflowz8gln/series-workflowz8gln-build-action-2094161578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 00:06:17 +0000 UTC FinishedAt: 2026-09-07 00:22:18 +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:*fee76e66-3986-4dba-9a4f-3aed976f91ec,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-workflowz8gln/series-workflowz8gln-convert-artifact-2348394726/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": "e00a9a0b-b47d-4cbe-9e84-db83a15b92a1", "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-workflowz8gln/series-workflowz8gln-build-action-2094161578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 00:22:28 +0000 UTC FinishedAt: 2026-09-07 00:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 00:22:28 +0000 UTC FinishedAt: 2026-09-07 00:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 00:22:28 +0000 UTC FinishedAt: 2026-09-07 00:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 00:22:28 +0000 UTC FinishedAt: 2026-09-07 00:24:18 +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:*e00a9a0b-b47d-4cbe-9e84-db83a15b92a1,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-workflowz8gln/series-workflowz8gln-build-action-2094161578/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-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 00:24:28 +0000 UTC FinishedAt: 2026-09-07 00:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 00:24:28 +0000 UTC FinishedAt: 2026-09-07 00:25:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"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:*811c859c-d27f-435e-93ef-1eaf7b3ffd5d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e00a9a0b-b47d-4cbe-9e84-db83a15b92a1,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-workflowz8gln/series-workflowz8gln-build-action-3449472781/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-workflowz8gln/series-workflowz8gln-build-action-2094161578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 00:24:28 +0000 UTC FinishedAt: 2026-09-07 00:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 00:24:28 +0000 UTC FinishedAt: 2026-09-07 00:24:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"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-workflowz8gln/series-workflowz8gln-convert-artifact-407969835/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 00:24:28 +0000 UTC FinishedAt: 2026-09-07 00:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 00:24:28 +0000 UTC FinishedAt: 2026-09-07 00:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 00:24:28 +0000 UTC FinishedAt: 2026-09-07 00:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 00:24:38 +0000 UTC FinishedAt: 2026-09-07 00:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8gln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_firmware","p54u_start_ops","p54u_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211","USB"],"series_id":"af4e6037-5f92-415b-8785-10cdf4f5ba18","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 00:24:38 +0000 UTC FinishedAt: 2026-09-07 00:25:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*811c859c-d27f-435e-93ef-1eaf7b3ffd5d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e00a9a0b-b47d-4cbe-9e84-db83a15b92a1,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-workflowz8gln/series-workflowz8gln-build-action-3449472781/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-workflowz8gln/series-workflowz8gln-build-action-2094161578/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-workflowz8gln/series-workflowz8gln-convert-artifact-407969835/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,}