Name: series-workflowbr5tg Phase: Succeeded StartedAt: 2026-08-25 07:36:40 +0000 UTC FinishedAt: 2026-08-25 12:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[0] Phase: Succeeded StartedAt: 2026-08-25 07:36:40 +0000 UTC FinishedAt: 2026-08-25 08:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 07:36:40 +0000 UTC FinishedAt: 2026-08-25 08:22:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_TUNNEL" ], "series_id": "6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_tnl_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF94bWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVx1MDAzZWVuY2FwYCBieSB0YWtpbmcgYSBzbmFwc2hvdCBvZiBpdCBpbnRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGlwZW5jYXBgIGFuZCB1c2luZyB0aGF0IHNuYXBzaG90IGZvciBib3RoIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGUgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgc21hbGwgOC1ieXRlIHN0cnVjdHVyZSB3aXRoIG5vIHBhZGRpbmcsIGFuZCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cdTAwM2VlbmNhcCk7YC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtDU0FOIChmb3IgZGF0YSByYWNlcykgb3IgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBidWcuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA4OjE5OjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuaW5kZXggYjk5ODA1ZWUyZmQxNC4uNmU3NmU1MGE0NDA2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG5AQCAtMTA2LDIyICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXG4gXHRyZXR1cm4gaGxlbjtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXA2X3RubCAqdCxcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxuIFx0XHRcdFx0dTggKnByb3RvY29sLCBzdHJ1Y3QgZmxvd2k2ICpmbDYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHM7XG4gXHRpbnQgcmV0ID0gLUVJTlZBTDtcbiBcbi1cdGlmICh0LVx1MDAzZWVuY2FwLnR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXG4mIzQzO1x0aWYgKGUtXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodC1cdTAwM2VlbmNhcC50eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbiYjNDM7XHRpZiAoZS1cdTAwM2V0eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1t0LVx1MDAzZWVuY2FwLnR5cGVdKTtcbiYjNDM7XHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1tlLVx1MDAzZXR5cGVdKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlYnVpbGRfaGVhZGVyKSlcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIFx1MDAyNnQtXHUwMDNlZW5jYXAsIHByb3RvY29sLCBmbDYpO1xuJiM0MztcdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIGUsIHByb3RvY29sLCBmbDYpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uNjNjNTI0YjA4MGRkNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTEwMiw2ICYjNDM7MTEwMiw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHQgX191OCBwcm90bylcbiB7XG4gXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gdC1cdTAwM2VuZXQ7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7XG4gXHRzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0O1xuQEAgLTExMDksMTAgJiM0MzsxMTEwLDExIEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7XG4gXHRpbnQgZXJyX2NvdW50LCBtdHU7XG4gXHR1bnNpZ25lZCBpbnQgZXRoX2hsZW4gPSB0LVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IEVUSF9ITEVOIDogMDtcbi1cdHVuc2lnbmVkIGludCBwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MzsgdC1cdTAwM2VlbmNhcF9obGVuO1xuLVx0dW5zaWduZWQgaW50IG1heF9oZWFkcm9vbSA9IHBzaF9obGVuO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb207XG4gXHRfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDtcbiBcdGJvb2wgdXNlX2NhY2hlID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBzaF9obGVuO1xuJiM0MztcdGludCBlbmNhcF9obGVuO1xuIFx0dTggaG9wX2xpbWl0O1xuIFx0aW50IGVyciA9IC0xO1xuIFxuQEAgLTEyMDIsNiAmIzQzOzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdFx0XHQgICAgIHQtXHUwMDNlcGFybXMubmFtZSk7XG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBDYW4gdGVhciwgYnV0IGhsZW4gYW5kIGJ1aWxkX2hlYWRlcigpIHVzZSB0aGUgc2FtZSBzbmFwc2hvdC4gKi9cbiYjNDM7XHRpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO1xuJiM0MztcdGVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoZW5jYXBfaGxlbiBcdTAwM2MgMCkpXG4mIzQzO1x0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiYjNDM7XHRwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MzsgZW5jYXBfaGxlbjtcbiYjNDM7XHRtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcbiYjNDM7XG4gXHRtdHUgPSBkc3Q2X210dShkc3QpIC0gZXRoX2hsZW4gLSBwc2hfaGxlbiAtIHQtXHUwMDNldHVuX2hsZW47XG4gXHRpZiAoZW5jYXBfbGltaXQgXHUwMDNlPSAwKSB7XG4gXHRcdG1heF9oZWFkcm9vbSAmIzQzOz0gODtcbkBAIC0xMjQwLDcgJiM0MzsxMjUxLDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFxuIFx0aWYgKHQtXHUwMDNlcGFybXMuY29sbGVjdF9tZCkge1xuLVx0XHRpZiAodC1cdTAwM2VlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuJiM0MztcdFx0aWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICh1c2VfY2FjaGUgXHUwMDI2XHUwMDI2IG5kc3QpXG5AQCAtMTI2NCw3ICYjNDM7MTI3NSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHRcdCYjNDM7IGRzdC1cdTAwM2VoZWFkZXJfbGVuICYjNDM7IHQtXHUwMDNlaGxlbjtcbiBcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pO1xuIFxuLVx0ZXJyID0gaXA2X3RubF9lbmNhcChza2IsIHQsIFx1MDAyNnByb3RvLCBmbDYpO1xuJiM0MztcdGVyciA9IGlwNl90bmxfZW5jYXAoc2tiLCBcdTAwMjZpcGVuY2FwLCBcdTAwMjZwcm90bywgZmw2KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDA4OjE5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCmluZGV4IGI5OTgwNWVlMmZkMTQuLjZlNzZlNTBhNDQwNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKQEAgLTEwNiwyMiAmIzQzOzEwNiwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBpcDZfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKQogCXJldHVybiBobGVuOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpcDZfdG5sX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcDZfdG5sICp0LAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSwKIAkJCQl1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTYgKmZsNikKIHsKIAljb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wczsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmICh0LSZndDtlbmNhcC50eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKQomIzQzOwlpZiAoZS0mZ3Q7dHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodC0mZ3Q7ZW5jYXAudHlwZSAmZ3Q7PSBNQVhfSVBUVU5fRU5DQVBfT1BTKQomIzQzOwlpZiAoZS0mZ3Q7dHlwZSAmZ3Q7PSBNQVhfSVBUVU5fRU5DQVBfT1BTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1t0LSZndDtlbmNhcC50eXBlXSk7CiYjNDM7CW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW2UtJmd0O3R5cGVdKTsKIAlpZiAobGlrZWx5KG9wcyAmYW1wOyZhbXA7IG9wcy0mZ3Q7YnVpbGRfaGVhZGVyKSkKLQkJcmV0ID0gb3BzLSZndDtidWlsZF9oZWFkZXIoc2tiLCAmYW1wO3QtJmd0O2VuY2FwLCBwcm90b2NvbCwgZmw2KTsKJiM0MzsJCXJldCA9IG9wcy0mZ3Q7YnVpbGRfaGVhZGVyKHNrYiwgZSwgcHJvdG9jb2wsIGZsNik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGQ1ZmY1MGEyYWMwMTcuLjYzYzUyNGIwODBkZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTExMDIsNiAmIzQzOzExMDIsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJIF9fdTggcHJvdG8pCiB7CiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7CiAJc3RydWN0IG5ldCAqbmV0ID0gdC0mZ3Q7bmV0OwogCXN0cnVjdCBpcHY2aGRyICppcHY2aDsKIAlzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0OwpAQCAtMTEwOSwxMCAmIzQzOzExMTAsMTEgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsCiAJc3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7CiAJaW50IGVycl9jb3VudCwgbXR1OwogCXVuc2lnbmVkIGludCBldGhfaGxlbiA9IHQtJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBFVEhfSExFTiA6IDA7Ci0JdW5zaWduZWQgaW50IHBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyB0LSZndDtlbmNhcF9obGVuOwotCXVuc2lnbmVkIGludCBtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9oZWFkcm9vbTsKIAlfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDsKIAlib29sIHVzZV9jYWNoZSA9IGZhbHNlOwomIzQzOwl1bnNpZ25lZCBpbnQgcHNoX2hsZW47CiYjNDM7CWludCBlbmNhcF9obGVuOwogCXU4IGhvcF9saW1pdDsKIAlpbnQgZXJyID0gLTE7CiAKQEAgLTEyMDIsNiAmIzQzOzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsCiAJCQkJICAgICB0LSZndDtwYXJtcy5uYW1lKTsKIAkJZ290byB0eF9lcnJfZHN0X3JlbGVhc2U7CiAJfQomIzQzOwomIzQzOwkvKiBDYW4gdGVhciwgYnV0IGhsZW4gYW5kIGJ1aWxkX2hlYWRlcigpIHVzZSB0aGUgc2FtZSBzbmFwc2hvdC4gKi8KJiM0MzsJaXBlbmNhcCA9IGRhdGFfcmFjZSh0LSZndDtlbmNhcCk7CiYjNDM7CWVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbigmYW1wO2lwZW5jYXApOwomIzQzOwlpZiAodW5saWtlbHkoZW5jYXBfaGxlbiAmbHQ7IDApKQomIzQzOwkJZ290byB0eF9lcnJfZHN0X3JlbGVhc2U7CiYjNDM7CXBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyBlbmNhcF9obGVuOwomIzQzOwltYXhfaGVhZHJvb20gPSBwc2hfaGxlbjsKJiM0MzsKIAltdHUgPSBkc3Q2X210dShkc3QpIC0gZXRoX2hsZW4gLSBwc2hfaGxlbiAtIHQtJmd0O3R1bl9obGVuOwogCWlmIChlbmNhcF9saW1pdCAmZ3Q7PSAwKSB7CiAJCW1heF9oZWFkcm9vbSAmIzQzOz0gODsKQEAgLTEyNDAsNyAmIzQzOzEyNTEsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJZ290byB0eF9lcnJfZHN0X3JlbGVhc2U7CiAKIAlpZiAodC0mZ3Q7cGFybXMuY29sbGVjdF9tZCkgewotCQlpZiAodC0mZ3Q7ZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSkKJiM0MzsJCWlmIChpcGVuY2FwLnR5cGUgIT0gVFVOTkVMX0VOQ0FQX05PTkUpCiAJCQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKIAl9IGVsc2UgewogCQlpZiAodXNlX2NhY2hlICZhbXA7JmFtcDsgbmRzdCkKQEAgLTEyNjQsNyAmIzQzOzEyNzUsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJCSYjNDM7IGRzdC0mZ3Q7aGVhZGVyX2xlbiAmIzQzOyB0LSZndDtobGVuOwogCWlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pOwogCi0JZXJyID0gaXA2X3RubF9lbmNhcChza2IsIHQsICZhbXA7cHJvdG8sIGZsNik7CiYjNDM7CWVyciA9IGlwNl90bmxfZW5jYXAoc2tiLCAmYW1wO2lwZW5jYXAsICZhbXA7cHJvdG8sIGZsNik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSBhIHBhdGNoIGRlc2lnbmVkIGZvciBmdXp6aW5nLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYCBhbmQgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIHRoYXQgYGlwNl90bmxfZW5jYXBgIG5vdyB0YWtlcyBhIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplYCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBpcDZfdG5sICp0YC4gTW9yZSBpbnRlcmVzdGluZ2x5LCBpbiBgaXA2X3RubF94bWl0YCwgdGhleSYjMzk7cmUgdXNpbmcgYGRhdGFfcmFjZSh0LSZndDtlbmNhcClgIHRvIHNhZmVseSByZWFkIGB0LSZndDtlbmNhcGAgaW50byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSB1c2luZyBpdCBmb3Igc2V2ZXJhbCBjYWxscy4gUmlnaHQsIGZpeGluZyBhIGRhdGEgcmFjZSDigJMgYSB2ZXJ5IHZhbGlkIHJlYXNvbiB0byBmdXp6IHRoaXMuIEluY29uc2lzdGVudCBzdGF0ZSBkdWUgdG8gcmFjZSBjb25kaXRpb25zIGNhbiBiZSBuYXN0eSBhbmQgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC4KCk5vdywgbGV0JiMzOTtzIGdldCBmb2N1c2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBhbmQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgaXA2X3RubF94bWl0YC4gVGhlIGNvZGUgaXMgd2l0aGluIHRoZSBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBtb2R1bGUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgbGlrZWx5IHJldmVhbHMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24uLi55dXAsIGBJUFY2X1RVTk5FTGAuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbmV0L2lwdjYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIFRoaXMgd2lsbCBoZWxwIGVuc3VyZSBteSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cyB0aGUgcmlnaHQgYnVpbGQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdHVubmVsLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjgyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIElQdjYgVHVubmVsIERhdGEgUmFjZSBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYCBhbmQgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IGBpcDZfdG5sX2VuY2FwYCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBub3cgdGFraW5nIGEgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVgIGluc3RlYWQgb2YgYHN0cnVjdCBpcDZfdG5sICp0YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBhYm91dCBpbXByb3ZpbmcgZW5jYXBzdWxhdGlvbiBtYW5hZ2VtZW50LgoKU3BlY2lmaWNhbGx5LCBpbiBgaXA2X3RubF94bWl0YCwgSSBzZWUgdGhhdCBgdC0mZ3Q7ZW5jYXBgIGlzIGJlaW5nIGFjY2Vzc2VkIHVzaW5nIGBkYXRhX3JhY2UoKWAuIEFoLCB0aGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbjsgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGRhdGEgcmFjZS4gVGhlIGNvZGUgaXMgcHVsbGluZyBgdC0mZ3Q7ZW5jYXBgIGludG8gYSBsb2NhbCB2YXJpYWJsZSwgYGlwZW5jYXBgLCB1c2luZyB0aGF0IGZvciB0aGUgYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgIGNhbGxzLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgYXBwcm9hY2ggdG8gZml4aW5nIGEgcmFjZSBjb25kaXRpb24gb24gYSBzaGFyZWQgc3RydWN0dXJlLiBCeSBjb3B5aW5nIGl0IHRvIGEgbG9jYWwgdmFyaWFibGUgeW91IGVuc3VyZSB0aGF0IHlvdXIgZnVuY3Rpb24gaXMgYWN0aW5nIG9uIGEgY29uc3RhbnQgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgYSBkYXRhIHJhY2UgZml4LgoKVGhlIGZhY3QgdGhhdCBgaXA2X3RubF94bWl0YCBpcyBleHBvcnRlZCB0ZWxscyBtZSBpdCYjMzk7cyB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3IgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBJUHY2IHR1bm5lbCBkcml2ZXIsIGxpa2VseSBtYWtpbmcgdGhpcyBmaXggcXVpdGUgaW1wb3J0YW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgdG8gY29uZmlybSB0aGF0IGBpcDZfdG5sX3htaXRgIHJlYWxseSBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVscywgYW5kIHRoYXQgdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGlzIGluZGVlZCB0aWVkIHRvIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVuLCBJJiMzOTtsbCB2ZXJpZnkgaWYgYGlwNl90bmxfeG1pdGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmlwNl90bmxfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTA0Mj1pbnQgaXA2X3RubF94bWl0X2N0bChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ny19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTA3ODpFWFBPUlRfU1lNQk9MX0dQTChpcDZfdG5sX3htaXRfY3RsKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMDc5LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMTAwPWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMzA0LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxMzA1OkVYUE9SVF9TWU1CT0woaXA2X3RubF94bWl0KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMzA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRGF0YSBSYWNlIEZpeCBpbiBJUHY2IFR1bm5lbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYGlwNl90bmxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGFsc28gdG91Y2hlcyBgaXA2X3RubF9lbmNhcGAgaW4gYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhYm91dCBob3cgdGhlIGB0LSZndDtlbmNhcGAgbWVtYmVyIGlzIGFjY2Vzc2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW50cm9kdWNpbmcgYGRhdGFfcmFjZSh0LSZndDtlbmNhcClgIHRvIHJlYWQgdGhhdCB2YWx1ZSBpbnRvIGEgbG9jYWwgdmFyaWFibGUgKGBpcGVuY2FwYCkuIFRoZSBnb2FsIGhlcmUgaXMgcHJldHR5IGNsZWFyOiB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBhIGRhdGEgcmFjZSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGF0IGB0LSZndDtlbmNhcGAgY2FuIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4OyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSB0byBwcm90ZWN0IGFnYWluc3QgYSBjb25jdXJyZW5jeSBidWcuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYENPTkZJR19JUFY2X1RVTk5FTGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLgoKTXkgbmV4dCBzdGVwIGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0LiBMZXQmIzM5O3MgbG9vayBhdCB3aG8gY2FsbHMgYGlwNl90bmxfeG1pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGEgY2VudHJhbCBlbnRyeSBwb2ludCBvciBpZiBpdCYjMzk7cyBiZWluZyB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjay4gTG9va3MgbGlrZSBpdCYjMzk7cyBleHBvcnRlZCwgc28gaXQgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZS4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyBhbiB4bWl0IGZ1bmN0aW9uIGZvciBJUHY2IHR1bm5lbHM7IG1ha2VzIHNlbnNlLiBJIHdpbGwgaW52ZXN0aWdhdGUgY2FsbGVycyBvZiBgaXA2X3RubF9lbmNhcGAsIGFzIGl0JiMzOTtzIHRoZSBvdGhlciBmdW5jdGlvbiBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfZW5jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZm91Ni5jPTg5PXN0YXRpYyBpbnQgZ3VlNl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXG4tLVxubmV0L2lwdjYvZm91Ni5jLTE1Ni1cbm5ldC9pcHY2L2ZvdTYuYzoxNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyBmb3VfaXA2dHVuX29wcyA9IHtcbm5ldC9pcHY2L2ZvdTYuYy0xNTgtXHQuZW5jYXBfaGxlbiA9IGZvdV9lbmNhcF9obGVuLFxuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xNjItXG5uZXQvaXB2Ni9mb3U2LmM6MTYzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgZ3VlX2lwNnR1bl9vcHMgPSB7XG5uZXQvaXB2Ni9mb3U2LmMtMTY0LVx0LmVuY2FwX2hsZW4gPSBndWVfZW5jYXBfaGxlbixcbi0tXG5uZXQvaXB2Ni9mb3U2LmMtMTY4LVxubmV0L2lwdjYvZm91Ni5jOjE2OTpzdGF0aWMgaW50IGlwNl90bmxfZW5jYXBfYWRkX2ZvdV9vcHModm9pZClcbm5ldC9pcHY2L2ZvdTYuYy0xNzAte1xuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xNzItXG5uZXQvaXB2Ni9mb3U2LmM6MTczOlx0cmV0ID0gaXA2X3RubF9lbmNhcF9hZGRfb3BzKFx1MDAyNmZvdV9pcDZ0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY2L2ZvdTYuYy0xNzQtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjYvZm91Ni5jLTE3OC1cbm5ldC9pcHY2L2ZvdTYuYzoxNzk6XHRyZXQgPSBpcDZfdG5sX2VuY2FwX2FkZF9vcHMoXHUwMDI2Z3VlX2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xubmV0L2lwdjYvZm91Ni5jLTE4MC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbm5ldC9pcHY2L2ZvdTYuYy0xODEtXHRcdHByX2VycihcJiMzNDtjYW4mIzM5O3QgYWRkIGd1ZTYgb3BzXFxuXCYjMzQ7KTtcbm5ldC9pcHY2L2ZvdTYuYzoxODI6XHRcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXA2dHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XG5uZXQvaXB2Ni9mb3U2LmMtMTgzLVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xODgtXG5uZXQvaXB2Ni9mb3U2LmM6MTg5OnN0YXRpYyB2b2lkIGlwNl90bmxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcbm5ldC9pcHY2L2ZvdTYuYy0xOTAte1xubmV0L2lwdjYvZm91Ni5jOjE5MTpcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXA2dHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XG5uZXQvaXB2Ni9mb3U2LmM6MTkyOlx0aXA2X3RubF9lbmNhcF9kZWxfb3BzKFx1MDAyNmd1ZV9pcDZ0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcbm5ldC9pcHY2L2ZvdTYuYy0xOTMtfVxuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xOTYtXG5uZXQvaXB2Ni9mb3U2LmM6MTk3OnN0YXRpYyBpbnQgaXA2X3RubF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxubmV0L2lwdjYvZm91Ni5jLTE5OC17XG4tLVxubmV0L2lwdjYvZm91Ni5jLTIwMS1cbm5ldC9pcHY2L2ZvdTYuYzoyMDI6c3RhdGljIHZvaWQgaXA2X3RubF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxubmV0L2lwdjYvZm91Ni5jLTIwMy17XG4tLVxubmV0L2lwdjYvZm91Ni5jPTIwOD1zdGF0aWMgaW50IF9faW5pdCBmb3U2X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9mb3U2LmMtMjExLVxubmV0L2lwdjYvZm91Ni5jOjIxMjpcdHJldCA9IGlwNl90bmxfZW5jYXBfYWRkX2ZvdV9vcHMoKTtcbm5ldC9pcHY2L2ZvdTYuYy0yMTMtXG4tLVxubmV0L2lwdjYvZm91Ni5jPTIxNz1zdGF0aWMgdm9pZCBfX2V4aXQgZm91Nl9maW5pKHZvaWQpXG5uZXQvaXB2Ni9mb3U2LmMtMjE4LXtcbm5ldC9pcHY2L2ZvdTYuYzoyMTk6XHRpcDZfdG5sX2VuY2FwX2RlbF9mb3Vfb3BzKCk7XG5uZXQvaXB2Ni9mb3U2LmMtMjIwLX1cbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTk0MD1zdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0ICpsaW5rX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk1MC1cdGlmIChpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjYvaXA2X2dyZS5jOjE5NTE6XHRcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKG50LCBcdTAwMjZpcGVuY2FwKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTUyLVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMDA2PWlwNmdyZV9jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDE4LVx0aWYgKGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFx1MDAyNmlwZW5jYXApKSB7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjAxOTpcdFx0aW50IGVyciA9IGlwNl90bmxfZW5jYXBfc2V0dXAobnQsIFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjYvaXA2X2dyZS5jLTIwMjAtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyNzctXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTI3ODpcdGVyciA9IGlwNl90bmxfZW5jYXAoc2tiLCBcdTAwMjZpcGVuY2FwLCBcdTAwMjZwcm90bywgZmw2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMjc5LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc5NT1FWFBPUlRfU1lNQk9MKGlwNl90bmxfZ2V0X2lmbGluayk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc5Ni1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzk3OmludCBpcDZfdG5sX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHMsXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc5OC1cdFx0XHQgIHVuc2lnbmVkIGludCBudW0pXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDItXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwMzpcdHJldHVybiAhY21weGNoZygoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICoqKVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDQtXHRcdFx0XHUwMDI2aXA2dHVuX2VuY2Fwc1tudW1dLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODA2LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODA3OkVYUE9SVF9TWU1CT0woaXA2X3RubF9lbmNhcF9hZGRfb3BzKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODA4LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MDk6aW50IGlwNl90bmxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODEwLVx0XHRcdCAgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgxNi1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODE3Olx0cmV0ID0gKGNtcHhjaGcoKGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyAqKilcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODE4LVx0XHQgICAgICAgXHUwMDI2aXA2dHVuX2VuY2Fwc1tudW1dLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODI0LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODI1OkVYUE9SVF9TWU1CT0woaXA2X3RubF9lbmNhcF9kZWxfb3BzKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODI2LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4Mjc6aW50IGlwNl90bmxfZW5jYXBfc2V0dXAoc3RydWN0IGlwNl90bmwgKnQsXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgyOC1cdFx0XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICppcGVuY2FwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ3LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODQ4OkVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfZW5jYXBfc2V0dXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDktXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNzk9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjA5Ni1cdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIwOTc6XHRcdGVyciA9IGlwNl90bmxfZW5jYXBfc2V0dXAobnQsIFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwOTgtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIxMjA9c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjE1Ni1cdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxNTc6XHRcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKHQsIFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxNTgtXG4tLVxubmV0L2lwdjYvdWRwLmM9NjAwPXN0YXRpYyBpbnQgX191ZHA2X2xpYl9lcnJfZW5jYXBfbm9fc2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni91ZHAuYy02MDgtXHRcdFx0ICAgICAgIHU4IHR5cGUsIHU4IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKTtcbm5ldC9pcHY2L3VkcC5jOjYwOTpcdFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICplbmNhcDtcbm5ldC9pcHY2L3VkcC5jLTYxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2VuY2FwX2hsZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyMDktXHRpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEyMTA6XHRlbmNhcF9obGVuID0gaXA2X2VuY2FwX2hsZW4oXHUwMDI2aXBlbmNhcCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTIxMS1cdGlmICh1bmxpa2VseShlbmNhcF9obGVuIFx1MDAzYyAwKSlcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTgyNz1pbnQgaXA2X3RubF9lbmNhcF9zZXR1cChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgzMy1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODM0Olx0aGxlbiA9IGlwNl9lbmNhcF9obGVuKGlwZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MzUtXHRpZiAoaGxlbiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgSVB2NiBUdW5uZWxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgSVB2NiB0dW5uZWxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBpcDZfdG5sX3htaXRgIGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIGFuZCBhbHNvIHRoZSBpbmxpbmUgZnVuY3Rpb24gYGlwNl90bmxfZW5jYXBgIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBkYXRhIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgcGFzc2luZyB0aGUgYGlwNl90bmxgIHN0cnVjdCBkaXJlY3RseSB0byBgaXA2X3RubF9lbmNhcGAsIGl0JiMzOTtzIG5vdyB1c2luZyBhIG1vcmUgZ2VuZXJpYyBgaXBfdHVubmVsX2VuY2FwYCBzdHJ1Y3QuCgpUaGUgcmVhbCBrZXkgaGVyZSBpcyB0aGUgZGF0YSByYWNlIGZpeC4gSSBzZWUgdGhleSYjMzk7cmUgcmVhZGluZyBgdC0mZ3Q7ZW5jYXBgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW50byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSB1c2luZyBpdCBpbiBib3RoIGBpcDZfZW5jYXBfaGxlbmAgYW5kIGBpcDZfdG5sX2VuY2FwYC4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUg4oCTIGB0LSZndDtlbmNhcGAgY291bGQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LCBsZWFkaW5nIHRvIGluY29uc2lzdGVudCBiZWhhdmlvci4gU21hcnQgbW92ZSwgdXNpbmcgdGhlIGxvY2FsIHZhcmlhYmxlLCB3aGljaCBndWFyYW50ZWVzIGNvbnNpc3RlbnQgdXNlIG9mIHRoZSBgZW5jYXBgIHN0cnVjdHVyZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBsb3ctbGV2ZWwgY2hhbmdlLCBzbyBpdCYjMzk7cyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgd291bGQgYmUgYGlwNl90bmxfeG1pdGAgYW5kIChhbHRob3VnaCBpbmxpbmUpIGBpcDZfdG5sX2VuY2FwYC4gIGBpcDZfdG5sX3htaXRgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgaXQmIzM5O3MgdGhlIG1haW4gdHJhbnNtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVscywgc28gaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbi4gIEl0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBpcDZfdHVubmVsLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgY3JpdGljYWwgcG9pbnQgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4KClRoZSBwYXRjaCBmb2N1c2VzICpvbmx5KiBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBgaXA2X3RubF94bWl0YCBhbmQgYGlwNl90bmxfZW5jYXBgLiBTbywgZXZlbiB0aG91Z2ggdGhlcmUgbWlnaHQgYmUgc3VwcG9ydGluZyBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGZvY3VzIG9uIHRoZW0sIHVubGVzcyB0aGUgaW50ZW50aW9uIGlzIHRvIGNoZWNrIGNhbGwgY2hhaW5zLiBTbywgdGhlIGRpcmVjdCB0YXJnZXRzIGZvciBmdXp6aW5nIGJlY29tZSBtb3JlIGNvbmNyZXRlOiBgaXA2X3RubF94bWl0YCBhbmQsIHBlcmhhcHMsIGNhcmVmdWxseSBjcmFmdGVkIHRlc3RzIGludm9sdmluZyB0aGUgaW5saW5lIGBpcDZfdG5sX2VuY2FwYC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGV4ZXJjaXNlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGluIGBpcDZfdG5sX3htaXRgLgoKTm93LCBiZWZvcmUgSSBkaWcgaW50byBjcmVhdGluZyBhbnkgZnV6emluZyBoYXJuZXNzZXMsIEkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQ09ORklHX0lQVjZfVFVOTkVMYCAod2hpY2ggZGVwZW5kcyBvbiBgSVBWNmApLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50LiBJJiMzOTtsbCBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpYyBvcHRpb24uIFRoZW4sIGxldCYjMzk7cyBnZXQgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfVFVOTkVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE0CgkJCQkJCQlvdXRwdXQ6IDEwOQoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEYXRhIFJhY2UgRml4IGluIElQdjYgVHVubmVsIEVuY2Fwc3VsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsbHkgY29ycmVjdCBmaXgsIGFuZCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpcDZfdG5sX2VuY2FwYCBhbmQgYGlwNl90bmxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlci4gVGhlIGNydWNpYWwgc2hpZnQgaXMgbW9kaWZ5aW5nIGBpcDZfdG5sX2VuY2FwYCB0byBhY2NlcHQgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaXA2X3RubCAqdGAuIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzLgoKSW4gYGlwNl90bmxfeG1pdGAsIHRoZSBwYXRjaCBub3cgcmVhZHMgYHQtJmd0O2VuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIGludG8gYSBsb2NhbCB2YXJpYWJsZSBgaXBlbmNhcGAgYmVmb3JlIHBhc3NpbmcgYSBwb2ludGVyIHRvIHRoaXMgbG9jYWwgY29weSAoYCZhbXA7aXBlbmNhcGApIHRvIGJvdGggYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBmaXguIEJ5IGludHJvZHVjaW5nIGEgbG9jYWwgY29weSBhbmQgdXNpbmcgYGRhdGFfcmFjZSgpYCwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIHVzZWQgYnkgYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgIGFyZSBjb25zaXN0ZW50LCB0aHVzIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgcmFjZSB3aGVyZSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgY291bGQgbGVhZCB0byBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBgZGF0YV9yYWNlKClgIGlzIGNydWNpYWw7IGl0JiMzOTtzIHdoYXQgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgZW5zdXJlcyBkYXRhIGNvbnNpc3RlbmN5LgoKVGhlIGRhdGEgcmFjZSBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHdoZW4gcGFja2V0cyBhcmUgc2VudCB0aHJvdWdoIGFuIElQdjYgdHVubmVsIHdoaWxlIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGFyZSBiZWluZyBjb25jdXJyZW50bHkgbW9kaWZpZWQuIFRoZSBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgaXA2X3RubF94bWl0YCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIGNhbGxlZCBieSBgaXA0aXA2X3RubF94bWl0YCwgYGlwNmlwNl90bmxfeG1pdGAsIGFuZCBgYW55X2lwNmlwNl90bmxfeG1pdGAuIERlZmluaXRlbHkgcmVhY2hhYmxlLiBBbmQgc2luY2UgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYElQVjZfVFVOTkVMYCwgdGhhdCByZWluZm9yY2VzIGl0LgoKSXQmIzM5O3MgbGlrZWx5IHdvcnRoIGZ1enppbmcgdGhlIGBpcDZfdG5sX3htaXRgIHBhdGgsIHBvdGVudGlhbGx5IGFsc28gYGlwNl90bmxfZW5jYXBfc2V0dXBgLCBhbHRob3VnaCB0aGUgY29yZSBmaXggbGllcyB3aXRoaW4gdGhlIGZvcm1lci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBpcDZfdG5sX3htaXRgLiBgaXA2X3RubF9lbmNhcF9zZXR1cGAgaXMgYWxzbyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBpcDZfdG5sX2NoYW5nZWxpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYGlwNmdyZV9uZXdsaW5rX2NvbW1vbmAsIGFuZCBgaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uYCwgbWFraW5nIGl0IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBlbmNhcHN1bGF0aW9uLiBNeSByZXN1bHRzIHNob3cgYSBjbGVhciBmb2N1cyBvbiBmaXhpbmcgYSBkYXRhIHJhY2Ugd2l0aGluIGBpcDZfdG5sX3htaXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfdG5sX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoIChpcDZfdG5sX3htaXQpIGJ5IHJlYWRpbmcgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgaW50byBhIGxvY2FsIHZhcmlhYmxlIG9uY2UsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYmV0d2VlbiBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIChUT0MtVE9VKSBvbiBgdC1cdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO2AuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQ1NBTiAoZm9yIGRhdGEgcmFjZXMpIG9yIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgYnVnLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OGNhYTliYWRjZGNkNDNmMDIyN2NkOTM0MTIyYzY2NzgwNTMyMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDg6MTk6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmggYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKaW5kZXggYjk5ODA1ZWUyZmQxNC4uNmU3NmU1MGE0NDA2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaApAQCAtMTA2LDIyICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpCiAJcmV0dXJuIGhsZW47CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwNl90bmwgKnQsCiYjNDM7c3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLAogCQkJCXU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNiAqZmw2KQogewogCWNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyAqb3BzOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKHQtJmd0O2VuY2FwLnR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpCiYjNDM7CWlmIChlLSZndDt0eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKQogCQlyZXR1cm4gMDsKIAotCWlmICh0LSZndDtlbmNhcC50eXBlICZndDs9IE1BWF9JUFRVTl9FTkNBUF9PUFMpCiYjNDM7CWlmIChlLSZndDt0eXBlICZndDs9IE1BWF9JUFRVTl9FTkNBUF9PUFMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW3QtJmd0O2VuY2FwLnR5cGVdKTsKJiM0MzsJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbZS0mZ3Q7dHlwZV0pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtidWlsZF9oZWFkZXIpKQotCQlyZXQgPSBvcHMtJmd0O2J1aWxkX2hlYWRlcihza2IsICZhbXA7dC0mZ3Q7ZW5jYXAsIHByb3RvY29sLCBmbDYpOwomIzQzOwkJcmV0ID0gb3BzLSZndDtidWlsZF9oZWFkZXIoc2tiLCBlLCBwcm90b2NvbCwgZmw2KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggZDVmZjUwYTJhYzAxNy4uNjNjNTI0YjA4MGRkNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTEwMiw2ICYjNDM7MTEwMiw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLAogCQkgX191OCBwcm90bykKIHsKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB0LSZndDtuZXQ7CiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoOwogCXN0cnVjdCBpcHY2X3RlbF90eG9wdGlvbiBvcHQ7CkBAIC0xMTA5LDEwICYjNDM7MTExMCwxMSBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjsKIAlpbnQgZXJyX2NvdW50LCBtdHU7CiAJdW5zaWduZWQgaW50IGV0aF9obGVuID0gdC0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUiA/IEVUSF9ITEVOIDogMDsKLQl1bnNpZ25lZCBpbnQgcHNoX2hsZW4gPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHQtJmd0O2VuY2FwX2hsZW47Ci0JdW5zaWduZWQgaW50IG1heF9oZWFkcm9vbSA9IHBzaF9obGVuOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tOwogCV9fYmUxNiBwYXlsb2FkX3Byb3RvY29sOwogCWJvb2wgdXNlX2NhY2hlID0gZmFsc2U7CiYjNDM7CXVuc2lnbmVkIGludCBwc2hfaGxlbjsKJiM0MzsJaW50IGVuY2FwX2hsZW47CiAJdTggaG9wX2xpbWl0OwogCWludCBlcnIgPSAtMTsKIApAQCAtMTIwMiw2ICYjNDM7MTIwNCwxNSBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJCQkgICAgIHQtJmd0O3Bhcm1zLm5hbWUpOwogCQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKIAl9CiYjNDM7CiYjNDM7CS8qIENhbiB0ZWFyLCBidXQgaGxlbiBhbmQgYnVpbGRfaGVhZGVyKCkgdXNlIHRoZSBzYW1lIHNuYXBzaG90LiAqLwomIzQzOwlpcGVuY2FwID0gZGF0YV9yYWNlKHQtJmd0O2VuY2FwKTsKJiM0MzsJZW5jYXBfaGxlbiA9IGlwNl9lbmNhcF9obGVuKCZhbXA7aXBlbmNhcCk7CiYjNDM7CWlmICh1bmxpa2VseShlbmNhcF9obGVuICZsdDsgMCkpCiYjNDM7CQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKJiM0MzsJcHNoX2hsZW4gPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IGVuY2FwX2hsZW47CiYjNDM7CW1heF9oZWFkcm9vbSA9IHBzaF9obGVuOwomIzQzOwogCW10dSA9IGRzdDZfbXR1KGRzdCkgLSBldGhfaGxlbiAtIHBzaF9obGVuIC0gdC0mZ3Q7dHVuX2hsZW47CiAJaWYgKGVuY2FwX2xpbWl0ICZndDs9IDApIHsKIAkJbWF4X2hlYWRyb29tICYjNDM7PSA4OwpAQCAtMTI0MCw3ICYjNDM7MTI1MSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLAogCQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKIAogCWlmICh0LSZndDtwYXJtcy5jb2xsZWN0X21kKSB7Ci0JCWlmICh0LSZndDtlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKQomIzQzOwkJaWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSkKIAkJCWdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlOwogCX0gZWxzZSB7CiAJCWlmICh1c2VfY2FjaGUgJmFtcDsmYW1wOyBuZHN0KQpAQCAtMTI2NCw3ICYjNDM7MTI3NSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLAogCQkJJiM0MzsgZHN0LSZndDtoZWFkZXJfbGVuICYjNDM7IHQtJmd0O2hsZW47CiAJaXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7CiAKLQllcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgdCwgJmFtcDtwcm90bywgZmw2KTsKJiM0MzsJZXJyID0gaXA2X3RubF9lbmNhcChza2IsICZhbXA7aXBlbmNhcCwgJmFtcDtwcm90bywgZmw2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgYSBEYXRhIFJhY2UgaW4gSVAgVHVubmVsIEVuY2Fwc3VsYXRpb24qKgoKT2theSwgc28gdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBoYW5kbGUgZW5jYXBzdWxhdGlvbiB3aXRoaW4gYGlwNl90bmxfZW5jYXBgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBkaXJlY3RseSB1c2luZyBgc3RydWN0IGlwNl90bmwgKnRgIHRvIGEgbW9yZSBnZW5lcmljIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmaXhpbmcgYSBkYXRhIHJhY2UgaXNzdWUuCgpTcGVjaWZpY2FsbHksIGluIGBpcDZfdG5sX3htaXRgLCB3ZSYjMzk7cmUgbm93IHJlYWRpbmcgYHQtJmd0O2VuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgY2FsbGVkIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB3ZSB3YW50IHRvIHByZXZlbnQgYSBzY2VuYXJpbyB3aGVyZSBgdC0mZ3Q7ZW5jYXBgIGlzIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgd2hpY2ggY291bGQgbGVhZCB0byBpbmNvbnNpc3RlbnQgdmFsdWVzIGJlaW5nIHVzZWQgZm9yIHRoaW5ncyBsaWtlIGBobGVuYCBhbmQgY2FsbHMgdG8gYGJ1aWxkX2hlYWRlcigpYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gQXZvaWRpbmcgcmFjZSBjb25kaXRpb25zIGxpa2UgdGhhdCBpcyBjcml0aWNhbCBmb3IgcGFja2V0IGludGVncml0eSBhbmQgY29uc2lzdGVudCBiZWhhdmlvci4KCkJ1dOKApiB3YWl0IGEgc2Vjb25kLiBUaGF0IGBpcGVuY2FwYCB2YXJpYWJsZeKApiBpdCYjMzk7cyBkZWNsYXJlZCByaWdodCB0aGVyZSBvbiB0aGUgc3RhY2s6IGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7YC4gQW5kIGl0JiMzOTtzIGluaXRpYWxpemVkIHdpdGggYGlwZW5jYXAgPSBkYXRhX3JhY2UodC0mZ3Q7ZW5jYXApO2AuIE5vdywgSSYjMzk7bSB0aGlua2luZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNuZWFrIGluIGhlcmU/IFdlJiMzOTtyZSBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiBgdC0mZ3Q7ZW5jYXBgIGludG8gYSBsb2NhbCB2YXJpYWJsZS4gYHQtJmd0O2VuY2FwYCAqc2hvdWxkKiBiZSBhIHByb3Blcmx5IGluaXRpYWxpemVkIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBJIGJldHRlciBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IHJ1bm5pbmcgaW50byBhbnkgdW5kZWZpbmVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9Njc9c3RydWN0IGlwX3R1bm5lbF9rZXkge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC04OC1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo4OTpzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIHtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC05MC1cdHUxNlx0XHRcdHR5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgZnVsbCBkZWZpbml0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG1lbWJlcnMsIHRoZWlyIHR5cGVzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdmFyaW91cyBlbmNhcHN1bGF0aW9uIG1ldGhvZHMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBwcm90b2NvbHMg4oCTIEdSRSwgSVBJUCwgVlhMQU4sIEdlbmV2ZSwgZXRjLiDigJMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBwYWNrZXQgcHJvY2Vzc2luZywgcGFydGljdWxhcmx5IHRoZSBlbmNhcC9kZWNhcCBvcGVyYXRpb25zLCBhbmQgd2hhdCB0aGUgdmFyaW91cyBmbGFncyBhbmQgb3B0aW9ucyBhY3R1YWxseSBzaWduaWZ5IHdpdGhpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgbnV0cyBhbmQgYm9sdHMuIExldCYjMzk7cyBnZXQgdG8gdGhlIHNvdXJjZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODk6XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIHtcbiAgOTA6XHRcdHUxNlx0XHRcdHR5cGU7XG4gIDkxOlx0XHR1MTZcdFx0XHRmbGFncztcbiAgOTI6XHRcdF9fYmUxNlx0XHRcdHNwb3J0O1xuICA5MzpcdFx0X19iZTE2XHRcdFx0ZHBvcnQ7XG4gIDk0Olx0fTtcbiAgOTU6XHRcbiAgOTY6XHQvKiBGbGFncyBmb3IgaXBfdHVubmVsX2luZm8gbW9kZS4gKi9cbiAgOTc6XHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX1RYXHQweDAxXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXG4gIDk4Olx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19JUFY2XHQweDAyXHQvKiBrZXkgY29udGFpbnMgSVB2NiBhZGRyZXNzZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1NAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA1NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgYWltcyB0byBmaXggYSBwb3RlbnRpYWwgZGF0YSByYWNlIHdpdGggYHQtJmd0O2VuY2FwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgdGlueSBzdHJ1Y3R1cmUsIGp1c3QgOCBieXRlcywgYW5kIGNvcGllZCBieSB2YWx1ZS4gVGhlIGNvZGUgZG9lcyBgaXBlbmNhcCA9IGRhdGFfcmFjZSh0LSZndDtlbmNhcCk7YCB3aGljaCBtZWFucyBhIGNvbXBsZXRlIGNvcHkuIFNpbmNlIGB0LSZndDtlbmNhcGAgY29tZXMgZnJvbSBgc3RydWN0IGlwNl90bmxgLCB3aGljaCBpcyBuZXRfZGV2aWNlLXJlbGF0ZWQsIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBndWFyYW50ZWVkLgoKRXZlbiBpZiB0aGVyZSAqd2VyZSogcGFkZGluZyAod2hpY2ggSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGVyZSBpc24mIzM5O3Q7IGl0JiMzOTtzIGEgdGlnaHQgMiYjNDM7MiYjNDM7MiYjNDM7MiBsYXlvdXQpLCB3ZSYjMzk7cmUgb25seSB1c2luZyBgaXBlbmNhcGAgaW50ZXJuYWxseSBpbiBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAuICBgaXA2X3RubF9lbmNhcGAgcGFzc2VzIGEgcG9pbnRlciB0byB0aGUgY29waWVkIGBpcGVuY2FwYCB0byBgb3BzLSZndDtidWlsZF9oZWFkZXJgLiAgU28sIGlzIHRoZXJlIGEgY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdCB0byB1c2VyIHNwYWNlPyBOb3BlLiBUaGUgZW50aXJlIGBpcGVuY2FwYCBzdHJ1Y3R1cmUgaXMgcG9wdWxhdGVkIGJ5IHRoZSBzdHJ1Y3QgYXNzaWdubWVudC4gIFRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlIGlzIHplcm8uCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgY2xhc3NpYyBUT0MtVE9VIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHdoZXJlIGEgc25hcHNob3Qgb2YgdGhlIHZhbHVlIGlzIHRha2VuIHRvIG1haW50YWluIGNvbnNpc3RlbmN5LiBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSB3aGVyZSB0aGUgdmFsdWUgY291bGQgY2hhbmdlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCB1c2FnZS4gS0FTQU4vS0NTQU4gd291bGQgYmUgdGhlIGNvcnJlY3QgdG9vbCBmb3IgdGhpcyBzb3J0IG9mIGlzc3VlLCBidXQgbm90IEtNU0FOLCB3aGljaCBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIGBpcGVuY2FwYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3RydWN0IGFzc2lnbm1lbnQuClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIChUT0MtVE9VKSBvbiBgdC1cdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO2AuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQ1NBTiAoZm9yIGRhdGEgcmFjZXMpIG9yIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgYnVnLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVx1MDAzZWVuY2FwYCBieSB0YWtpbmcgYSBzbmFwc2hvdCBvZiBpdCBpbnRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGlwZW5jYXBgIGFuZCB1c2luZyB0aGF0IHNuYXBzaG90IGZvciBib3RoIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGUgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgc21hbGwgOC1ieXRlIHN0cnVjdHVyZSB3aXRoIG5vIHBhZGRpbmcsIGFuZCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cdTAwM2VlbmNhcCk7YC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtDU0FOIChmb3IgZGF0YSByYWNlcykgb3IgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBidWcuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjE5OjUzLjUxMDQ1OTMzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY0Njc0MzYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVxcdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXFx1MDAzZWVuY2FwKTtgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0NTQU4gKGZvciBkYXRhIHJhY2VzKSBvciBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGJ1Zy4gS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBpbiB0aGUgSVB2NiB0dW5uZWwgdHJhbnNtaXNzaW9uIHBhdGggKGlwNl90bmxfeG1pdCkgYnkgcmVhZGluZyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgb25jZSwgZW5zdXJpbmcgY29uc2lzdGVudCBzdGF0ZSBiZXR3ZWVuIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MTk6NTMuNTEwNDY0MDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5OTk1NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwODoxOTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmggYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmhcXG5pbmRleCBiOTk4MDVlZTJmZDE0Li42ZTc2ZTUwYTQ0MDZjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxcbkBAIC0xMDYsMjIgKzEwNiwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBpcDZfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxcbiBcXHRyZXR1cm4gaGxlbjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXA2X3RubCAqdCxcXG4rc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbiBcXHRcXHRcXHRcXHR1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTYgKmZsNilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcztcXG4gXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAodC1cXHUwMDNlZW5jYXAudHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4rXFx0aWYgKGUtXFx1MDAzZXR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHQtXFx1MDAzZWVuY2FwLnR5cGUgXFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcXG4rXFx0aWYgKGUtXFx1MDAzZXR5cGUgXFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW3QtXFx1MDAzZWVuY2FwLnR5cGVdKTtcXG4rXFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbZS1cXHUwMDNldHlwZV0pO1xcbiBcXHRpZiAobGlrZWx5KG9wcyBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWJ1aWxkX2hlYWRlcikpXFxuLVxcdFxcdHJldCA9IG9wcy1cXHUwMDNlYnVpbGRfaGVhZGVyKHNrYiwgXFx1MDAyNnQtXFx1MDAzZWVuY2FwLCBwcm90b2NvbCwgZmw2KTtcXG4rXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VidWlsZF9oZWFkZXIoc2tiLCBlLCBwcm90b2NvbCwgZmw2KTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBkNWZmNTBhMmFjMDE3Li42M2M1MjRiMDgwZGQ2IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0xMTAyLDYgKzExMDIsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcXG4gXFx0XFx0IF9fdTggcHJvdG8pXFxuIHtcXG4gXFx0c3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHQtXFx1MDAzZW5ldDtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwdjZoO1xcbiBcXHRzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0O1xcbkBAIC0xMTA5LDEwICsxMTEwLDExIEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjtcXG4gXFx0aW50IGVycl9jb3VudCwgbXR1O1xcbiBcXHR1bnNpZ25lZCBpbnQgZXRoX2hsZW4gPSB0LVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gRVRIX0hMRU4gOiAwO1xcbi1cXHR1bnNpZ25lZCBpbnQgcHNoX2hsZW4gPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgdC1cXHUwMDNlZW5jYXBfaGxlbjtcXG4tXFx0dW5zaWduZWQgaW50IG1heF9oZWFkcm9vbSA9IHBzaF9obGVuO1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1xcbiBcXHRfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDtcXG4gXFx0Ym9vbCB1c2VfY2FjaGUgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHBzaF9obGVuO1xcbitcXHRpbnQgZW5jYXBfaGxlbjtcXG4gXFx0dTggaG9wX2xpbWl0O1xcbiBcXHRpbnQgZXJyID0gLTE7XFxuIFxcbkBAIC0xMjAyLDYgKzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgdC1cXHUwMDNlcGFybXMubmFtZSk7XFxuIFxcdFxcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBDYW4gdGVhciwgYnV0IGhsZW4gYW5kIGJ1aWxkX2hlYWRlcigpIHVzZSB0aGUgc2FtZSBzbmFwc2hvdC4gKi9cXG4rXFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0LVxcdTAwM2VlbmNhcCk7XFxuK1xcdGVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbihcXHUwMDI2aXBlbmNhcCk7XFxuK1xcdGlmICh1bmxpa2VseShlbmNhcF9obGVuIFxcdTAwM2MgMCkpXFxuK1xcdFxcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xcbitcXHRwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBlbmNhcF9obGVuO1xcbitcXHRtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcXG4rXFxuIFxcdG10dSA9IGRzdDZfbXR1KGRzdCkgLSBldGhfaGxlbiAtIHBzaF9obGVuIC0gdC1cXHUwMDNldHVuX2hsZW47XFxuIFxcdGlmIChlbmNhcF9saW1pdCBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdG1heF9oZWFkcm9vbSArPSA4O1xcbkBAIC0xMjQwLDcgKzEyNTEsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcXG4gXFx0XFx0Z290byB0eF9lcnJfZHN0X3JlbGVhc2U7XFxuIFxcbiBcXHRpZiAodC1cXHUwMDNlcGFybXMuY29sbGVjdF9tZCkge1xcbi1cXHRcXHRpZiAodC1cXHUwMDNlZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4rXFx0XFx0aWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4gXFx0XFx0XFx0Z290byB0eF9lcnJfZHN0X3JlbGVhc2U7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmICh1c2VfY2FjaGUgXFx1MDAyNlxcdTAwMjYgbmRzdClcXG5AQCAtMTI2NCw3ICsxMjc1LDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuIFxcdFxcdFxcdCsgZHN0LVxcdTAwM2VoZWFkZXJfbGVuICsgdC1cXHUwMDNlaGxlbjtcXG4gXFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxuIFxcbi1cXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgdCwgXFx1MDAyNnByb3RvLCBmbDYpO1xcbitcXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgXFx1MDAyNmlwZW5jYXAsIFxcdTAwMjZwcm90bywgZmw2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjE5OjU0Ljg5MTE0NDY4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5Nzg1MTk5NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X3RubF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoIChpcDZfdG5sX3htaXQpIGJ5IHJlYWRpbmcgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgaW50byBhIGxvY2FsIHZhcmlhYmxlIG9uY2UsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYmV0d2VlbiBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4Y2FhOWJhZGNkY2Q0M2YwMjI3Y2Q5MzQxMjJjNjY3ODA1MzIwOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwODoxOTo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuaW5kZXggYjk5ODA1ZWUyZmQxNC4uNmU3NmU1MGE0NDA2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG5AQCAtMTA2LDIyICsxMDYsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgaXA2X2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbiBcdHJldHVybiBobGVuO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBpcDZfdG5sX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcDZfdG5sICp0LFxuK3N0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbiBcdFx0XHRcdHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNiAqZmw2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyAqb3BzO1xuIFx0aW50IHJldCA9IC1FSU5WQUw7XG4gXG4tXHRpZiAodC1cdTAwM2VlbmNhcC50eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKVxuK1x0aWYgKGUtXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodC1cdTAwM2VlbmNhcC50eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbitcdGlmIChlLVx1MDAzZXR5cGUgXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW3QtXHUwMDNlZW5jYXAudHlwZV0pO1xuK1x0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbZS1cdTAwM2V0eXBlXSk7XG4gXHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcikpXG4tXHRcdHJldCA9IG9wcy1cdTAwM2VidWlsZF9oZWFkZXIoc2tiLCBcdTAwMjZ0LVx1MDAzZWVuY2FwLCBwcm90b2NvbCwgZmw2KTtcbitcdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIGUsIHByb3RvY29sLCBmbDYpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uNjNjNTI0YjA4MGRkNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTEwMiw2ICsxMTAyLDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdCBfX3U4IHByb3RvKVxuIHtcbiBcdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHQtXHUwMDNlbmV0O1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwdjZoO1xuIFx0c3RydWN0IGlwdjZfdGVsX3R4b3B0aW9uIG9wdDtcbkBAIC0xMTA5LDEwICsxMTEwLDExIEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7XG4gXHRpbnQgZXJyX2NvdW50LCBtdHU7XG4gXHR1bnNpZ25lZCBpbnQgZXRoX2hsZW4gPSB0LVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IEVUSF9ITEVOIDogMDtcbi1cdHVuc2lnbmVkIGludCBwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyB0LVx1MDAzZWVuY2FwX2hsZW47XG4tXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tID0gcHNoX2hsZW47XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1xuIFx0X19iZTE2IHBheWxvYWRfcHJvdG9jb2w7XG4gXHRib29sIHVzZV9jYWNoZSA9IGZhbHNlO1xuK1x0dW5zaWduZWQgaW50IHBzaF9obGVuO1xuK1x0aW50IGVuY2FwX2hsZW47XG4gXHR1OCBob3BfbGltaXQ7XG4gXHRpbnQgZXJyID0gLTE7XG4gXG5AQCAtMTIwMiw2ICsxMjA0LDE1IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHRcdFx0ICAgICB0LVx1MDAzZXBhcm1zLm5hbWUpO1xuIFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcdH1cbitcbitcdC8qIENhbiB0ZWFyLCBidXQgaGxlbiBhbmQgYnVpbGRfaGVhZGVyKCkgdXNlIHRoZSBzYW1lIHNuYXBzaG90LiAqL1xuK1x0aXBlbmNhcCA9IGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKTtcbitcdGVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbitcdGlmICh1bmxpa2VseShlbmNhcF9obGVuIFx1MDAzYyAwKSlcbitcdFx0Z290byB0eF9lcnJfZHN0X3JlbGVhc2U7XG4rXHRwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBlbmNhcF9obGVuO1xuK1x0bWF4X2hlYWRyb29tID0gcHNoX2hsZW47XG4rXG4gXHRtdHUgPSBkc3Q2X210dShkc3QpIC0gZXRoX2hsZW4gLSBwc2hfaGxlbiAtIHQtXHUwMDNldHVuX2hsZW47XG4gXHRpZiAoZW5jYXBfbGltaXQgXHUwMDNlPSAwKSB7XG4gXHRcdG1heF9oZWFkcm9vbSArPSA4O1xuQEAgLTEyNDAsNyArMTI1MSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcbiBcdGlmICh0LVx1MDAzZXBhcm1zLmNvbGxlY3RfbWQpIHtcbi1cdFx0aWYgKHQtXHUwMDNlZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbitcdFx0aWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICh1c2VfY2FjaGUgXHUwMDI2XHUwMDI2IG5kc3QpXG5AQCAtMTI2NCw3ICsxMjc1LDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdFx0KyBkc3QtXHUwMDNlaGVhZGVyX2xlbiArIHQtXHUwMDNlaGxlbjtcbiBcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pO1xuIFxuLVx0ZXJyID0gaXA2X3RubF9lbmNhcChza2IsIHQsIFx1MDAyNnByb3RvLCBmbDYpO1xuK1x0ZXJyID0gaXA2X3RubF9lbmNhcChza2IsIFx1MDAyNmlwZW5jYXAsIFx1MDAyNnByb3RvLCBmbDYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjE5OjU0Ljg5MTE0NzMyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODMyNDc1OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIGEgcGF0Y2ggZGVzaWduZWQgZm9yIGZ1enppbmcuIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAgYW5kIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBUaGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyB0aGF0IGBpcDZfdG5sX2VuY2FwYCBub3cgdGFrZXMgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaXA2X3RubCAqdGAuIE1vcmUgaW50ZXJlc3RpbmdseSwgaW4gYGlwNl90bmxfeG1pdGAsIHRoZXkncmUgdXNpbmcgYGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKWAgdG8gc2FmZWx5IHJlYWQgYHQtXHUwMDNlZW5jYXBgIGludG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgdXNpbmcgaXQgZm9yIHNldmVyYWwgY2FsbHMuIFJpZ2h0LCBmaXhpbmcgYSBkYXRhIHJhY2Ug4oCTIGEgdmVyeSB2YWxpZCByZWFzb24gdG8gZnV6eiB0aGlzLiBJbmNvbnNpc3RlbnQgc3RhdGUgZHVlIHRvIHJhY2UgY29uZGl0aW9ucyBjYW4gYmUgbmFzdHkgYW5kIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuXG5cbk5vdywgbGV0J3MgZ2V0IGZvY3VzZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzIGFuZCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBpcDZfdG5sX3htaXRgLiBUaGUgY29kZSBpcyB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIG1vZHVsZS4gQSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBsaWtlbHkgcmV2ZWFscyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbi4uLnl1cCwgYElQVjZfVFVOTkVMYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGBuZXQvaXB2Ni9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyB3aWxsIGhlbHAgZW5zdXJlIG15IGZ1enppbmcgY29uZmlndXJhdGlvbiB0YXJnZXRzIHRoZSByaWdodCBidWlsZCBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MjA6MTAuNzIzNjI1MTU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTUzNDU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3R1bm5lbC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19JUFY2X1NJVCkgKz0gc2l0Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIwOjEyLjAxODk3NTMxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTY0NTUzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIElQdjYgVHVubmVsIERhdGEgUmFjZSBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYCBhbmQgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IGBpcDZfdG5sX2VuY2FwYCBpcyBoYW5kbGVkLiBJdCdzIG5vdyB0YWtpbmcgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBgc3RydWN0IGlwNl90bmwgKnRgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGlzIGlzIGFib3V0IGltcHJvdmluZyBlbmNhcHN1bGF0aW9uIG1hbmFnZW1lbnQuXG5cblNwZWNpZmljYWxseSwgaW4gYGlwNl90bmxfeG1pdGAsIEkgc2VlIHRoYXQgYHQtXHUwMDNlZW5jYXBgIGlzIGJlaW5nIGFjY2Vzc2VkIHVzaW5nIGBkYXRhX3JhY2UoKWAuIEFoLCB0aGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbjsgaXQncyBhZGRyZXNzaW5nIGEgZGF0YSByYWNlLiBUaGUgY29kZSBpcyBwdWxsaW5nIGB0LVx1MDAzZWVuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGBpcGVuY2FwYCwgdXNpbmcgdGhhdCBmb3IgdGhlIGBpcDZfZW5jYXBfaGxlbmAgYW5kIGBpcDZfdG5sX2VuY2FwYCBjYWxscy4gVGhhdCdzIGEgdGV4dGJvb2sgYXBwcm9hY2ggdG8gZml4aW5nIGEgcmFjZSBjb25kaXRpb24gb24gYSBzaGFyZWQgc3RydWN0dXJlLiBCeSBjb3B5aW5nIGl0IHRvIGEgbG9jYWwgdmFyaWFibGUgeW91IGVuc3VyZSB0aGF0IHlvdXIgZnVuY3Rpb24gaXMgYWN0aW5nIG9uIGEgY29uc3RhbnQgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQncyBhIGRhdGEgcmFjZSBmaXguXG5cblRoZSBmYWN0IHRoYXQgYGlwNl90bmxfeG1pdGAgaXMgZXhwb3J0ZWQgdGVsbHMgbWUgaXQncyB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3IgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBJUHY2IHR1bm5lbCBkcml2ZXIsIGxpa2VseSBtYWtpbmcgdGhpcyBmaXggcXVpdGUgaW1wb3J0YW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgdG8gY29uZmlybSB0aGF0IGBpcDZfdG5sX3htaXRgIHJlYWxseSBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVscywgYW5kIHRoYXQgdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGlzIGluZGVlZCB0aWVkIHRvIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVuLCBJJ2xsIHZlcmlmeSBpZiBgaXA2X3RubF94bWl0YCBpcyBhY3R1YWxseSBleHBvcnRlZC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MjA6MjcuMTgzNTMwOTM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODg4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmlwNl90bmxfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jPTEwNDI9aW50IGlwNl90bmxfeG1pdF9jdGwoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ny19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEwNzg6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF94bWl0X2N0bCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEwNzktXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTEwMD1pbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMzA0LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTMwNTpFWFBPUlRfU1lNQk9MKGlwNl90bmxfeG1pdCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEzMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIwOjI3LjI1MjQyMzA0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MDIwMzEwMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERhdGEgUmFjZSBGaXggaW4gSVB2NiBUdW5uZWxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgaXA2X3RubF94bWl0YCBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBhbmQgYWxzbyB0b3VjaGVzIGBpcDZfdG5sX2VuY2FwYCBpbiBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgYWJvdXQgaG93IHRoZSBgdC1cdTAwM2VlbmNhcGAgbWVtYmVyIGlzIGFjY2Vzc2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW50cm9kdWNpbmcgYGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKWAgdG8gcmVhZCB0aGF0IHZhbHVlIGludG8gYSBsb2NhbCB2YXJpYWJsZSAoYGlwZW5jYXBgKS4gVGhlIGdvYWwgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgYSBkYXRhIHJhY2UsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhhdCBgdC1cdTAwM2VlbmNhcGAgY2FuIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4OyBpdCdzIGEgY3JpdGljYWwgY2hhbmdlIHRvIHByb3RlY3QgYWdhaW5zdCBhIGNvbmN1cnJlbmN5IGJ1Zy4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBgQ09ORklHX0lQVjZfVFVOTkVMYCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuXG5cbk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gTGV0J3MgbG9vayBhdCB3aG8gY2FsbHMgYGlwNl90bmxfeG1pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYSBjZW50cmFsIGVudHJ5IHBvaW50IG9yIGlmIGl0J3MgYmVpbmcgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3RhY2suIExvb2tzIGxpa2UgaXQncyBleHBvcnRlZCwgc28gaXQgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZS4gVGhhdCBjb25maXJtcyBpdCdzIGFuIHhtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVsczsgbWFrZXMgc2Vuc2UuIEkgd2lsbCBpbnZlc3RpZ2F0ZSBjYWxsZXJzIG9mIGBpcDZfdG5sX2VuY2FwYCwgYXMgaXQncyB0aGUgb3RoZXIgZnVuY3Rpb24gaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMDo0My4yNzI3MzUwODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3MDU0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9lbmNhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZm91Ni5jPTg5PXN0YXRpYyBpbnQgZ3VlNl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTU2LVxcbm5ldC9pcHY2L2ZvdTYuYzoxNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyBmb3VfaXA2dHVuX29wcyA9IHtcXG5uZXQvaXB2Ni9mb3U2LmMtMTU4LVxcdC5lbmNhcF9obGVuID0gZm91X2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTYyLVxcbm5ldC9pcHY2L2ZvdTYuYzoxNjM6c3RhdGljIGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyBndWVfaXA2dHVuX29wcyA9IHtcXG5uZXQvaXB2Ni9mb3U2LmMtMTY0LVxcdC5lbmNhcF9obGVuID0gZ3VlX2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTY4LVxcbm5ldC9pcHY2L2ZvdTYuYzoxNjk6c3RhdGljIGludCBpcDZfdG5sX2VuY2FwX2FkZF9mb3Vfb3BzKHZvaWQpXFxubmV0L2lwdjYvZm91Ni5jLTE3MC17XFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTcyLVxcbm5ldC9pcHY2L2ZvdTYuYzoxNzM6XFx0cmV0ID0gaXA2X3RubF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZmb3VfaXA2dHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XFxubmV0L2lwdjYvZm91Ni5jLTE3NC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2lwdjYvZm91Ni5jLTE3OC1cXG5uZXQvaXB2Ni9mb3U2LmM6MTc5OlxcdHJldCA9IGlwNl90bmxfZW5jYXBfYWRkX29wcyhcXHUwMDI2Z3VlX2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY2L2ZvdTYuYy0xODAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5uZXQvaXB2Ni9mb3U2LmMtMTgxLVxcdFxcdHByX2VycihcXFwiY2FuJ3QgYWRkIGd1ZTYgb3BzXFxcXG5cXFwiKTtcXG5uZXQvaXB2Ni9mb3U2LmM6MTgyOlxcdFxcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Zm91X2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xcbm5ldC9pcHY2L2ZvdTYuYy0xODMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9pcHY2L2ZvdTYuYy0xODgtXFxubmV0L2lwdjYvZm91Ni5jOjE4OTpzdGF0aWMgdm9pZCBpcDZfdG5sX2VuY2FwX2RlbF9mb3Vfb3BzKHZvaWQpXFxubmV0L2lwdjYvZm91Ni5jLTE5MC17XFxubmV0L2lwdjYvZm91Ni5jOjE5MTpcXHRpcDZfdG5sX2VuY2FwX2RlbF9vcHMoXFx1MDAyNmZvdV9pcDZ0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcXG5uZXQvaXB2Ni9mb3U2LmM6MTkyOlxcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Z3VlX2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY2L2ZvdTYuYy0xOTMtfVxcbi0tXFxubmV0L2lwdjYvZm91Ni5jLTE5Ni1cXG5uZXQvaXB2Ni9mb3U2LmM6MTk3OnN0YXRpYyBpbnQgaXA2X3RubF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY2L2ZvdTYuYy0xOTgte1xcbi0tXFxubmV0L2lwdjYvZm91Ni5jLTIwMS1cXG5uZXQvaXB2Ni9mb3U2LmM6MjAyOnN0YXRpYyB2b2lkIGlwNl90bmxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcXG5uZXQvaXB2Ni9mb3U2LmMtMjAzLXtcXG4tLVxcbm5ldC9pcHY2L2ZvdTYuYz0yMDg9c3RhdGljIGludCBfX2luaXQgZm91Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMjExLVxcbm5ldC9pcHY2L2ZvdTYuYzoyMTI6XFx0cmV0ID0gaXA2X3RubF9lbmNhcF9hZGRfZm91X29wcygpO1xcbm5ldC9pcHY2L2ZvdTYuYy0yMTMtXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmM9MjE3PXN0YXRpYyB2b2lkIF9fZXhpdCBmb3U2X2Zpbmkodm9pZClcXG5uZXQvaXB2Ni9mb3U2LmMtMjE4LXtcXG5uZXQvaXB2Ni9mb3U2LmM6MjE5OlxcdGlwNl90bmxfZW5jYXBfZGVsX2ZvdV9vcHMoKTtcXG5uZXQvaXB2Ni9mb3U2LmMtMjIwLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xOTQwPXN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmtfY29tbW9uKHN0cnVjdCBuZXQgKmxpbmtfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NTAtXFx0aWYgKGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFxcdTAwMjZpcGVuY2FwKSkge1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTUxOlxcdFxcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKG50LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NTItXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjAwNj1pcDZncmVfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDE4LVxcdGlmIChpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjAxOTpcXHRcXHRpbnQgZXJyID0gaXA2X3RubF9lbmNhcF9zZXR1cChudCwgXFx1MDAyNmlwZW5jYXApO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDIwLVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3Ny1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTI3ODpcXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgXFx1MDAyNmlwZW5jYXAsIFxcdTAwMjZwcm90bywgZmw2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3OS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3OTU9RVhQT1JUX1NZTUJPTChpcDZfdG5sX2dldF9pZmxpbmspO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzk2LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzk3OmludCBpcDZfdG5sX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHMsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3OTgtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDItXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MDM6XFx0cmV0dXJuICFjbXB4Y2hnKChjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKiopXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDQtXFx0XFx0XFx0XFx1MDAyNmlwNnR1bl9lbmNhcHNbbnVtXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODA2LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwNzpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfYWRkX29wcyk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDgtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MDk6aW50IGlwNl90bmxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgxMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBudW0pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgxNi1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgxNzpcXHRyZXQgPSAoY21weGNoZygoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICoqKVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODE4LVxcdFxcdCAgICAgICBcXHUwMDI2aXA2dHVuX2VuY2Fwc1tudW1dLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjQtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODI1OkVYUE9SVF9TWU1CT0woaXA2X3RubF9lbmNhcF9kZWxfb3BzKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgyNi1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgyNzppbnQgaXA2X3RubF9lbmNhcF9zZXR1cChzdHJ1Y3QgaXA2X3RubCAqdCxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgyOC1cXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICppcGVuY2FwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDctfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODQ4OkVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfZW5jYXBfc2V0dXApO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ5LVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNzk9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMDk2LVxcdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjA5NzpcXHRcXHRlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKG50LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwOTgtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjEyMD1zdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxNTYtXFx0aWYgKGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFxcdTAwMjZpcGVuY2FwKSkge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTU3OlxcdFxcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKHQsIFxcdTAwMjZpcGVuY2FwKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjE1OC1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTYwMD1zdGF0aWMgaW50IF9fdWRwNl9saWJfZXJyX2VuY2FwX25vX3NrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy02MDgtXFx0XFx0XFx0ICAgICAgIHU4IHR5cGUsIHU4IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKTtcXG5uZXQvaXB2Ni91ZHAuYzo2MDk6XFx0XFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICplbmNhcDtcXG5uZXQvaXB2Ni91ZHAuYy02MTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIwOjQzLjMzODQ0MjI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMjg1NDk0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo3MjY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMDo1NS42NjY5OTQwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4OTUwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X2VuY2FwX2hsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMTAwPWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyMDktXFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0LVxcdTAwM2VlbmNhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEyMTA6XFx0ZW5jYXBfaGxlbiA9IGlwNl9lbmNhcF9obGVuKFxcdTAwMjZpcGVuY2FwKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTIxMS1cXHRpZiAodW5saWtlbHkoZW5jYXBfaGxlbiBcXHUwMDNjIDApKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Mjc9aW50IGlwNl90bmxfZW5jYXBfc2V0dXAoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgzMy1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgzNDpcXHRobGVuID0gaXA2X2VuY2FwX2hsZW4oaXBlbmNhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MzUtXFx0aWYgKGhsZW4gXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMDo1NS43MTM4OTE1MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg3NjYzNDI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIElQdjYgVHVubmVsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyB0b3VjaGluZyBjb3JlIElQdjYgdHVubmVsaW5nIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGBpcDZfdG5sX3htaXRgIGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIGFuZCBhbHNvIHRoZSBpbmxpbmUgZnVuY3Rpb24gYGlwNl90bmxfZW5jYXBgIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBkYXRhIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgcGFzc2luZyB0aGUgYGlwNl90bmxgIHN0cnVjdCBkaXJlY3RseSB0byBgaXA2X3RubF9lbmNhcGAsIGl0J3Mgbm93IHVzaW5nIGEgbW9yZSBnZW5lcmljIGBpcF90dW5uZWxfZW5jYXBgIHN0cnVjdC5cblxuVGhlIHJlYWwga2V5IGhlcmUgaXMgdGhlIGRhdGEgcmFjZSBmaXguIEkgc2VlIHRoZXkncmUgcmVhZGluZyBgdC1cdTAwM2VlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHVzaW5nIGl0IGluIGJvdGggYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSDigJMgYHQtXHUwMDNlZW5jYXBgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgYmVoYXZpb3IuIFNtYXJ0IG1vdmUsIHVzaW5nIHRoZSBsb2NhbCB2YXJpYWJsZSwgd2hpY2ggZ3VhcmFudGVlcyBjb25zaXN0ZW50IHVzZSBvZiB0aGUgYGVuY2FwYCBzdHJ1Y3R1cmUuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBsb3ctbGV2ZWwgY2hhbmdlLCBzbyBpdCdzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3b3VsZCBiZSBgaXA2X3RubF94bWl0YCBhbmQgKGFsdGhvdWdoIGlubGluZSkgYGlwNl90bmxfZW5jYXBgLiAgYGlwNl90bmxfeG1pdGAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBpdCdzIHRoZSBtYWluIHRyYW5zbWl0IGZ1bmN0aW9uIGZvciBJUHY2IHR1bm5lbHMsIHNvIGl0J3MgYSBob3QtcGF0aCBmdW5jdGlvbi4gIEl0J3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIGlwNl90dW5uZWwsIHNvIGl0J3MgY2xlYXJseSBhIGNyaXRpY2FsIHBvaW50IGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuXG5cblRoZSBwYXRjaCBmb2N1c2VzICpvbmx5KiBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBgaXA2X3RubF94bWl0YCBhbmQgYGlwNl90bmxfZW5jYXBgLiBTbywgZXZlbiB0aG91Z2ggdGhlcmUgbWlnaHQgYmUgc3VwcG9ydGluZyBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zLCB0aGVyZSdzIG5vIG5lZWQgdG8gZm9jdXMgb24gdGhlbSwgdW5sZXNzIHRoZSBpbnRlbnRpb24gaXMgdG8gY2hlY2sgY2FsbCBjaGFpbnMuIFNvLCB0aGUgZGlyZWN0IHRhcmdldHMgZm9yIGZ1enppbmcgYmVjb21lIG1vcmUgY29uY3JldGU6IGBpcDZfdG5sX3htaXRgIGFuZCwgcGVyaGFwcywgY2FyZWZ1bGx5IGNyYWZ0ZWQgdGVzdHMgaW52b2x2aW5nIHRoZSBpbmxpbmUgYGlwNl90bmxfZW5jYXBgLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhlcmNpc2UgZGlmZmVyZW50IGNvZGUgcGF0aHMgaW4gYGlwNl90bmxfeG1pdGAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gY3JlYXRpbmcgYW55IGZ1enppbmcgaGFybmVzc2VzLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYENPTkZJR19JUFY2X1RVTk5FTGAgKHdoaWNoIGRlcGVuZHMgb24gYElQVjZgKS4gR290dGEgbWFrZSBzdXJlIHRob3NlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGZvciB0aGUgdGVzdGluZyBlbnZpcm9ubWVudC4gSSdsbCBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpYyBvcHRpb24uIFRoZW4sIGxldCdzIGdldCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjE0LjQ4MDIzNzE1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2Njk0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1RVTk5FTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMToxNS4yNjY5MzU5ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzMzcxMzk0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGF0YSBSYWNlIEZpeCBpbiBJUHY2IFR1bm5lbCBFbmNhcHN1bGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgZnVuY3Rpb25hbGx5IGNvcnJlY3QgZml4LCBhbmQgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpcDZfdG5sX2VuY2FwYCBhbmQgYGlwNl90bmxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlci4gVGhlIGNydWNpYWwgc2hpZnQgaXMgbW9kaWZ5aW5nIGBpcDZfdG5sX2VuY2FwYCB0byBhY2NlcHQgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaXA2X3RubCAqdGAuIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzLlxuXG5JbiBgaXA2X3RubF94bWl0YCwgdGhlIHBhdGNoIG5vdyByZWFkcyBgdC1cdTAwM2VlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGJlZm9yZSBwYXNzaW5nIGEgcG9pbnRlciB0byB0aGlzIGxvY2FsIGNvcHkgKGBcdTAwMjZpcGVuY2FwYCkgdG8gYm90aCBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGZpeC4gQnkgaW50cm9kdWNpbmcgYSBsb2NhbCBjb3B5IGFuZCB1c2luZyBgZGF0YV9yYWNlKClgLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgdXNlZCBieSBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAgYXJlIGNvbnNpc3RlbnQsIHRodXMgcHJldmVudGluZyBhIHBvdGVudGlhbCByYWNlIHdoZXJlIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBjb3VsZCBsZWFkIHRvIGluY29uc2lzdGVudCBzdGF0ZS4gVGhlIGBkYXRhX3JhY2UoKWAgaXMgY3J1Y2lhbDsgaXQncyB3aGF0IGhhbmRsZXMgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MgYW5kIGVuc3VyZXMgZGF0YSBjb25zaXN0ZW5jeS5cblxuVGhlIGRhdGEgcmFjZSBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHdoZW4gcGFja2V0cyBhcmUgc2VudCB0aHJvdWdoIGFuIElQdjYgdHVubmVsIHdoaWxlIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGFyZSBiZWluZyBjb25jdXJyZW50bHkgbW9kaWZpZWQuIFRoZSBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBpcDZfdG5sX3htaXRgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgY2FsbGVkIGJ5IGBpcDRpcDZfdG5sX3htaXRgLCBgaXA2aXA2X3RubF94bWl0YCwgYW5kIGBhbnlfaXA2aXA2X3RubF94bWl0YC4gRGVmaW5pdGVseSByZWFjaGFibGUuIEFuZCBzaW5jZSB0aGUgY29uZmlndXJhdGlvbiBpcyBgSVBWNl9UVU5ORUxgLCB0aGF0IHJlaW5mb3JjZXMgaXQuXG5cbkl0J3MgbGlrZWx5IHdvcnRoIGZ1enppbmcgdGhlIGBpcDZfdG5sX3htaXRgIHBhdGgsIHBvdGVudGlhbGx5IGFsc28gYGlwNl90bmxfZW5jYXBfc2V0dXBgLCBhbHRob3VnaCB0aGUgY29yZSBmaXggbGllcyB3aXRoaW4gdGhlIGZvcm1lci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBpcDZfdG5sX3htaXRgLiBgaXA2X3RubF9lbmNhcF9zZXR1cGAgaXMgYWxzbyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgY2FsbGVkIGZyb20gYGlwNl90bmxfY2hhbmdlbGlua2AsIGBpcDZfdG5sX25ld2xpbmtgLCBgaXA2Z3JlX25ld2xpbmtfY29tbW9uYCwgYW5kIGBpcDZncmVfY2hhbmdlbGlua19jb21tb25gLCBtYWtpbmcgaXQgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24uIE15IHJlc3VsdHMgc2hvdyBhIGNsZWFyIGZvY3VzIG9uIGZpeGluZyBhIGRhdGEgcmFjZSB3aXRoaW4gYGlwNl90bmxfeG1pdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTQsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjM0LjYwNDA3NzgyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMjYzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X3RubF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoIChpcDZfdG5sX3htaXQpIGJ5IHJlYWRpbmcgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgaW50byBhIGxvY2FsIHZhcmlhYmxlIG9uY2UsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYmV0d2VlbiBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjM0LjY3NjM0NzYwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODA4NDQ0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMTozNC42NzY3NDc3MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI0ODA0Mzk3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIChUT0MtVE9VKSBvbiBgdC1cXHUwMDNlZW5jYXBgIGJ5IHRha2luZyBhIHNuYXBzaG90IG9mIGl0IGludG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgYW5kIHVzaW5nIHRoYXQgc25hcHNob3QgZm9yIGJvdGggbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoZSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcGAgaXMgYSBzbWFsbCA4LWJ5dGUgc3RydWN0dXJlIHdpdGggbm8gcGFkZGluZywgYW5kIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdHJ1Y3QgYXNzaWdubWVudCBgaXBlbmNhcCA9IGRhdGFfcmFjZSh0LVxcdTAwM2VlbmNhcCk7YC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtDU0FOIChmb3IgZGF0YSByYWNlcykgb3IgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBidWcuIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA4OjE5OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG5pbmRleCBiOTk4MDVlZTJmZDE0Li42ZTc2ZTUwYTQ0MDZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmhcbkBAIC0xMDYsMjIgKzEwNiwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBpcDZfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxuIFx0cmV0dXJuIGhsZW47XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwNl90bmwgKnQsXG4rc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxuIFx0XHRcdFx0dTggKnByb3RvY29sLCBzdHJ1Y3QgZmxvd2k2ICpmbDYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHM7XG4gXHRpbnQgcmV0ID0gLUVJTlZBTDtcbiBcbi1cdGlmICh0LVx1MDAzZWVuY2FwLnR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXG4rXHRpZiAoZS1cdTAwM2V0eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh0LVx1MDAzZWVuY2FwLnR5cGUgXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxuK1x0aWYgKGUtXHUwMDNldHlwZSBcdTAwM2U9IE1BWF9JUFRVTl9FTkNBUF9PUFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbdC1cdTAwM2VlbmNhcC50eXBlXSk7XG4rXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1tlLVx1MDAzZXR5cGVdKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlYnVpbGRfaGVhZGVyKSlcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIFx1MDAyNnQtXHUwMDNlZW5jYXAsIHByb3RvY29sLCBmbDYpO1xuK1x0XHRyZXQgPSBvcHMtXHUwMDNlYnVpbGRfaGVhZGVyKHNrYiwgZSwgcHJvdG9jb2wsIGZsNik7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBkNWZmNTBhMmFjMDE3Li42M2M1MjRiMDgwZGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xMTAyLDYgKzExMDIsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcbiBcdFx0IF9fdTggcHJvdG8pXG4ge1xuIFx0c3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gdC1cdTAwM2VuZXQ7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7XG4gXHRzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0O1xuQEAgLTExMDksMTAgKzExMTAsMTEgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjtcbiBcdGludCBlcnJfY291bnQsIG10dTtcbiBcdHVuc2lnbmVkIGludCBldGhfaGxlbiA9IHQtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gRVRIX0hMRU4gOiAwO1xuLVx0dW5zaWduZWQgaW50IHBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHQtXHUwMDNlZW5jYXBfaGxlbjtcbi1cdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcbitcdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb207XG4gXHRfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDtcbiBcdGJvb2wgdXNlX2NhY2hlID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgcHNoX2hsZW47XG4rXHRpbnQgZW5jYXBfaGxlbjtcbiBcdHU4IGhvcF9saW1pdDtcbiBcdGludCBlcnIgPSAtMTtcbiBcbkBAIC0xMjAyLDYgKzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdFx0XHQgICAgIHQtXHUwMDNlcGFybXMubmFtZSk7XG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFx0fVxuK1xuK1x0LyogQ2FuIHRlYXIsIGJ1dCBobGVuIGFuZCBidWlsZF9oZWFkZXIoKSB1c2UgdGhlIHNhbWUgc25hcHNob3QuICovXG4rXHRpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO1xuK1x0ZW5jYXBfaGxlbiA9IGlwNl9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuK1x0aWYgKHVubGlrZWx5KGVuY2FwX2hsZW4gXHUwMDNjIDApKVxuK1x0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbitcdHBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIGVuY2FwX2hsZW47XG4rXHRtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcbitcbiBcdG10dSA9IGRzdDZfbXR1KGRzdCkgLSBldGhfaGxlbiAtIHBzaF9obGVuIC0gdC1cdTAwM2V0dW5faGxlbjtcbiBcdGlmIChlbmNhcF9saW1pdCBcdTAwM2U9IDApIHtcbiBcdFx0bWF4X2hlYWRyb29tICs9IDg7XG5AQCAtMTI0MCw3ICsxMjUxLDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFxuIFx0aWYgKHQtXHUwMDNlcGFybXMuY29sbGVjdF9tZCkge1xuLVx0XHRpZiAodC1cdTAwM2VlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuK1x0XHRpZiAoaXBlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuIFx0XHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHVzZV9jYWNoZSBcdTAwMjZcdTAwMjYgbmRzdClcbkBAIC0xMjY0LDcgKzEyNzUsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcbiBcdFx0XHQrIGRzdC1cdTAwM2VoZWFkZXJfbGVuICsgdC1cdTAwM2VobGVuO1xuIFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG4gXG4tXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgdCwgXHUwMDI2cHJvdG8sIGZsNik7XG4rXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG8sIGZsNik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MjE6MzQuNjc2NzQ4ODU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMjk3OTE5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkcmVzc2luZyBhIERhdGEgUmFjZSBpbiBJUCBUdW5uZWwgRW5jYXBzdWxhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBob3cgd2UgaGFuZGxlIGVuY2Fwc3VsYXRpb24gd2l0aGluIGBpcDZfdG5sX2VuY2FwYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBtb3ZpbmcgZnJvbSBkaXJlY3RseSB1c2luZyBgc3RydWN0IGlwNl90bmwgKnRgIHRvIGEgbW9yZSBnZW5lcmljIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmaXhpbmcgYSBkYXRhIHJhY2UgaXNzdWUuXG5cblNwZWNpZmljYWxseSwgaW4gYGlwNl90bmxfeG1pdGAsIHdlJ3JlIG5vdyByZWFkaW5nIGB0LVx1MDAzZWVuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgY2FsbGVkIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB3ZSB3YW50IHRvIHByZXZlbnQgYSBzY2VuYXJpbyB3aGVyZSBgdC1cdTAwM2VlbmNhcGAgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluY29uc2lzdGVudCB2YWx1ZXMgYmVpbmcgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYGhsZW5gIGFuZCBjYWxscyB0byBgYnVpbGRfaGVhZGVyKClgLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBdm9pZGluZyByYWNlIGNvbmRpdGlvbnMgbGlrZSB0aGF0IGlzIGNyaXRpY2FsIGZvciBwYWNrZXQgaW50ZWdyaXR5IGFuZCBjb25zaXN0ZW50IGJlaGF2aW9yLlxuXG5CdXTigKYgd2FpdCBhIHNlY29uZC4gVGhhdCBgaXBlbmNhcGAgdmFyaWFibGXigKYgaXQncyBkZWNsYXJlZCByaWdodCB0aGVyZSBvbiB0aGUgc3RhY2s6IGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7YC4gQW5kIGl0J3MgaW5pdGlhbGl6ZWQgd2l0aCBgaXBlbmNhcCA9IGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKTtgLiBOb3csIEknbSB0aGlua2luZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNuZWFrIGluIGhlcmU/IFdlJ3JlIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIGB0LVx1MDAzZWVuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUuIGB0LVx1MDAzZWVuY2FwYCAqc2hvdWxkKiBiZSBhIHByb3Blcmx5IGluaXRpYWxpemVkIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIEkgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcGAgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBydW5uaW5nIGludG8gYW55IHVuZGVmaW5lZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjQwLjcwNjU0NDI3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjA4MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD02Nz1zdHJ1Y3QgaXBfdHVubmVsX2tleSB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtODgtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjg5OnN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC05MC1cXHR1MTZcXHRcXHRcXHR0eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMTo0Mi44NTI2MzIzMzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDkxMTc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGlwX3R1bm5lbF9lbmNhcGAgU3RydWN0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgLiBMZXQncyBwdWxsIHVwIHRoZSBmdWxsIGRlZmluaXRpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgbWVtYmVycywgdGhlaXIgdHlwZXMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB2YXJpb3VzIGVuY2Fwc3VsYXRpb24gbWV0aG9kcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgcHJvdG9jb2xzIOKAkyBHUkUsIElQSVAsIFZYTEFOLCBHZW5ldmUsIGV0Yy4g4oCTIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcGFja2V0IHByb2Nlc3NpbmcsIHBhcnRpY3VsYXJseSB0aGUgZW5jYXAvZGVjYXAgb3BlcmF0aW9ucywgYW5kIHdoYXQgdGhlIHZhcmlvdXMgZmxhZ3MgYW5kIG9wdGlvbnMgYWN0dWFsbHkgc2lnbmlmeSB3aXRoaW4gdGhlIGRhdGEgc3RydWN0dXJlLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgbnV0cyBhbmQgYm9sdHMuIExldCdzIGdldCB0byB0aGUgc291cmNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMTo0Ni41MDM1NDY4NThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDg5OlxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xcbiAgOTA6XFx0XFx0dTE2XFx0XFx0XFx0dHlwZTtcXG4gIDkxOlxcdFxcdHUxNlxcdFxcdFxcdGZsYWdzO1xcbiAgOTI6XFx0XFx0X19iZTE2XFx0XFx0XFx0c3BvcnQ7XFxuICA5MzpcXHRcXHRfX2JlMTZcXHRcXHRcXHRkcG9ydDtcXG4gIDk0OlxcdH07XFxuICA5NTpcXHRcXG4gIDk2OlxcdC8qIEZsYWdzIGZvciBpcF90dW5uZWxfaW5mbyBtb2RlLiAqL1xcbiAgOTc6XFx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19UWFxcdDB4MDFcXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXFxuICA5ODpcXHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0lQVjZcXHQweDAyXFx0Lyoga2V5IGNvbnRhaW5zIElQdjYgYWRkcmVzc2VzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjQ2LjUwMzYzODc2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY1MzUyNDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhaW1zIHRvIGZpeCBhIHBvdGVudGlhbCBkYXRhIHJhY2Ugd2l0aCBgdC1cdTAwM2VlbmNhcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHRpbnkgc3RydWN0dXJlLCBqdXN0IDggYnl0ZXMsIGFuZCBjb3BpZWQgYnkgdmFsdWUuIFRoZSBjb2RlIGRvZXMgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cdTAwM2VlbmNhcCk7YCB3aGljaCBtZWFucyBhIGNvbXBsZXRlIGNvcHkuIFNpbmNlIGB0LVx1MDAzZWVuY2FwYCBjb21lcyBmcm9tIGBzdHJ1Y3QgaXA2X3RubGAsIHdoaWNoIGlzIG5ldF9kZXZpY2UtcmVsYXRlZCwgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGd1YXJhbnRlZWQuXG5cbkV2ZW4gaWYgdGhlcmUgKndlcmUqIHBhZGRpbmcgKHdoaWNoIEknbSBwcmV0dHkgc3VyZSB0aGVyZSBpc24ndDsgaXQncyBhIHRpZ2h0IDIrMisyKzIgbGF5b3V0KSwgd2UncmUgb25seSB1c2luZyBgaXBlbmNhcGAgaW50ZXJuYWxseSBpbiBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAuICBgaXA2X3RubF9lbmNhcGAgcGFzc2VzIGEgcG9pbnRlciB0byB0aGUgY29waWVkIGBpcGVuY2FwYCB0byBgb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcmAuICBTbywgaXMgdGhlcmUgYSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0IHRvIHVzZXIgc3BhY2U/IE5vcGUuIFRoZSBlbnRpcmUgYGlwZW5jYXBgIHN0cnVjdHVyZSBpcyBwb3B1bGF0ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50LiAgVGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGxlYWthZ2UgaXMgemVyby5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIGNsYXNzaWMgVE9DLVRPVSBjb25jdXJyZW5jeSBidWcgZml4LCB3aGVyZSBhIHNuYXBzaG90IG9mIHRoZSB2YWx1ZSBpcyB0YWtlbiB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4gS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSB3aGVyZSB0aGUgdmFsdWUgY291bGQgY2hhbmdlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCB1c2FnZS4gS0FTQU4vS0NTQU4gd291bGQgYmUgdGhlIGNvcnJlY3QgdG9vbCBmb3IgdGhpcyBzb3J0IG9mIGlzc3VlLCBidXQgbm90IEtNU0FOLCB3aGljaCBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIGBpcGVuY2FwYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3RydWN0IGFzc2lnbm1lbnQuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU0LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjU3LjE1NzE3MDI4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVxcdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXFx1MDAzZWVuY2FwKTtgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0NTQU4gKGZvciBkYXRhIHJhY2VzKSBvciBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGJ1Zy4gS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSAoVE9DLVRPVSkgb24gYHQtXFx1MDAzZWVuY2FwYCBieSB0YWtpbmcgYSBzbmFwc2hvdCBvZiBpdCBpbnRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGlwZW5jYXBgIGFuZCB1c2luZyB0aGF0IHNuYXBzaG90IGZvciBib3RoIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGUgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgc21hbGwgOC1ieXRlIHN0cnVjdHVyZSB3aXRoIG5vIHBhZGRpbmcsIGFuZCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cXHUwMDNlZW5jYXApO2AuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQ1NBTiAoZm9yIGRhdGEgcmFjZXMpIG9yIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgYnVnLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbr5tg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 07:36:40 +0000 UTC FinishedAt: 2026-08-25 08:21:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_TUNNEL" ], "series_id": "6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_tnl_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF94bWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVx1MDAzZWVuY2FwYCBieSB0YWtpbmcgYSBzbmFwc2hvdCBvZiBpdCBpbnRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGlwZW5jYXBgIGFuZCB1c2luZyB0aGF0IHNuYXBzaG90IGZvciBib3RoIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGUgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgc21hbGwgOC1ieXRlIHN0cnVjdHVyZSB3aXRoIG5vIHBhZGRpbmcsIGFuZCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cdTAwM2VlbmNhcCk7YC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtDU0FOIChmb3IgZGF0YSByYWNlcykgb3IgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBidWcuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA4OjE5OjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuaW5kZXggYjk5ODA1ZWUyZmQxNC4uNmU3NmU1MGE0NDA2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG5AQCAtMTA2LDIyICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXG4gXHRyZXR1cm4gaGxlbjtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXA2X3RubCAqdCxcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxuIFx0XHRcdFx0dTggKnByb3RvY29sLCBzdHJ1Y3QgZmxvd2k2ICpmbDYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHM7XG4gXHRpbnQgcmV0ID0gLUVJTlZBTDtcbiBcbi1cdGlmICh0LVx1MDAzZWVuY2FwLnR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXG4mIzQzO1x0aWYgKGUtXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodC1cdTAwM2VlbmNhcC50eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbiYjNDM7XHRpZiAoZS1cdTAwM2V0eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1t0LVx1MDAzZWVuY2FwLnR5cGVdKTtcbiYjNDM7XHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1tlLVx1MDAzZXR5cGVdKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlYnVpbGRfaGVhZGVyKSlcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIFx1MDAyNnQtXHUwMDNlZW5jYXAsIHByb3RvY29sLCBmbDYpO1xuJiM0MztcdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIGUsIHByb3RvY29sLCBmbDYpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uNjNjNTI0YjA4MGRkNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTEwMiw2ICYjNDM7MTEwMiw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHQgX191OCBwcm90bylcbiB7XG4gXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gdC1cdTAwM2VuZXQ7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7XG4gXHRzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0O1xuQEAgLTExMDksMTAgJiM0MzsxMTEwLDExIEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7XG4gXHRpbnQgZXJyX2NvdW50LCBtdHU7XG4gXHR1bnNpZ25lZCBpbnQgZXRoX2hsZW4gPSB0LVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IEVUSF9ITEVOIDogMDtcbi1cdHVuc2lnbmVkIGludCBwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MzsgdC1cdTAwM2VlbmNhcF9obGVuO1xuLVx0dW5zaWduZWQgaW50IG1heF9oZWFkcm9vbSA9IHBzaF9obGVuO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb207XG4gXHRfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDtcbiBcdGJvb2wgdXNlX2NhY2hlID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBzaF9obGVuO1xuJiM0MztcdGludCBlbmNhcF9obGVuO1xuIFx0dTggaG9wX2xpbWl0O1xuIFx0aW50IGVyciA9IC0xO1xuIFxuQEAgLTEyMDIsNiAmIzQzOzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdFx0XHQgICAgIHQtXHUwMDNlcGFybXMubmFtZSk7XG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBDYW4gdGVhciwgYnV0IGhsZW4gYW5kIGJ1aWxkX2hlYWRlcigpIHVzZSB0aGUgc2FtZSBzbmFwc2hvdC4gKi9cbiYjNDM7XHRpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO1xuJiM0MztcdGVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoZW5jYXBfaGxlbiBcdTAwM2MgMCkpXG4mIzQzO1x0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiYjNDM7XHRwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MzsgZW5jYXBfaGxlbjtcbiYjNDM7XHRtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcbiYjNDM7XG4gXHRtdHUgPSBkc3Q2X210dShkc3QpIC0gZXRoX2hsZW4gLSBwc2hfaGxlbiAtIHQtXHUwMDNldHVuX2hsZW47XG4gXHRpZiAoZW5jYXBfbGltaXQgXHUwMDNlPSAwKSB7XG4gXHRcdG1heF9oZWFkcm9vbSAmIzQzOz0gODtcbkBAIC0xMjQwLDcgJiM0MzsxMjUxLDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFxuIFx0aWYgKHQtXHUwMDNlcGFybXMuY29sbGVjdF9tZCkge1xuLVx0XHRpZiAodC1cdTAwM2VlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuJiM0MztcdFx0aWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICh1c2VfY2FjaGUgXHUwMDI2XHUwMDI2IG5kc3QpXG5AQCAtMTI2NCw3ICYjNDM7MTI3NSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHRcdCYjNDM7IGRzdC1cdTAwM2VoZWFkZXJfbGVuICYjNDM7IHQtXHUwMDNlaGxlbjtcbiBcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pO1xuIFxuLVx0ZXJyID0gaXA2X3RubF9lbmNhcChza2IsIHQsIFx1MDAyNnByb3RvLCBmbDYpO1xuJiM0MztcdGVyciA9IGlwNl90bmxfZW5jYXAoc2tiLCBcdTAwMjZpcGVuY2FwLCBcdTAwMjZwcm90bywgZmw2KTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDA4OjE5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCmluZGV4IGI5OTgwNWVlMmZkMTQuLjZlNzZlNTBhNDQwNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKQEAgLTEwNiwyMiAmIzQzOzEwNiwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBpcDZfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKQogCXJldHVybiBobGVuOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpcDZfdG5sX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcDZfdG5sICp0LAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSwKIAkJCQl1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTYgKmZsNikKIHsKIAljb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wczsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmICh0LSZndDtlbmNhcC50eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKQomIzQzOwlpZiAoZS0mZ3Q7dHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodC0mZ3Q7ZW5jYXAudHlwZSAmZ3Q7PSBNQVhfSVBUVU5fRU5DQVBfT1BTKQomIzQzOwlpZiAoZS0mZ3Q7dHlwZSAmZ3Q7PSBNQVhfSVBUVU5fRU5DQVBfT1BTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1t0LSZndDtlbmNhcC50eXBlXSk7CiYjNDM7CW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW2UtJmd0O3R5cGVdKTsKIAlpZiAobGlrZWx5KG9wcyAmYW1wOyZhbXA7IG9wcy0mZ3Q7YnVpbGRfaGVhZGVyKSkKLQkJcmV0ID0gb3BzLSZndDtidWlsZF9oZWFkZXIoc2tiLCAmYW1wO3QtJmd0O2VuY2FwLCBwcm90b2NvbCwgZmw2KTsKJiM0MzsJCXJldCA9IG9wcy0mZ3Q7YnVpbGRfaGVhZGVyKHNrYiwgZSwgcHJvdG9jb2wsIGZsNik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGQ1ZmY1MGEyYWMwMTcuLjYzYzUyNGIwODBkZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTExMDIsNiAmIzQzOzExMDIsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJIF9fdTggcHJvdG8pCiB7CiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7CiAJc3RydWN0IG5ldCAqbmV0ID0gdC0mZ3Q7bmV0OwogCXN0cnVjdCBpcHY2aGRyICppcHY2aDsKIAlzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0OwpAQCAtMTEwOSwxMCAmIzQzOzExMTAsMTEgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsCiAJc3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7CiAJaW50IGVycl9jb3VudCwgbXR1OwogCXVuc2lnbmVkIGludCBldGhfaGxlbiA9IHQtJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBFVEhfSExFTiA6IDA7Ci0JdW5zaWduZWQgaW50IHBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyB0LSZndDtlbmNhcF9obGVuOwotCXVuc2lnbmVkIGludCBtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9oZWFkcm9vbTsKIAlfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDsKIAlib29sIHVzZV9jYWNoZSA9IGZhbHNlOwomIzQzOwl1bnNpZ25lZCBpbnQgcHNoX2hsZW47CiYjNDM7CWludCBlbmNhcF9obGVuOwogCXU4IGhvcF9saW1pdDsKIAlpbnQgZXJyID0gLTE7CiAKQEAgLTEyMDIsNiAmIzQzOzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsCiAJCQkJICAgICB0LSZndDtwYXJtcy5uYW1lKTsKIAkJZ290byB0eF9lcnJfZHN0X3JlbGVhc2U7CiAJfQomIzQzOwomIzQzOwkvKiBDYW4gdGVhciwgYnV0IGhsZW4gYW5kIGJ1aWxkX2hlYWRlcigpIHVzZSB0aGUgc2FtZSBzbmFwc2hvdC4gKi8KJiM0MzsJaXBlbmNhcCA9IGRhdGFfcmFjZSh0LSZndDtlbmNhcCk7CiYjNDM7CWVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbigmYW1wO2lwZW5jYXApOwomIzQzOwlpZiAodW5saWtlbHkoZW5jYXBfaGxlbiAmbHQ7IDApKQomIzQzOwkJZ290byB0eF9lcnJfZHN0X3JlbGVhc2U7CiYjNDM7CXBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyBlbmNhcF9obGVuOwomIzQzOwltYXhfaGVhZHJvb20gPSBwc2hfaGxlbjsKJiM0MzsKIAltdHUgPSBkc3Q2X210dShkc3QpIC0gZXRoX2hsZW4gLSBwc2hfaGxlbiAtIHQtJmd0O3R1bl9obGVuOwogCWlmIChlbmNhcF9saW1pdCAmZ3Q7PSAwKSB7CiAJCW1heF9oZWFkcm9vbSAmIzQzOz0gODsKQEAgLTEyNDAsNyAmIzQzOzEyNTEsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJZ290byB0eF9lcnJfZHN0X3JlbGVhc2U7CiAKIAlpZiAodC0mZ3Q7cGFybXMuY29sbGVjdF9tZCkgewotCQlpZiAodC0mZ3Q7ZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSkKJiM0MzsJCWlmIChpcGVuY2FwLnR5cGUgIT0gVFVOTkVMX0VOQ0FQX05PTkUpCiAJCQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKIAl9IGVsc2UgewogCQlpZiAodXNlX2NhY2hlICZhbXA7JmFtcDsgbmRzdCkKQEAgLTEyNjQsNyAmIzQzOzEyNzUsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJCSYjNDM7IGRzdC0mZ3Q7aGVhZGVyX2xlbiAmIzQzOyB0LSZndDtobGVuOwogCWlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pOwogCi0JZXJyID0gaXA2X3RubF9lbmNhcChza2IsIHQsICZhbXA7cHJvdG8sIGZsNik7CiYjNDM7CWVyciA9IGlwNl90bmxfZW5jYXAoc2tiLCAmYW1wO2lwZW5jYXAsICZhbXA7cHJvdG8sIGZsNik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSBhIHBhdGNoIGRlc2lnbmVkIGZvciBmdXp6aW5nLiBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYCBhbmQgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIHRoYXQgYGlwNl90bmxfZW5jYXBgIG5vdyB0YWtlcyBhIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplYCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBpcDZfdG5sICp0YC4gTW9yZSBpbnRlcmVzdGluZ2x5LCBpbiBgaXA2X3RubF94bWl0YCwgdGhleSYjMzk7cmUgdXNpbmcgYGRhdGFfcmFjZSh0LSZndDtlbmNhcClgIHRvIHNhZmVseSByZWFkIGB0LSZndDtlbmNhcGAgaW50byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSB1c2luZyBpdCBmb3Igc2V2ZXJhbCBjYWxscy4gUmlnaHQsIGZpeGluZyBhIGRhdGEgcmFjZSDigJMgYSB2ZXJ5IHZhbGlkIHJlYXNvbiB0byBmdXp6IHRoaXMuIEluY29uc2lzdGVudCBzdGF0ZSBkdWUgdG8gcmFjZSBjb25kaXRpb25zIGNhbiBiZSBuYXN0eSBhbmQgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC4KCk5vdywgbGV0JiMzOTtzIGdldCBmb2N1c2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBhbmQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgaXA2X3RubF94bWl0YC4gVGhlIGNvZGUgaXMgd2l0aGluIHRoZSBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBtb2R1bGUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgbGlrZWx5IHJldmVhbHMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24uLi55dXAsIGBJUFY2X1RVTk5FTGAuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBgbmV0L2lwdjYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIFRoaXMgd2lsbCBoZWxwIGVuc3VyZSBteSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cyB0aGUgcmlnaHQgYnVpbGQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdHVubmVsLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjgyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIElQdjYgVHVubmVsIERhdGEgUmFjZSBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYCBhbmQgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IGBpcDZfdG5sX2VuY2FwYCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBub3cgdGFraW5nIGEgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVgIGluc3RlYWQgb2YgYHN0cnVjdCBpcDZfdG5sICp0YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBhYm91dCBpbXByb3ZpbmcgZW5jYXBzdWxhdGlvbiBtYW5hZ2VtZW50LgoKU3BlY2lmaWNhbGx5LCBpbiBgaXA2X3RubF94bWl0YCwgSSBzZWUgdGhhdCBgdC0mZ3Q7ZW5jYXBgIGlzIGJlaW5nIGFjY2Vzc2VkIHVzaW5nIGBkYXRhX3JhY2UoKWAuIEFoLCB0aGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbjsgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGRhdGEgcmFjZS4gVGhlIGNvZGUgaXMgcHVsbGluZyBgdC0mZ3Q7ZW5jYXBgIGludG8gYSBsb2NhbCB2YXJpYWJsZSwgYGlwZW5jYXBgLCB1c2luZyB0aGF0IGZvciB0aGUgYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgIGNhbGxzLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgYXBwcm9hY2ggdG8gZml4aW5nIGEgcmFjZSBjb25kaXRpb24gb24gYSBzaGFyZWQgc3RydWN0dXJlLiBCeSBjb3B5aW5nIGl0IHRvIGEgbG9jYWwgdmFyaWFibGUgeW91IGVuc3VyZSB0aGF0IHlvdXIgZnVuY3Rpb24gaXMgYWN0aW5nIG9uIGEgY29uc3RhbnQgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgYSBkYXRhIHJhY2UgZml4LgoKVGhlIGZhY3QgdGhhdCBgaXA2X3RubF94bWl0YCBpcyBleHBvcnRlZCB0ZWxscyBtZSBpdCYjMzk7cyB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3IgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBJUHY2IHR1bm5lbCBkcml2ZXIsIGxpa2VseSBtYWtpbmcgdGhpcyBmaXggcXVpdGUgaW1wb3J0YW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgdG8gY29uZmlybSB0aGF0IGBpcDZfdG5sX3htaXRgIHJlYWxseSBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVscywgYW5kIHRoYXQgdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGlzIGluZGVlZCB0aWVkIHRvIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVuLCBJJiMzOTtsbCB2ZXJpZnkgaWYgYGlwNl90bmxfeG1pdGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmlwNl90bmxfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTA0Mj1pbnQgaXA2X3RubF94bWl0X2N0bChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ny19XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTA3ODpFWFBPUlRfU1lNQk9MX0dQTChpcDZfdG5sX3htaXRfY3RsKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMDc5LVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMTAwPWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMzA0LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxMzA1OkVYUE9SVF9TWU1CT0woaXA2X3RubF94bWl0KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMzA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRGF0YSBSYWNlIEZpeCBpbiBJUHY2IFR1bm5lbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYGlwNl90bmxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGFsc28gdG91Y2hlcyBgaXA2X3RubF9lbmNhcGAgaW4gYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhYm91dCBob3cgdGhlIGB0LSZndDtlbmNhcGAgbWVtYmVyIGlzIGFjY2Vzc2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW50cm9kdWNpbmcgYGRhdGFfcmFjZSh0LSZndDtlbmNhcClgIHRvIHJlYWQgdGhhdCB2YWx1ZSBpbnRvIGEgbG9jYWwgdmFyaWFibGUgKGBpcGVuY2FwYCkuIFRoZSBnb2FsIGhlcmUgaXMgcHJldHR5IGNsZWFyOiB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBhIGRhdGEgcmFjZSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGF0IGB0LSZndDtlbmNhcGAgY2FuIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4OyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSB0byBwcm90ZWN0IGFnYWluc3QgYSBjb25jdXJyZW5jeSBidWcuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYENPTkZJR19JUFY2X1RVTk5FTGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLgoKTXkgbmV4dCBzdGVwIGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0LiBMZXQmIzM5O3MgbG9vayBhdCB3aG8gY2FsbHMgYGlwNl90bmxfeG1pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGEgY2VudHJhbCBlbnRyeSBwb2ludCBvciBpZiBpdCYjMzk7cyBiZWluZyB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjay4gTG9va3MgbGlrZSBpdCYjMzk7cyBleHBvcnRlZCwgc28gaXQgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZS4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyBhbiB4bWl0IGZ1bmN0aW9uIGZvciBJUHY2IHR1bm5lbHM7IG1ha2VzIHNlbnNlLiBJIHdpbGwgaW52ZXN0aWdhdGUgY2FsbGVycyBvZiBgaXA2X3RubF9lbmNhcGAsIGFzIGl0JiMzOTtzIHRoZSBvdGhlciBmdW5jdGlvbiBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl90bmxfZW5jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZm91Ni5jPTg5PXN0YXRpYyBpbnQgZ3VlNl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXG4tLVxubmV0L2lwdjYvZm91Ni5jLTE1Ni1cbm5ldC9pcHY2L2ZvdTYuYzoxNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyBmb3VfaXA2dHVuX29wcyA9IHtcbm5ldC9pcHY2L2ZvdTYuYy0xNTgtXHQuZW5jYXBfaGxlbiA9IGZvdV9lbmNhcF9obGVuLFxuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xNjItXG5uZXQvaXB2Ni9mb3U2LmM6MTYzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgZ3VlX2lwNnR1bl9vcHMgPSB7XG5uZXQvaXB2Ni9mb3U2LmMtMTY0LVx0LmVuY2FwX2hsZW4gPSBndWVfZW5jYXBfaGxlbixcbi0tXG5uZXQvaXB2Ni9mb3U2LmMtMTY4LVxubmV0L2lwdjYvZm91Ni5jOjE2OTpzdGF0aWMgaW50IGlwNl90bmxfZW5jYXBfYWRkX2ZvdV9vcHModm9pZClcbm5ldC9pcHY2L2ZvdTYuYy0xNzAte1xuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xNzItXG5uZXQvaXB2Ni9mb3U2LmM6MTczOlx0cmV0ID0gaXA2X3RubF9lbmNhcF9hZGRfb3BzKFx1MDAyNmZvdV9pcDZ0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY2L2ZvdTYuYy0xNzQtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjYvZm91Ni5jLTE3OC1cbm5ldC9pcHY2L2ZvdTYuYzoxNzk6XHRyZXQgPSBpcDZfdG5sX2VuY2FwX2FkZF9vcHMoXHUwMDI2Z3VlX2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xubmV0L2lwdjYvZm91Ni5jLTE4MC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbm5ldC9pcHY2L2ZvdTYuYy0xODEtXHRcdHByX2VycihcJiMzNDtjYW4mIzM5O3QgYWRkIGd1ZTYgb3BzXFxuXCYjMzQ7KTtcbm5ldC9pcHY2L2ZvdTYuYzoxODI6XHRcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXA2dHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XG5uZXQvaXB2Ni9mb3U2LmMtMTgzLVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xODgtXG5uZXQvaXB2Ni9mb3U2LmM6MTg5OnN0YXRpYyB2b2lkIGlwNl90bmxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcbm5ldC9pcHY2L2ZvdTYuYy0xOTAte1xubmV0L2lwdjYvZm91Ni5jOjE5MTpcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXA2dHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XG5uZXQvaXB2Ni9mb3U2LmM6MTkyOlx0aXA2X3RubF9lbmNhcF9kZWxfb3BzKFx1MDAyNmd1ZV9pcDZ0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcbm5ldC9pcHY2L2ZvdTYuYy0xOTMtfVxuLS1cbm5ldC9pcHY2L2ZvdTYuYy0xOTYtXG5uZXQvaXB2Ni9mb3U2LmM6MTk3OnN0YXRpYyBpbnQgaXA2X3RubF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxubmV0L2lwdjYvZm91Ni5jLTE5OC17XG4tLVxubmV0L2lwdjYvZm91Ni5jLTIwMS1cbm5ldC9pcHY2L2ZvdTYuYzoyMDI6c3RhdGljIHZvaWQgaXA2X3RubF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxubmV0L2lwdjYvZm91Ni5jLTIwMy17XG4tLVxubmV0L2lwdjYvZm91Ni5jPTIwOD1zdGF0aWMgaW50IF9faW5pdCBmb3U2X2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9mb3U2LmMtMjExLVxubmV0L2lwdjYvZm91Ni5jOjIxMjpcdHJldCA9IGlwNl90bmxfZW5jYXBfYWRkX2ZvdV9vcHMoKTtcbm5ldC9pcHY2L2ZvdTYuYy0yMTMtXG4tLVxubmV0L2lwdjYvZm91Ni5jPTIxNz1zdGF0aWMgdm9pZCBfX2V4aXQgZm91Nl9maW5pKHZvaWQpXG5uZXQvaXB2Ni9mb3U2LmMtMjE4LXtcbm5ldC9pcHY2L2ZvdTYuYzoyMTk6XHRpcDZfdG5sX2VuY2FwX2RlbF9mb3Vfb3BzKCk7XG5uZXQvaXB2Ni9mb3U2LmMtMjIwLX1cbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MTk0MD1zdGF0aWMgaW50IGlwNmdyZV9uZXdsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0ICpsaW5rX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTk1MC1cdGlmIChpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjYvaXA2X2dyZS5jOjE5NTE6XHRcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKG50LCBcdTAwMjZpcGVuY2FwKTtcbm5ldC9pcHY2L2lwNl9ncmUuYy0xOTUyLVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMDA2PWlwNmdyZV9jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDE4LVx0aWYgKGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFx1MDAyNmlwZW5jYXApKSB7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjAxOTpcdFx0aW50IGVyciA9IGlwNl90bmxfZW5jYXBfc2V0dXAobnQsIFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjYvaXA2X2dyZS5jLTIwMjAtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyNzctXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTI3ODpcdGVyciA9IGlwNl90bmxfZW5jYXAoc2tiLCBcdTAwMjZpcGVuY2FwLCBcdTAwMjZwcm90bywgZmw2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMjc5LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc5NT1FWFBPUlRfU1lNQk9MKGlwNl90bmxfZ2V0X2lmbGluayk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc5Ni1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzk3OmludCBpcDZfdG5sX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHMsXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc5OC1cdFx0XHQgIHVuc2lnbmVkIGludCBudW0pXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDItXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwMzpcdHJldHVybiAhY21weGNoZygoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICoqKVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDQtXHRcdFx0XHUwMDI2aXA2dHVuX2VuY2Fwc1tudW1dLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODA2LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODA3OkVYUE9SVF9TWU1CT0woaXA2X3RubF9lbmNhcF9hZGRfb3BzKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODA4LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MDk6aW50IGlwNl90bmxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODEwLVx0XHRcdCAgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgxNi1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODE3Olx0cmV0ID0gKGNtcHhjaGcoKGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyAqKilcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODE4LVx0XHQgICAgICAgXHUwMDI2aXA2dHVuX2VuY2Fwc1tudW1dLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODI0LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODI1OkVYUE9SVF9TWU1CT0woaXA2X3RubF9lbmNhcF9kZWxfb3BzKTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODI2LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4Mjc6aW50IGlwNl90bmxfZW5jYXBfc2V0dXAoc3RydWN0IGlwNl90bmwgKnQsXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgyOC1cdFx0XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICppcGVuY2FwKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ3LX1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODQ4OkVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfZW5jYXBfc2V0dXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDktXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNzk9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjA5Ni1cdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIwOTc6XHRcdGVyciA9IGlwNl90bmxfZW5jYXBfc2V0dXAobnQsIFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwOTgtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIxMjA9c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjE1Ni1cdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjIxNTc6XHRcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKHQsIFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxNTgtXG4tLVxubmV0L2lwdjYvdWRwLmM9NjAwPXN0YXRpYyBpbnQgX191ZHA2X2xpYl9lcnJfZW5jYXBfbm9fc2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni91ZHAuYy02MDgtXHRcdFx0ICAgICAgIHU4IHR5cGUsIHU4IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKTtcbm5ldC9pcHY2L3VkcC5jOjYwOTpcdFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICplbmNhcDtcbm5ldC9pcHY2L3VkcC5jLTYxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2VuY2FwX2hsZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyMDktXHRpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEyMTA6XHRlbmNhcF9obGVuID0gaXA2X2VuY2FwX2hsZW4oXHUwMDI2aXBlbmNhcCk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTIxMS1cdGlmICh1bmxpa2VseShlbmNhcF9obGVuIFx1MDAzYyAwKSlcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTgyNz1pbnQgaXA2X3RubF9lbmNhcF9zZXR1cChzdHJ1Y3QgaXA2X3RubCAqdCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgzMy1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODM0Olx0aGxlbiA9IGlwNl9lbmNhcF9obGVuKGlwZW5jYXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MzUtXHRpZiAoaGxlbiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgSVB2NiBUdW5uZWxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgSVB2NiB0dW5uZWxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBpcDZfdG5sX3htaXRgIGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIGFuZCBhbHNvIHRoZSBpbmxpbmUgZnVuY3Rpb24gYGlwNl90bmxfZW5jYXBgIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBkYXRhIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgcGFzc2luZyB0aGUgYGlwNl90bmxgIHN0cnVjdCBkaXJlY3RseSB0byBgaXA2X3RubF9lbmNhcGAsIGl0JiMzOTtzIG5vdyB1c2luZyBhIG1vcmUgZ2VuZXJpYyBgaXBfdHVubmVsX2VuY2FwYCBzdHJ1Y3QuCgpUaGUgcmVhbCBrZXkgaGVyZSBpcyB0aGUgZGF0YSByYWNlIGZpeC4gSSBzZWUgdGhleSYjMzk7cmUgcmVhZGluZyBgdC0mZ3Q7ZW5jYXBgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW50byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSB1c2luZyBpdCBpbiBib3RoIGBpcDZfZW5jYXBfaGxlbmAgYW5kIGBpcDZfdG5sX2VuY2FwYC4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUg4oCTIGB0LSZndDtlbmNhcGAgY291bGQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LCBsZWFkaW5nIHRvIGluY29uc2lzdGVudCBiZWhhdmlvci4gU21hcnQgbW92ZSwgdXNpbmcgdGhlIGxvY2FsIHZhcmlhYmxlLCB3aGljaCBndWFyYW50ZWVzIGNvbnNpc3RlbnQgdXNlIG9mIHRoZSBgZW5jYXBgIHN0cnVjdHVyZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBsb3ctbGV2ZWwgY2hhbmdlLCBzbyBpdCYjMzk7cyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgd291bGQgYmUgYGlwNl90bmxfeG1pdGAgYW5kIChhbHRob3VnaCBpbmxpbmUpIGBpcDZfdG5sX2VuY2FwYC4gIGBpcDZfdG5sX3htaXRgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgaXQmIzM5O3MgdGhlIG1haW4gdHJhbnNtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVscywgc28gaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbi4gIEl0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBpcDZfdHVubmVsLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgY3JpdGljYWwgcG9pbnQgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4KClRoZSBwYXRjaCBmb2N1c2VzICpvbmx5KiBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBgaXA2X3RubF94bWl0YCBhbmQgYGlwNl90bmxfZW5jYXBgLiBTbywgZXZlbiB0aG91Z2ggdGhlcmUgbWlnaHQgYmUgc3VwcG9ydGluZyBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGZvY3VzIG9uIHRoZW0sIHVubGVzcyB0aGUgaW50ZW50aW9uIGlzIHRvIGNoZWNrIGNhbGwgY2hhaW5zLiBTbywgdGhlIGRpcmVjdCB0YXJnZXRzIGZvciBmdXp6aW5nIGJlY29tZSBtb3JlIGNvbmNyZXRlOiBgaXA2X3RubF94bWl0YCBhbmQsIHBlcmhhcHMsIGNhcmVmdWxseSBjcmFmdGVkIHRlc3RzIGludm9sdmluZyB0aGUgaW5saW5lIGBpcDZfdG5sX2VuY2FwYC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGV4ZXJjaXNlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGluIGBpcDZfdG5sX3htaXRgLgoKTm93LCBiZWZvcmUgSSBkaWcgaW50byBjcmVhdGluZyBhbnkgZnV6emluZyBoYXJuZXNzZXMsIEkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQ09ORklHX0lQVjZfVFVOTkVMYCAod2hpY2ggZGVwZW5kcyBvbiBgSVBWNmApLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50LiBJJiMzOTtsbCBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpYyBvcHRpb24uIFRoZW4sIGxldCYjMzk7cyBnZXQgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfVFVOTkVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE0CgkJCQkJCQlvdXRwdXQ6IDEwOQoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEYXRhIFJhY2UgRml4IGluIElQdjYgVHVubmVsIEVuY2Fwc3VsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsbHkgY29ycmVjdCBmaXgsIGFuZCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpcDZfdG5sX2VuY2FwYCBhbmQgYGlwNl90bmxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlci4gVGhlIGNydWNpYWwgc2hpZnQgaXMgbW9kaWZ5aW5nIGBpcDZfdG5sX2VuY2FwYCB0byBhY2NlcHQgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaXA2X3RubCAqdGAuIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzLgoKSW4gYGlwNl90bmxfeG1pdGAsIHRoZSBwYXRjaCBub3cgcmVhZHMgYHQtJmd0O2VuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIGludG8gYSBsb2NhbCB2YXJpYWJsZSBgaXBlbmNhcGAgYmVmb3JlIHBhc3NpbmcgYSBwb2ludGVyIHRvIHRoaXMgbG9jYWwgY29weSAoYCZhbXA7aXBlbmNhcGApIHRvIGJvdGggYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBmaXguIEJ5IGludHJvZHVjaW5nIGEgbG9jYWwgY29weSBhbmQgdXNpbmcgYGRhdGFfcmFjZSgpYCwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIHVzZWQgYnkgYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgIGFyZSBjb25zaXN0ZW50LCB0aHVzIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgcmFjZSB3aGVyZSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgY291bGQgbGVhZCB0byBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBgZGF0YV9yYWNlKClgIGlzIGNydWNpYWw7IGl0JiMzOTtzIHdoYXQgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgZW5zdXJlcyBkYXRhIGNvbnNpc3RlbmN5LgoKVGhlIGRhdGEgcmFjZSBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHdoZW4gcGFja2V0cyBhcmUgc2VudCB0aHJvdWdoIGFuIElQdjYgdHVubmVsIHdoaWxlIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGFyZSBiZWluZyBjb25jdXJyZW50bHkgbW9kaWZpZWQuIFRoZSBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgaXA2X3RubF94bWl0YCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIGNhbGxlZCBieSBgaXA0aXA2X3RubF94bWl0YCwgYGlwNmlwNl90bmxfeG1pdGAsIGFuZCBgYW55X2lwNmlwNl90bmxfeG1pdGAuIERlZmluaXRlbHkgcmVhY2hhYmxlLiBBbmQgc2luY2UgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYElQVjZfVFVOTkVMYCwgdGhhdCByZWluZm9yY2VzIGl0LgoKSXQmIzM5O3MgbGlrZWx5IHdvcnRoIGZ1enppbmcgdGhlIGBpcDZfdG5sX3htaXRgIHBhdGgsIHBvdGVudGlhbGx5IGFsc28gYGlwNl90bmxfZW5jYXBfc2V0dXBgLCBhbHRob3VnaCB0aGUgY29yZSBmaXggbGllcyB3aXRoaW4gdGhlIGZvcm1lci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBpcDZfdG5sX3htaXRgLiBgaXA2X3RubF9lbmNhcF9zZXR1cGAgaXMgYWxzbyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBpcDZfdG5sX2NoYW5nZWxpbmtgLCBgaXA2X3RubF9uZXdsaW5rYCwgYGlwNmdyZV9uZXdsaW5rX2NvbW1vbmAsIGFuZCBgaXA2Z3JlX2NoYW5nZWxpbmtfY29tbW9uYCwgbWFraW5nIGl0IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBlbmNhcHN1bGF0aW9uLiBNeSByZXN1bHRzIHNob3cgYSBjbGVhciBmb2N1cyBvbiBmaXhpbmcgYSBkYXRhIHJhY2Ugd2l0aGluIGBpcDZfdG5sX3htaXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcDZfdG5sX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoIChpcDZfdG5sX3htaXQpIGJ5IHJlYWRpbmcgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgaW50byBhIGxvY2FsIHZhcmlhYmxlIG9uY2UsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYmV0d2VlbiBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X3RubF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIChUT0MtVE9VKSBvbiBgdC1cdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO2AuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQ1NBTiAoZm9yIGRhdGEgcmFjZXMpIG9yIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgYnVnLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OGNhYTliYWRjZGNkNDNmMDIyN2NkOTM0MTIyYzY2NzgwNTMyMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDg6MTk6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmggYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKaW5kZXggYjk5ODA1ZWUyZmQxNC4uNmU3NmU1MGE0NDA2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaApAQCAtMTA2LDIyICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpCiAJcmV0dXJuIGhsZW47CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwNl90bmwgKnQsCiYjNDM7c3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLAogCQkJCXU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNiAqZmw2KQogewogCWNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyAqb3BzOwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKHQtJmd0O2VuY2FwLnR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpCiYjNDM7CWlmIChlLSZndDt0eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKQogCQlyZXR1cm4gMDsKIAotCWlmICh0LSZndDtlbmNhcC50eXBlICZndDs9IE1BWF9JUFRVTl9FTkNBUF9PUFMpCiYjNDM7CWlmIChlLSZndDt0eXBlICZndDs9IE1BWF9JUFRVTl9FTkNBUF9PUFMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW3QtJmd0O2VuY2FwLnR5cGVdKTsKJiM0MzsJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbZS0mZ3Q7dHlwZV0pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtidWlsZF9oZWFkZXIpKQotCQlyZXQgPSBvcHMtJmd0O2J1aWxkX2hlYWRlcihza2IsICZhbXA7dC0mZ3Q7ZW5jYXAsIHByb3RvY29sLCBmbDYpOwomIzQzOwkJcmV0ID0gb3BzLSZndDtidWlsZF9oZWFkZXIoc2tiLCBlLCBwcm90b2NvbCwgZmw2KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggZDVmZjUwYTJhYzAxNy4uNjNjNTI0YjA4MGRkNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTEwMiw2ICYjNDM7MTEwMiw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLAogCQkgX191OCBwcm90bykKIHsKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB0LSZndDtuZXQ7CiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoOwogCXN0cnVjdCBpcHY2X3RlbF90eG9wdGlvbiBvcHQ7CkBAIC0xMTA5LDEwICYjNDM7MTExMCwxMSBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjsKIAlpbnQgZXJyX2NvdW50LCBtdHU7CiAJdW5zaWduZWQgaW50IGV0aF9obGVuID0gdC0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUiA/IEVUSF9ITEVOIDogMDsKLQl1bnNpZ25lZCBpbnQgcHNoX2hsZW4gPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHQtJmd0O2VuY2FwX2hsZW47Ci0JdW5zaWduZWQgaW50IG1heF9oZWFkcm9vbSA9IHBzaF9obGVuOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tOwogCV9fYmUxNiBwYXlsb2FkX3Byb3RvY29sOwogCWJvb2wgdXNlX2NhY2hlID0gZmFsc2U7CiYjNDM7CXVuc2lnbmVkIGludCBwc2hfaGxlbjsKJiM0MzsJaW50IGVuY2FwX2hsZW47CiAJdTggaG9wX2xpbWl0OwogCWludCBlcnIgPSAtMTsKIApAQCAtMTIwMiw2ICYjNDM7MTIwNCwxNSBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCwKIAkJCQkgICAgIHQtJmd0O3Bhcm1zLm5hbWUpOwogCQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKIAl9CiYjNDM7CiYjNDM7CS8qIENhbiB0ZWFyLCBidXQgaGxlbiBhbmQgYnVpbGRfaGVhZGVyKCkgdXNlIHRoZSBzYW1lIHNuYXBzaG90LiAqLwomIzQzOwlpcGVuY2FwID0gZGF0YV9yYWNlKHQtJmd0O2VuY2FwKTsKJiM0MzsJZW5jYXBfaGxlbiA9IGlwNl9lbmNhcF9obGVuKCZhbXA7aXBlbmNhcCk7CiYjNDM7CWlmICh1bmxpa2VseShlbmNhcF9obGVuICZsdDsgMCkpCiYjNDM7CQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKJiM0MzsJcHNoX2hsZW4gPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IGVuY2FwX2hsZW47CiYjNDM7CW1heF9oZWFkcm9vbSA9IHBzaF9obGVuOwomIzQzOwogCW10dSA9IGRzdDZfbXR1KGRzdCkgLSBldGhfaGxlbiAtIHBzaF9obGVuIC0gdC0mZ3Q7dHVuX2hsZW47CiAJaWYgKGVuY2FwX2xpbWl0ICZndDs9IDApIHsKIAkJbWF4X2hlYWRyb29tICYjNDM7PSA4OwpAQCAtMTI0MCw3ICYjNDM7MTI1MSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLAogCQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKIAogCWlmICh0LSZndDtwYXJtcy5jb2xsZWN0X21kKSB7Ci0JCWlmICh0LSZndDtlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKQomIzQzOwkJaWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSkKIAkJCWdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlOwogCX0gZWxzZSB7CiAJCWlmICh1c2VfY2FjaGUgJmFtcDsmYW1wOyBuZHN0KQpAQCAtMTI2NCw3ICYjNDM7MTI3NSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLAogCQkJJiM0MzsgZHN0LSZndDtoZWFkZXJfbGVuICYjNDM7IHQtJmd0O2hsZW47CiAJaXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7CiAKLQllcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgdCwgJmFtcDtwcm90bywgZmw2KTsKJiM0MzsJZXJyID0gaXA2X3RubF9lbmNhcChza2IsICZhbXA7aXBlbmNhcCwgJmFtcDtwcm90bywgZmw2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgYSBEYXRhIFJhY2UgaW4gSVAgVHVubmVsIEVuY2Fwc3VsYXRpb24qKgoKT2theSwgc28gdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBoYW5kbGUgZW5jYXBzdWxhdGlvbiB3aXRoaW4gYGlwNl90bmxfZW5jYXBgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBkaXJlY3RseSB1c2luZyBgc3RydWN0IGlwNl90bmwgKnRgIHRvIGEgbW9yZSBnZW5lcmljIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmaXhpbmcgYSBkYXRhIHJhY2UgaXNzdWUuCgpTcGVjaWZpY2FsbHksIGluIGBpcDZfdG5sX3htaXRgLCB3ZSYjMzk7cmUgbm93IHJlYWRpbmcgYHQtJmd0O2VuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgY2FsbGVkIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB3ZSB3YW50IHRvIHByZXZlbnQgYSBzY2VuYXJpbyB3aGVyZSBgdC0mZ3Q7ZW5jYXBgIGlzIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgd2hpY2ggY291bGQgbGVhZCB0byBpbmNvbnNpc3RlbnQgdmFsdWVzIGJlaW5nIHVzZWQgZm9yIHRoaW5ncyBsaWtlIGBobGVuYCBhbmQgY2FsbHMgdG8gYGJ1aWxkX2hlYWRlcigpYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gQXZvaWRpbmcgcmFjZSBjb25kaXRpb25zIGxpa2UgdGhhdCBpcyBjcml0aWNhbCBmb3IgcGFja2V0IGludGVncml0eSBhbmQgY29uc2lzdGVudCBiZWhhdmlvci4KCkJ1dOKApiB3YWl0IGEgc2Vjb25kLiBUaGF0IGBpcGVuY2FwYCB2YXJpYWJsZeKApiBpdCYjMzk7cyBkZWNsYXJlZCByaWdodCB0aGVyZSBvbiB0aGUgc3RhY2s6IGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7YC4gQW5kIGl0JiMzOTtzIGluaXRpYWxpemVkIHdpdGggYGlwZW5jYXAgPSBkYXRhX3JhY2UodC0mZ3Q7ZW5jYXApO2AuIE5vdywgSSYjMzk7bSB0aGlua2luZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNuZWFrIGluIGhlcmU/IFdlJiMzOTtyZSBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiBgdC0mZ3Q7ZW5jYXBgIGludG8gYSBsb2NhbCB2YXJpYWJsZS4gYHQtJmd0O2VuY2FwYCAqc2hvdWxkKiBiZSBhIHByb3Blcmx5IGluaXRpYWxpemVkIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBJIGJldHRlciBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IHJ1bm5pbmcgaW50byBhbnkgdW5kZWZpbmVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9Njc9c3RydWN0IGlwX3R1bm5lbF9rZXkge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC04OC1cbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo4OTpzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIHtcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC05MC1cdHUxNlx0XHRcdHR5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgZnVsbCBkZWZpbml0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG1lbWJlcnMsIHRoZWlyIHR5cGVzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdmFyaW91cyBlbmNhcHN1bGF0aW9uIG1ldGhvZHMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBwcm90b2NvbHMg4oCTIEdSRSwgSVBJUCwgVlhMQU4sIEdlbmV2ZSwgZXRjLiDigJMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBwYWNrZXQgcHJvY2Vzc2luZywgcGFydGljdWxhcmx5IHRoZSBlbmNhcC9kZWNhcCBvcGVyYXRpb25zLCBhbmQgd2hhdCB0aGUgdmFyaW91cyBmbGFncyBhbmQgb3B0aW9ucyBhY3R1YWxseSBzaWduaWZ5IHdpdGhpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgbnV0cyBhbmQgYm9sdHMuIExldCYjMzk7cyBnZXQgdG8gdGhlIHNvdXJjZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODk6XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIHtcbiAgOTA6XHRcdHUxNlx0XHRcdHR5cGU7XG4gIDkxOlx0XHR1MTZcdFx0XHRmbGFncztcbiAgOTI6XHRcdF9fYmUxNlx0XHRcdHNwb3J0O1xuICA5MzpcdFx0X19iZTE2XHRcdFx0ZHBvcnQ7XG4gIDk0Olx0fTtcbiAgOTU6XHRcbiAgOTY6XHQvKiBGbGFncyBmb3IgaXBfdHVubmVsX2luZm8gbW9kZS4gKi9cbiAgOTc6XHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX1RYXHQweDAxXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXG4gIDk4Olx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19JUFY2XHQweDAyXHQvKiBrZXkgY29udGFpbnMgSVB2NiBhZGRyZXNzZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1NAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA1NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgYWltcyB0byBmaXggYSBwb3RlbnRpYWwgZGF0YSByYWNlIHdpdGggYHQtJmd0O2VuY2FwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgdGlueSBzdHJ1Y3R1cmUsIGp1c3QgOCBieXRlcywgYW5kIGNvcGllZCBieSB2YWx1ZS4gVGhlIGNvZGUgZG9lcyBgaXBlbmNhcCA9IGRhdGFfcmFjZSh0LSZndDtlbmNhcCk7YCB3aGljaCBtZWFucyBhIGNvbXBsZXRlIGNvcHkuIFNpbmNlIGB0LSZndDtlbmNhcGAgY29tZXMgZnJvbSBgc3RydWN0IGlwNl90bmxgLCB3aGljaCBpcyBuZXRfZGV2aWNlLXJlbGF0ZWQsIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBndWFyYW50ZWVkLgoKRXZlbiBpZiB0aGVyZSAqd2VyZSogcGFkZGluZyAod2hpY2ggSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGVyZSBpc24mIzM5O3Q7IGl0JiMzOTtzIGEgdGlnaHQgMiYjNDM7MiYjNDM7MiYjNDM7MiBsYXlvdXQpLCB3ZSYjMzk7cmUgb25seSB1c2luZyBgaXBlbmNhcGAgaW50ZXJuYWxseSBpbiBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAuICBgaXA2X3RubF9lbmNhcGAgcGFzc2VzIGEgcG9pbnRlciB0byB0aGUgY29waWVkIGBpcGVuY2FwYCB0byBgb3BzLSZndDtidWlsZF9oZWFkZXJgLiAgU28sIGlzIHRoZXJlIGEgY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdCB0byB1c2VyIHNwYWNlPyBOb3BlLiBUaGUgZW50aXJlIGBpcGVuY2FwYCBzdHJ1Y3R1cmUgaXMgcG9wdWxhdGVkIGJ5IHRoZSBzdHJ1Y3QgYXNzaWdubWVudC4gIFRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlIGlzIHplcm8uCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgY2xhc3NpYyBUT0MtVE9VIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHdoZXJlIGEgc25hcHNob3Qgb2YgdGhlIHZhbHVlIGlzIHRha2VuIHRvIG1haW50YWluIGNvbnNpc3RlbmN5LiBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSB3aGVyZSB0aGUgdmFsdWUgY291bGQgY2hhbmdlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCB1c2FnZS4gS0FTQU4vS0NTQU4gd291bGQgYmUgdGhlIGNvcnJlY3QgdG9vbCBmb3IgdGhpcyBzb3J0IG9mIGlzc3VlLCBidXQgbm90IEtNU0FOLCB3aGljaCBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIGBpcGVuY2FwYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3RydWN0IGFzc2lnbm1lbnQuClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIChUT0MtVE9VKSBvbiBgdC1cdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO2AuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQ1NBTiAoZm9yIGRhdGEgcmFjZXMpIG9yIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgYnVnLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVx1MDAzZWVuY2FwYCBieSB0YWtpbmcgYSBzbmFwc2hvdCBvZiBpdCBpbnRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGlwZW5jYXBgIGFuZCB1c2luZyB0aGF0IHNuYXBzaG90IGZvciBib3RoIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGUgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgc21hbGwgOC1ieXRlIHN0cnVjdHVyZSB3aXRoIG5vIHBhZGRpbmcsIGFuZCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cdTAwM2VlbmNhcCk7YC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtDU0FOIChmb3IgZGF0YSByYWNlcykgb3IgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBidWcuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjE5OjUzLjUxMDQ1OTMzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY0Njc0MzYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVxcdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXFx1MDAzZWVuY2FwKTtgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0NTQU4gKGZvciBkYXRhIHJhY2VzKSBvciBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGJ1Zy4gS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBpbiB0aGUgSVB2NiB0dW5uZWwgdHJhbnNtaXNzaW9uIHBhdGggKGlwNl90bmxfeG1pdCkgYnkgcmVhZGluZyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgb25jZSwgZW5zdXJpbmcgY29uc2lzdGVudCBzdGF0ZSBiZXR3ZWVuIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MTk6NTMuNTEwNDY0MDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5OTk1NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwODoxOTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmggYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmhcXG5pbmRleCBiOTk4MDVlZTJmZDE0Li42ZTc2ZTUwYTQ0MDZjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxcbkBAIC0xMDYsMjIgKzEwNiwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBpcDZfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxcbiBcXHRyZXR1cm4gaGxlbjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXA2X3RubCAqdCxcXG4rc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbiBcXHRcXHRcXHRcXHR1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTYgKmZsNilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcztcXG4gXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAodC1cXHUwMDNlZW5jYXAudHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4rXFx0aWYgKGUtXFx1MDAzZXR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHQtXFx1MDAzZWVuY2FwLnR5cGUgXFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcXG4rXFx0aWYgKGUtXFx1MDAzZXR5cGUgXFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW3QtXFx1MDAzZWVuY2FwLnR5cGVdKTtcXG4rXFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbZS1cXHUwMDNldHlwZV0pO1xcbiBcXHRpZiAobGlrZWx5KG9wcyBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWJ1aWxkX2hlYWRlcikpXFxuLVxcdFxcdHJldCA9IG9wcy1cXHUwMDNlYnVpbGRfaGVhZGVyKHNrYiwgXFx1MDAyNnQtXFx1MDAzZWVuY2FwLCBwcm90b2NvbCwgZmw2KTtcXG4rXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VidWlsZF9oZWFkZXIoc2tiLCBlLCBwcm90b2NvbCwgZmw2KTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBkNWZmNTBhMmFjMDE3Li42M2M1MjRiMDgwZGQ2IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xcbkBAIC0xMTAyLDYgKzExMDIsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcXG4gXFx0XFx0IF9fdTggcHJvdG8pXFxuIHtcXG4gXFx0c3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHQtXFx1MDAzZW5ldDtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwdjZoO1xcbiBcXHRzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0O1xcbkBAIC0xMTA5LDEwICsxMTEwLDExIEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjtcXG4gXFx0aW50IGVycl9jb3VudCwgbXR1O1xcbiBcXHR1bnNpZ25lZCBpbnQgZXRoX2hsZW4gPSB0LVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gRVRIX0hMRU4gOiAwO1xcbi1cXHR1bnNpZ25lZCBpbnQgcHNoX2hsZW4gPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgdC1cXHUwMDNlZW5jYXBfaGxlbjtcXG4tXFx0dW5zaWduZWQgaW50IG1heF9oZWFkcm9vbSA9IHBzaF9obGVuO1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1xcbiBcXHRfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDtcXG4gXFx0Ym9vbCB1c2VfY2FjaGUgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHBzaF9obGVuO1xcbitcXHRpbnQgZW5jYXBfaGxlbjtcXG4gXFx0dTggaG9wX2xpbWl0O1xcbiBcXHRpbnQgZXJyID0gLTE7XFxuIFxcbkBAIC0xMjAyLDYgKzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgdC1cXHUwMDNlcGFybXMubmFtZSk7XFxuIFxcdFxcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBDYW4gdGVhciwgYnV0IGhsZW4gYW5kIGJ1aWxkX2hlYWRlcigpIHVzZSB0aGUgc2FtZSBzbmFwc2hvdC4gKi9cXG4rXFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0LVxcdTAwM2VlbmNhcCk7XFxuK1xcdGVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbihcXHUwMDI2aXBlbmNhcCk7XFxuK1xcdGlmICh1bmxpa2VseShlbmNhcF9obGVuIFxcdTAwM2MgMCkpXFxuK1xcdFxcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xcbitcXHRwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBlbmNhcF9obGVuO1xcbitcXHRtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcXG4rXFxuIFxcdG10dSA9IGRzdDZfbXR1KGRzdCkgLSBldGhfaGxlbiAtIHBzaF9obGVuIC0gdC1cXHUwMDNldHVuX2hsZW47XFxuIFxcdGlmIChlbmNhcF9saW1pdCBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdG1heF9oZWFkcm9vbSArPSA4O1xcbkBAIC0xMjQwLDcgKzEyNTEsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcXG4gXFx0XFx0Z290byB0eF9lcnJfZHN0X3JlbGVhc2U7XFxuIFxcbiBcXHRpZiAodC1cXHUwMDNlcGFybXMuY29sbGVjdF9tZCkge1xcbi1cXHRcXHRpZiAodC1cXHUwMDNlZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4rXFx0XFx0aWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4gXFx0XFx0XFx0Z290byB0eF9lcnJfZHN0X3JlbGVhc2U7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmICh1c2VfY2FjaGUgXFx1MDAyNlxcdTAwMjYgbmRzdClcXG5AQCAtMTI2NCw3ICsxMjc1LDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuIFxcdFxcdFxcdCsgZHN0LVxcdTAwM2VoZWFkZXJfbGVuICsgdC1cXHUwMDNlaGxlbjtcXG4gXFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxuIFxcbi1cXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgdCwgXFx1MDAyNnByb3RvLCBmbDYpO1xcbitcXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgXFx1MDAyNmlwZW5jYXAsIFxcdTAwMjZwcm90bywgZmw2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjE5OjU0Ljg5MTE0NDY4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5Nzg1MTk5NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X3RubF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoIChpcDZfdG5sX3htaXQpIGJ5IHJlYWRpbmcgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgaW50byBhIGxvY2FsIHZhcmlhYmxlIG9uY2UsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYmV0d2VlbiBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4Y2FhOWJhZGNkY2Q0M2YwMjI3Y2Q5MzQxMjJjNjY3ODA1MzIwOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwODoxOTo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuaW5kZXggYjk5ODA1ZWUyZmQxNC4uNmU3NmU1MGE0NDA2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG5AQCAtMTA2LDIyICsxMDYsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgaXA2X2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbiBcdHJldHVybiBobGVuO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBpcDZfdG5sX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcDZfdG5sICp0LFxuK3N0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbiBcdFx0XHRcdHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNiAqZmw2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyAqb3BzO1xuIFx0aW50IHJldCA9IC1FSU5WQUw7XG4gXG4tXHRpZiAodC1cdTAwM2VlbmNhcC50eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKVxuK1x0aWYgKGUtXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodC1cdTAwM2VlbmNhcC50eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbitcdGlmIChlLVx1MDAzZXR5cGUgXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcDZ0dW5fZW5jYXBzW3QtXHUwMDNlZW5jYXAudHlwZV0pO1xuK1x0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbZS1cdTAwM2V0eXBlXSk7XG4gXHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcikpXG4tXHRcdHJldCA9IG9wcy1cdTAwM2VidWlsZF9oZWFkZXIoc2tiLCBcdTAwMjZ0LVx1MDAzZWVuY2FwLCBwcm90b2NvbCwgZmw2KTtcbitcdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIGUsIHByb3RvY29sLCBmbDYpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggZDVmZjUwYTJhYzAxNy4uNjNjNTI0YjA4MGRkNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5AQCAtMTEwMiw2ICsxMTAyLDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdCBfX3U4IHByb3RvKVxuIHtcbiBcdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHQtXHUwMDNlbmV0O1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwdjZoO1xuIFx0c3RydWN0IGlwdjZfdGVsX3R4b3B0aW9uIG9wdDtcbkBAIC0xMTA5LDEwICsxMTEwLDExIEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7XG4gXHRpbnQgZXJyX2NvdW50LCBtdHU7XG4gXHR1bnNpZ25lZCBpbnQgZXRoX2hsZW4gPSB0LVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IEVUSF9ITEVOIDogMDtcbi1cdHVuc2lnbmVkIGludCBwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyB0LVx1MDAzZWVuY2FwX2hsZW47XG4tXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tID0gcHNoX2hsZW47XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1xuIFx0X19iZTE2IHBheWxvYWRfcHJvdG9jb2w7XG4gXHRib29sIHVzZV9jYWNoZSA9IGZhbHNlO1xuK1x0dW5zaWduZWQgaW50IHBzaF9obGVuO1xuK1x0aW50IGVuY2FwX2hsZW47XG4gXHR1OCBob3BfbGltaXQ7XG4gXHRpbnQgZXJyID0gLTE7XG4gXG5AQCAtMTIwMiw2ICsxMjA0LDE1IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHRcdFx0ICAgICB0LVx1MDAzZXBhcm1zLm5hbWUpO1xuIFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcdH1cbitcbitcdC8qIENhbiB0ZWFyLCBidXQgaGxlbiBhbmQgYnVpbGRfaGVhZGVyKCkgdXNlIHRoZSBzYW1lIHNuYXBzaG90LiAqL1xuK1x0aXBlbmNhcCA9IGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKTtcbitcdGVuY2FwX2hsZW4gPSBpcDZfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbitcdGlmICh1bmxpa2VseShlbmNhcF9obGVuIFx1MDAzYyAwKSlcbitcdFx0Z290byB0eF9lcnJfZHN0X3JlbGVhc2U7XG4rXHRwc2hfaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBlbmNhcF9obGVuO1xuK1x0bWF4X2hlYWRyb29tID0gcHNoX2hsZW47XG4rXG4gXHRtdHUgPSBkc3Q2X210dShkc3QpIC0gZXRoX2hsZW4gLSBwc2hfaGxlbiAtIHQtXHUwMDNldHVuX2hsZW47XG4gXHRpZiAoZW5jYXBfbGltaXQgXHUwMDNlPSAwKSB7XG4gXHRcdG1heF9oZWFkcm9vbSArPSA4O1xuQEAgLTEyNDAsNyArMTI1MSw3IEBAIGludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuIFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcbiBcdGlmICh0LVx1MDAzZXBhcm1zLmNvbGxlY3RfbWQpIHtcbi1cdFx0aWYgKHQtXHUwMDNlZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbitcdFx0aWYgKGlwZW5jYXAudHlwZSAhPSBUVU5ORUxfRU5DQVBfTk9ORSlcbiBcdFx0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICh1c2VfY2FjaGUgXHUwMDI2XHUwMDI2IG5kc3QpXG5AQCAtMTI2NCw3ICsxMjc1LDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdFx0KyBkc3QtXHUwMDNlaGVhZGVyX2xlbiArIHQtXHUwMDNlaGxlbjtcbiBcdGlwX3R1bm5lbF9hZGpfaGVhZHJvb20oZGV2LCBtYXhfaGVhZHJvb20pO1xuIFxuLVx0ZXJyID0gaXA2X3RubF9lbmNhcChza2IsIHQsIFx1MDAyNnByb3RvLCBmbDYpO1xuK1x0ZXJyID0gaXA2X3RubF9lbmNhcChza2IsIFx1MDAyNmlwZW5jYXAsIFx1MDAyNnByb3RvLCBmbDYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjE5OjU0Ljg5MTE0NzMyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODMyNDc1OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIGEgcGF0Y2ggZGVzaWduZWQgZm9yIGZ1enppbmcuIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAgYW5kIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgLiBUaGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBpcyB0aGF0IGBpcDZfdG5sX2VuY2FwYCBub3cgdGFrZXMgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaXA2X3RubCAqdGAuIE1vcmUgaW50ZXJlc3RpbmdseSwgaW4gYGlwNl90bmxfeG1pdGAsIHRoZXkncmUgdXNpbmcgYGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKWAgdG8gc2FmZWx5IHJlYWQgYHQtXHUwMDNlZW5jYXBgIGludG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgdXNpbmcgaXQgZm9yIHNldmVyYWwgY2FsbHMuIFJpZ2h0LCBmaXhpbmcgYSBkYXRhIHJhY2Ug4oCTIGEgdmVyeSB2YWxpZCByZWFzb24gdG8gZnV6eiB0aGlzLiBJbmNvbnNpc3RlbnQgc3RhdGUgZHVlIHRvIHJhY2UgY29uZGl0aW9ucyBjYW4gYmUgbmFzdHkgYW5kIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuXG5cbk5vdywgbGV0J3MgZ2V0IGZvY3VzZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzIGFuZCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBpcDZfdG5sX3htaXRgLiBUaGUgY29kZSBpcyB3aXRoaW4gdGhlIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIG1vZHVsZS4gQSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBsaWtlbHkgcmV2ZWFscyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbi4uLnl1cCwgYElQVjZfVFVOTkVMYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGBuZXQvaXB2Ni9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyB3aWxsIGhlbHAgZW5zdXJlIG15IGZ1enppbmcgY29uZmlndXJhdGlvbiB0YXJnZXRzIHRoZSByaWdodCBidWlsZCBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MjA6MTAuNzIzNjI1MTU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTUzNDU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3R1bm5lbC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19JUFY2X1NJVCkgKz0gc2l0Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIwOjEyLjAxODk3NTMxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTY0NTUzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIElQdjYgVHVubmVsIERhdGEgUmFjZSBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYCBhbmQgYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IGBpcDZfdG5sX2VuY2FwYCBpcyBoYW5kbGVkLiBJdCdzIG5vdyB0YWtpbmcgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBgc3RydWN0IGlwNl90bmwgKnRgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGlzIGlzIGFib3V0IGltcHJvdmluZyBlbmNhcHN1bGF0aW9uIG1hbmFnZW1lbnQuXG5cblNwZWNpZmljYWxseSwgaW4gYGlwNl90bmxfeG1pdGAsIEkgc2VlIHRoYXQgYHQtXHUwMDNlZW5jYXBgIGlzIGJlaW5nIGFjY2Vzc2VkIHVzaW5nIGBkYXRhX3JhY2UoKWAuIEFoLCB0aGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbjsgaXQncyBhZGRyZXNzaW5nIGEgZGF0YSByYWNlLiBUaGUgY29kZSBpcyBwdWxsaW5nIGB0LVx1MDAzZWVuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGBpcGVuY2FwYCwgdXNpbmcgdGhhdCBmb3IgdGhlIGBpcDZfZW5jYXBfaGxlbmAgYW5kIGBpcDZfdG5sX2VuY2FwYCBjYWxscy4gVGhhdCdzIGEgdGV4dGJvb2sgYXBwcm9hY2ggdG8gZml4aW5nIGEgcmFjZSBjb25kaXRpb24gb24gYSBzaGFyZWQgc3RydWN0dXJlLiBCeSBjb3B5aW5nIGl0IHRvIGEgbG9jYWwgdmFyaWFibGUgeW91IGVuc3VyZSB0aGF0IHlvdXIgZnVuY3Rpb24gaXMgYWN0aW5nIG9uIGEgY29uc3RhbnQgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQncyBhIGRhdGEgcmFjZSBmaXguXG5cblRoZSBmYWN0IHRoYXQgYGlwNl90bmxfeG1pdGAgaXMgZXhwb3J0ZWQgdGVsbHMgbWUgaXQncyB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3IgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBJUHY2IHR1bm5lbCBkcml2ZXIsIGxpa2VseSBtYWtpbmcgdGhpcyBmaXggcXVpdGUgaW1wb3J0YW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgdG8gY29uZmlybSB0aGF0IGBpcDZfdG5sX3htaXRgIHJlYWxseSBpcyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVscywgYW5kIHRoYXQgdGhlIHR1bm5lbCBjb25maWd1cmF0aW9uIGlzIGluZGVlZCB0aWVkIHRvIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVuLCBJJ2xsIHZlcmlmeSBpZiBgaXA2X3RubF94bWl0YCBpcyBhY3R1YWxseSBleHBvcnRlZC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MjA6MjcuMTgzNTMwOTM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODg4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmlwNl90bmxfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfdHVubmVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jPTEwNDI9aW50IGlwNl90bmxfeG1pdF9jdGwoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTA3Ny19XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEwNzg6RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF94bWl0X2N0bCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEwNzktXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTEwMD1pbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMzA0LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTMwNTpFWFBPUlRfU1lNQk9MKGlwNl90bmxfeG1pdCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEzMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIwOjI3LjI1MjQyMzA0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MDIwMzEwMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERhdGEgUmFjZSBGaXggaW4gSVB2NiBUdW5uZWxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgaXA2X3RubF94bWl0YCBpbiBgbmV0L2lwdjYvaXA2X3R1bm5lbC5jYCBhbmQgYWxzbyB0b3VjaGVzIGBpcDZfdG5sX2VuY2FwYCBpbiBgaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgYWJvdXQgaG93IHRoZSBgdC1cdTAwM2VlbmNhcGAgbWVtYmVyIGlzIGFjY2Vzc2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgaW50cm9kdWNpbmcgYGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKWAgdG8gcmVhZCB0aGF0IHZhbHVlIGludG8gYSBsb2NhbCB2YXJpYWJsZSAoYGlwZW5jYXBgKS4gVGhlIGdvYWwgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgYSBkYXRhIHJhY2UsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhhdCBgdC1cdTAwM2VlbmNhcGAgY2FuIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4OyBpdCdzIGEgY3JpdGljYWwgY2hhbmdlIHRvIHByb3RlY3QgYWdhaW5zdCBhIGNvbmN1cnJlbmN5IGJ1Zy4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBgQ09ORklHX0lQVjZfVFVOTkVMYCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuXG5cbk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gTGV0J3MgbG9vayBhdCB3aG8gY2FsbHMgYGlwNl90bmxfeG1pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgYSBjZW50cmFsIGVudHJ5IHBvaW50IG9yIGlmIGl0J3MgYmVpbmcgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3RhY2suIExvb2tzIGxpa2UgaXQncyBleHBvcnRlZCwgc28gaXQgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZS4gVGhhdCBjb25maXJtcyBpdCdzIGFuIHhtaXQgZnVuY3Rpb24gZm9yIElQdjYgdHVubmVsczsgbWFrZXMgc2Vuc2UuIEkgd2lsbCBpbnZlc3RpZ2F0ZSBjYWxsZXJzIG9mIGBpcDZfdG5sX2VuY2FwYCwgYXMgaXQncyB0aGUgb3RoZXIgZnVuY3Rpb24gaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMDo0My4yNzI3MzUwODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3MDU0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3RubF9lbmNhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZm91Ni5jPTg5PXN0YXRpYyBpbnQgZ3VlNl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTU2LVxcbm5ldC9pcHY2L2ZvdTYuYzoxNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyBmb3VfaXA2dHVuX29wcyA9IHtcXG5uZXQvaXB2Ni9mb3U2LmMtMTU4LVxcdC5lbmNhcF9obGVuID0gZm91X2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTYyLVxcbm5ldC9pcHY2L2ZvdTYuYzoxNjM6c3RhdGljIGNvbnN0IHN0cnVjdCBpcDZfdG5sX2VuY2FwX29wcyBndWVfaXA2dHVuX29wcyA9IHtcXG5uZXQvaXB2Ni9mb3U2LmMtMTY0LVxcdC5lbmNhcF9obGVuID0gZ3VlX2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTY4LVxcbm5ldC9pcHY2L2ZvdTYuYzoxNjk6c3RhdGljIGludCBpcDZfdG5sX2VuY2FwX2FkZF9mb3Vfb3BzKHZvaWQpXFxubmV0L2lwdjYvZm91Ni5jLTE3MC17XFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMTcyLVxcbm5ldC9pcHY2L2ZvdTYuYzoxNzM6XFx0cmV0ID0gaXA2X3RubF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZmb3VfaXA2dHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XFxubmV0L2lwdjYvZm91Ni5jLTE3NC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2lwdjYvZm91Ni5jLTE3OC1cXG5uZXQvaXB2Ni9mb3U2LmM6MTc5OlxcdHJldCA9IGlwNl90bmxfZW5jYXBfYWRkX29wcyhcXHUwMDI2Z3VlX2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY2L2ZvdTYuYy0xODAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5uZXQvaXB2Ni9mb3U2LmMtMTgxLVxcdFxcdHByX2VycihcXFwiY2FuJ3QgYWRkIGd1ZTYgb3BzXFxcXG5cXFwiKTtcXG5uZXQvaXB2Ni9mb3U2LmM6MTgyOlxcdFxcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Zm91X2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xcbm5ldC9pcHY2L2ZvdTYuYy0xODMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9pcHY2L2ZvdTYuYy0xODgtXFxubmV0L2lwdjYvZm91Ni5jOjE4OTpzdGF0aWMgdm9pZCBpcDZfdG5sX2VuY2FwX2RlbF9mb3Vfb3BzKHZvaWQpXFxubmV0L2lwdjYvZm91Ni5jLTE5MC17XFxubmV0L2lwdjYvZm91Ni5jOjE5MTpcXHRpcDZfdG5sX2VuY2FwX2RlbF9vcHMoXFx1MDAyNmZvdV9pcDZ0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcXG5uZXQvaXB2Ni9mb3U2LmM6MTkyOlxcdGlwNl90bmxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Z3VlX2lwNnR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY2L2ZvdTYuYy0xOTMtfVxcbi0tXFxubmV0L2lwdjYvZm91Ni5jLTE5Ni1cXG5uZXQvaXB2Ni9mb3U2LmM6MTk3OnN0YXRpYyBpbnQgaXA2X3RubF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY2L2ZvdTYuYy0xOTgte1xcbi0tXFxubmV0L2lwdjYvZm91Ni5jLTIwMS1cXG5uZXQvaXB2Ni9mb3U2LmM6MjAyOnN0YXRpYyB2b2lkIGlwNl90bmxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcXG5uZXQvaXB2Ni9mb3U2LmMtMjAzLXtcXG4tLVxcbm5ldC9pcHY2L2ZvdTYuYz0yMDg9c3RhdGljIGludCBfX2luaXQgZm91Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmMtMjExLVxcbm5ldC9pcHY2L2ZvdTYuYzoyMTI6XFx0cmV0ID0gaXA2X3RubF9lbmNhcF9hZGRfZm91X29wcygpO1xcbm5ldC9pcHY2L2ZvdTYuYy0yMTMtXFxuLS1cXG5uZXQvaXB2Ni9mb3U2LmM9MjE3PXN0YXRpYyB2b2lkIF9fZXhpdCBmb3U2X2Zpbmkodm9pZClcXG5uZXQvaXB2Ni9mb3U2LmMtMjE4LXtcXG5uZXQvaXB2Ni9mb3U2LmM6MjE5OlxcdGlwNl90bmxfZW5jYXBfZGVsX2ZvdV9vcHMoKTtcXG5uZXQvaXB2Ni9mb3U2LmMtMjIwLX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xOTQwPXN0YXRpYyBpbnQgaXA2Z3JlX25ld2xpbmtfY29tbW9uKHN0cnVjdCBuZXQgKmxpbmtfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NTAtXFx0aWYgKGlwNmdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFxcdTAwMjZpcGVuY2FwKSkge1xcbm5ldC9pcHY2L2lwNl9ncmUuYzoxOTUxOlxcdFxcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKG50LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjYvaXA2X2dyZS5jLTE5NTItXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjAwNj1pcDZncmVfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDE4LVxcdGlmIChpcDZncmVfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjAxOTpcXHRcXHRpbnQgZXJyID0gaXA2X3RubF9lbmNhcF9zZXR1cChudCwgXFx1MDAyNmlwZW5jYXApO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDIwLVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3Ny1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTI3ODpcXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgXFx1MDAyNmlwZW5jYXAsIFxcdTAwMjZwcm90bywgZmw2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTI3OS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3OTU9RVhQT1JUX1NZTUJPTChpcDZfdG5sX2dldF9pZmxpbmspO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzk2LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzk3OmludCBpcDZfdG5sX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHMsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3OTgtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDItXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MDM6XFx0cmV0dXJuICFjbXB4Y2hnKChjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKiopXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDQtXFx0XFx0XFx0XFx1MDAyNmlwNnR1bl9lbmNhcHNbbnVtXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODA2LX1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgwNzpFWFBPUlRfU1lNQk9MKGlwNl90bmxfZW5jYXBfYWRkX29wcyk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MDgtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4MDk6aW50IGlwNl90bmxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXA2X3RubF9lbmNhcF9vcHMgKm9wcyxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgxMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBudW0pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgxNi1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgxNzpcXHRyZXQgPSAoY21weGNoZygoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICoqKVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODE4LVxcdFxcdCAgICAgICBcXHUwMDI2aXA2dHVuX2VuY2Fwc1tudW1dLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MjQtfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODI1OkVYUE9SVF9TWU1CT0woaXA2X3RubF9lbmNhcF9kZWxfb3BzKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgyNi1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgyNzppbnQgaXA2X3RubF9lbmNhcF9zZXR1cChzdHJ1Y3QgaXA2X3RubCAqdCxcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgyOC1cXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICppcGVuY2FwKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDctfVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxODQ4OkVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfZW5jYXBfc2V0dXApO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ5LVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIwNzk9c3RhdGljIGludCBpcDZfdG5sX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMDk2LVxcdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MjA5NzpcXHRcXHRlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKG50LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIwOTgtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MjEyMD1zdGF0aWMgaW50IGlwNl90bmxfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxNTYtXFx0aWYgKGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFxcdTAwMjZpcGVuY2FwKSkge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTU3OlxcdFxcdGludCBlcnIgPSBpcDZfdG5sX2VuY2FwX3NldHVwKHQsIFxcdTAwMjZpcGVuY2FwKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjE1OC1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTYwMD1zdGF0aWMgaW50IF9fdWRwNl9saWJfZXJyX2VuY2FwX25vX3NrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy02MDgtXFx0XFx0XFx0ICAgICAgIHU4IHR5cGUsIHU4IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKTtcXG5uZXQvaXB2Ni91ZHAuYzo2MDk6XFx0XFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICplbmNhcDtcXG5uZXQvaXB2Ni91ZHAuYy02MTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIwOjQzLjMzODQ0MjI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMjg1NDk0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo3MjY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMDo1NS42NjY5OTQwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4OTUwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X2VuY2FwX2hsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMTAwPWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTEyMDktXFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0LVxcdTAwM2VlbmNhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjEyMTA6XFx0ZW5jYXBfaGxlbiA9IGlwNl9lbmNhcF9obGVuKFxcdTAwMjZpcGVuY2FwKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTIxMS1cXHRpZiAodW5saWtlbHkoZW5jYXBfaGxlbiBcXHUwMDNjIDApKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Mjc9aW50IGlwNl90bmxfZW5jYXBfc2V0dXAoc3RydWN0IGlwNl90bmwgKnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTgzMy1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTgzNDpcXHRobGVuID0gaXA2X2VuY2FwX2hsZW4oaXBlbmNhcCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4MzUtXFx0aWYgKGhsZW4gXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMDo1NS43MTM4OTE1MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg3NjYzNDI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIElQdjYgVHVubmVsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyB0b3VjaGluZyBjb3JlIElQdjYgdHVubmVsaW5nIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGBpcDZfdG5sX3htaXRgIGluIGBuZXQvaXB2Ni9pcDZfdHVubmVsLmNgIGFuZCBhbHNvIHRoZSBpbmxpbmUgZnVuY3Rpb24gYGlwNl90bmxfZW5jYXBgIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBkYXRhIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgcGFzc2luZyB0aGUgYGlwNl90bmxgIHN0cnVjdCBkaXJlY3RseSB0byBgaXA2X3RubF9lbmNhcGAsIGl0J3Mgbm93IHVzaW5nIGEgbW9yZSBnZW5lcmljIGBpcF90dW5uZWxfZW5jYXBgIHN0cnVjdC5cblxuVGhlIHJlYWwga2V5IGhlcmUgaXMgdGhlIGRhdGEgcmFjZSBmaXguIEkgc2VlIHRoZXkncmUgcmVhZGluZyBgdC1cdTAwM2VlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHVzaW5nIGl0IGluIGJvdGggYGlwNl9lbmNhcF9obGVuYCBhbmQgYGlwNl90bmxfZW5jYXBgLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSDigJMgYHQtXHUwMDNlZW5jYXBgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgYmVoYXZpb3IuIFNtYXJ0IG1vdmUsIHVzaW5nIHRoZSBsb2NhbCB2YXJpYWJsZSwgd2hpY2ggZ3VhcmFudGVlcyBjb25zaXN0ZW50IHVzZSBvZiB0aGUgYGVuY2FwYCBzdHJ1Y3R1cmUuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBsb3ctbGV2ZWwgY2hhbmdlLCBzbyBpdCdzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3b3VsZCBiZSBgaXA2X3RubF94bWl0YCBhbmQgKGFsdGhvdWdoIGlubGluZSkgYGlwNl90bmxfZW5jYXBgLiAgYGlwNl90bmxfeG1pdGAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBpdCdzIHRoZSBtYWluIHRyYW5zbWl0IGZ1bmN0aW9uIGZvciBJUHY2IHR1bm5lbHMsIHNvIGl0J3MgYSBob3QtcGF0aCBmdW5jdGlvbi4gIEl0J3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIGlwNl90dW5uZWwsIHNvIGl0J3MgY2xlYXJseSBhIGNyaXRpY2FsIHBvaW50IGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuXG5cblRoZSBwYXRjaCBmb2N1c2VzICpvbmx5KiBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBgaXA2X3RubF94bWl0YCBhbmQgYGlwNl90bmxfZW5jYXBgLiBTbywgZXZlbiB0aG91Z2ggdGhlcmUgbWlnaHQgYmUgc3VwcG9ydGluZyBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zLCB0aGVyZSdzIG5vIG5lZWQgdG8gZm9jdXMgb24gdGhlbSwgdW5sZXNzIHRoZSBpbnRlbnRpb24gaXMgdG8gY2hlY2sgY2FsbCBjaGFpbnMuIFNvLCB0aGUgZGlyZWN0IHRhcmdldHMgZm9yIGZ1enppbmcgYmVjb21lIG1vcmUgY29uY3JldGU6IGBpcDZfdG5sX3htaXRgIGFuZCwgcGVyaGFwcywgY2FyZWZ1bGx5IGNyYWZ0ZWQgdGVzdHMgaW52b2x2aW5nIHRoZSBpbmxpbmUgYGlwNl90bmxfZW5jYXBgLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhlcmNpc2UgZGlmZmVyZW50IGNvZGUgcGF0aHMgaW4gYGlwNl90bmxfeG1pdGAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gY3JlYXRpbmcgYW55IGZ1enppbmcgaGFybmVzc2VzLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgYENPTkZJR19JUFY2X1RVTk5FTGAgKHdoaWNoIGRlcGVuZHMgb24gYElQVjZgKS4gR290dGEgbWFrZSBzdXJlIHRob3NlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGZvciB0aGUgdGVzdGluZyBlbnZpcm9ubWVudC4gSSdsbCBjaGVjayBgbmV0L2lwdjYvS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpYyBvcHRpb24uIFRoZW4sIGxldCdzIGdldCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjE0LjQ4MDIzNzE1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2Njk0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1RVTk5FTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMToxNS4yNjY5MzU5ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzMzcxMzk0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGF0YSBSYWNlIEZpeCBpbiBJUHY2IFR1bm5lbCBFbmNhcHN1bGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgZnVuY3Rpb25hbGx5IGNvcnJlY3QgZml4LCBhbmQgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBpcDZfdG5sX2VuY2FwYCBhbmQgYGlwNl90bmxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl90dW5uZWwuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlci4gVGhlIGNydWNpYWwgc2hpZnQgaXMgbW9kaWZ5aW5nIGBpcDZfdG5sX2VuY2FwYCB0byBhY2NlcHQgYSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaXA2X3RubCAqdGAuIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzLlxuXG5JbiBgaXA2X3RubF94bWl0YCwgdGhlIHBhdGNoIG5vdyByZWFkcyBgdC1cdTAwM2VlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGJlZm9yZSBwYXNzaW5nIGEgcG9pbnRlciB0byB0aGlzIGxvY2FsIGNvcHkgKGBcdTAwMjZpcGVuY2FwYCkgdG8gYm90aCBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGZpeC4gQnkgaW50cm9kdWNpbmcgYSBsb2NhbCBjb3B5IGFuZCB1c2luZyBgZGF0YV9yYWNlKClgLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgdXNlZCBieSBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAgYXJlIGNvbnNpc3RlbnQsIHRodXMgcHJldmVudGluZyBhIHBvdGVudGlhbCByYWNlIHdoZXJlIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBjb3VsZCBsZWFkIHRvIGluY29uc2lzdGVudCBzdGF0ZS4gVGhlIGBkYXRhX3JhY2UoKWAgaXMgY3J1Y2lhbDsgaXQncyB3aGF0IGhhbmRsZXMgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MgYW5kIGVuc3VyZXMgZGF0YSBjb25zaXN0ZW5jeS5cblxuVGhlIGRhdGEgcmFjZSBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHdoZW4gcGFja2V0cyBhcmUgc2VudCB0aHJvdWdoIGFuIElQdjYgdHVubmVsIHdoaWxlIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGFyZSBiZWluZyBjb25jdXJyZW50bHkgbW9kaWZpZWQuIFRoZSBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBpcDZfdG5sX3htaXRgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgY2FsbGVkIGJ5IGBpcDRpcDZfdG5sX3htaXRgLCBgaXA2aXA2X3RubF94bWl0YCwgYW5kIGBhbnlfaXA2aXA2X3RubF94bWl0YC4gRGVmaW5pdGVseSByZWFjaGFibGUuIEFuZCBzaW5jZSB0aGUgY29uZmlndXJhdGlvbiBpcyBgSVBWNl9UVU5ORUxgLCB0aGF0IHJlaW5mb3JjZXMgaXQuXG5cbkl0J3MgbGlrZWx5IHdvcnRoIGZ1enppbmcgdGhlIGBpcDZfdG5sX3htaXRgIHBhdGgsIHBvdGVudGlhbGx5IGFsc28gYGlwNl90bmxfZW5jYXBfc2V0dXBgLCBhbHRob3VnaCB0aGUgY29yZSBmaXggbGllcyB3aXRoaW4gdGhlIGZvcm1lci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBpcDZfdG5sX3htaXRgLiBgaXA2X3RubF9lbmNhcF9zZXR1cGAgaXMgYWxzbyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgY2FsbGVkIGZyb20gYGlwNl90bmxfY2hhbmdlbGlua2AsIGBpcDZfdG5sX25ld2xpbmtgLCBgaXA2Z3JlX25ld2xpbmtfY29tbW9uYCwgYW5kIGBpcDZncmVfY2hhbmdlbGlua19jb21tb25gLCBtYWtpbmcgaXQgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGVuY2Fwc3VsYXRpb24uIE15IHJlc3VsdHMgc2hvdyBhIGNsZWFyIGZvY3VzIG9uIGZpeGluZyBhIGRhdGEgcmFjZSB3aXRoaW4gYGlwNl90bmxfeG1pdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTQsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjM0LjYwNDA3NzgyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMjYzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl90bmxfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGluIHRoZSBJUHY2IHR1bm5lbCB0cmFuc21pc3Npb24gcGF0aCAoaXA2X3RubF94bWl0KSBieSByZWFkaW5nIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBwYXJhbWV0ZXJzIGludG8gYSBsb2NhbCB2YXJpYWJsZSBvbmNlLCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X3RubF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgaW4gdGhlIElQdjYgdHVubmVsIHRyYW5zbWlzc2lvbiBwYXRoIChpcDZfdG5sX3htaXQpIGJ5IHJlYWRpbmcgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIHBhcmFtZXRlcnMgaW50byBhIGxvY2FsIHZhcmlhYmxlIG9uY2UsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYmV0d2VlbiBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjM0LjY3NjM0NzYwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODA4NDQ0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMTozNC42NzY3NDc3MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI0ODA0Mzk3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIChUT0MtVE9VKSBvbiBgdC1cXHUwMDNlZW5jYXBgIGJ5IHRha2luZyBhIHNuYXBzaG90IG9mIGl0IGludG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgYW5kIHVzaW5nIHRoYXQgc25hcHNob3QgZm9yIGJvdGggbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBoZWFkZXIgYnVpbGRpbmcuIFRoZSBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcGAgaXMgYSBzbWFsbCA4LWJ5dGUgc3RydWN0dXJlIHdpdGggbm8gcGFkZGluZywgYW5kIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdHJ1Y3QgYXNzaWdubWVudCBgaXBlbmNhcCA9IGRhdGFfcmFjZSh0LVxcdTAwM2VlbmNhcCk7YC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtDU0FOIChmb3IgZGF0YSByYWNlcykgb3IgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgdHlwZSBvZiBidWcuIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODhjYWE5YmFkY2RjZDQzZjAyMjdjZDkzNDEyMmM2Njc4MDUzMjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA4OjE5OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG5pbmRleCBiOTk4MDVlZTJmZDE0Li42ZTc2ZTUwYTQ0MDZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmhcbkBAIC0xMDYsMjIgKzEwNiwyMiBAQCBzdGF0aWMgaW5saW5lIGludCBpcDZfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxuIFx0cmV0dXJuIGhsZW47XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGlwNl90bmxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwNl90bmwgKnQsXG4rc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxuIFx0XHRcdFx0dTggKnByb3RvY29sLCBzdHJ1Y3QgZmxvd2k2ICpmbDYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHM7XG4gXHRpbnQgcmV0ID0gLUVJTlZBTDtcbiBcbi1cdGlmICh0LVx1MDAzZWVuY2FwLnR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXG4rXHRpZiAoZS1cdTAwM2V0eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh0LVx1MDAzZWVuY2FwLnR5cGUgXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxuK1x0aWYgKGUtXHUwMDNldHlwZSBcdTAwM2U9IE1BWF9JUFRVTl9FTkNBUF9PUFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGlwNnR1bl9lbmNhcHNbdC1cdTAwM2VlbmNhcC50eXBlXSk7XG4rXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaXA2dHVuX2VuY2Fwc1tlLVx1MDAzZXR5cGVdKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlYnVpbGRfaGVhZGVyKSlcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcihza2IsIFx1MDAyNnQtXHUwMDNlZW5jYXAsIHByb3RvY29sLCBmbDYpO1xuK1x0XHRyZXQgPSBvcHMtXHUwMDNlYnVpbGRfaGVhZGVyKHNrYiwgZSwgcHJvdG9jb2wsIGZsNik7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBkNWZmNTBhMmFjMDE3Li42M2M1MjRiMDgwZGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xMTAyLDYgKzExMDIsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcbiBcdFx0IF9fdTggcHJvdG8pXG4ge1xuIFx0c3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gdC1cdTAwM2VuZXQ7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7XG4gXHRzdHJ1Y3QgaXB2Nl90ZWxfdHhvcHRpb24gb3B0O1xuQEAgLTExMDksMTAgKzExMTAsMTEgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjtcbiBcdGludCBlcnJfY291bnQsIG10dTtcbiBcdHVuc2lnbmVkIGludCBldGhfaGxlbiA9IHQtXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gRVRIX0hMRU4gOiAwO1xuLVx0dW5zaWduZWQgaW50IHBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHQtXHUwMDNlZW5jYXBfaGxlbjtcbi1cdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcbitcdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb207XG4gXHRfX2JlMTYgcGF5bG9hZF9wcm90b2NvbDtcbiBcdGJvb2wgdXNlX2NhY2hlID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgcHNoX2hsZW47XG4rXHRpbnQgZW5jYXBfaGxlbjtcbiBcdHU4IGhvcF9saW1pdDtcbiBcdGludCBlcnIgPSAtMTtcbiBcbkBAIC0xMjAyLDYgKzEyMDQsMTUgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdFx0XHQgICAgIHQtXHUwMDNlcGFybXMubmFtZSk7XG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFx0fVxuK1xuK1x0LyogQ2FuIHRlYXIsIGJ1dCBobGVuIGFuZCBidWlsZF9oZWFkZXIoKSB1c2UgdGhlIHNhbWUgc25hcHNob3QuICovXG4rXHRpcGVuY2FwID0gZGF0YV9yYWNlKHQtXHUwMDNlZW5jYXApO1xuK1x0ZW5jYXBfaGxlbiA9IGlwNl9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuK1x0aWYgKHVubGlrZWx5KGVuY2FwX2hsZW4gXHUwMDNjIDApKVxuK1x0XHRnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTtcbitcdHBzaF9obGVuID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIGVuY2FwX2hsZW47XG4rXHRtYXhfaGVhZHJvb20gPSBwc2hfaGxlbjtcbitcbiBcdG10dSA9IGRzdDZfbXR1KGRzdCkgLSBldGhfaGxlbiAtIHBzaF9obGVuIC0gdC1cdTAwM2V0dW5faGxlbjtcbiBcdGlmIChlbmNhcF9saW1pdCBcdTAwM2U9IDApIHtcbiBcdFx0bWF4X2hlYWRyb29tICs9IDg7XG5AQCAtMTI0MCw3ICsxMjUxLDcgQEAgaW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXG4gXHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFxuIFx0aWYgKHQtXHUwMDNlcGFybXMuY29sbGVjdF9tZCkge1xuLVx0XHRpZiAodC1cdTAwM2VlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuK1x0XHRpZiAoaXBlbmNhcC50eXBlICE9IFRVTk5FTF9FTkNBUF9OT05FKVxuIFx0XHRcdGdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHVzZV9jYWNoZSBcdTAwMjZcdTAwMjYgbmRzdClcbkBAIC0xMjY0LDcgKzEyNzUsNyBAQCBpbnQgaXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTggZHNmaWVsZCxcbiBcdFx0XHQrIGRzdC1cdTAwM2VoZWFkZXJfbGVuICsgdC1cdTAwM2VobGVuO1xuIFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG4gXG4tXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgdCwgXHUwMDI2cHJvdG8sIGZsNik7XG4rXHRlcnIgPSBpcDZfdG5sX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG8sIGZsNik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDg6MjE6MzQuNjc2NzQ4ODU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMjk3OTE5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkcmVzc2luZyBhIERhdGEgUmFjZSBpbiBJUCBUdW5uZWwgRW5jYXBzdWxhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBob3cgd2UgaGFuZGxlIGVuY2Fwc3VsYXRpb24gd2l0aGluIGBpcDZfdG5sX2VuY2FwYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBtb3ZpbmcgZnJvbSBkaXJlY3RseSB1c2luZyBgc3RydWN0IGlwNl90bmwgKnRgIHRvIGEgbW9yZSBnZW5lcmljIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmaXhpbmcgYSBkYXRhIHJhY2UgaXNzdWUuXG5cblNwZWNpZmljYWxseSwgaW4gYGlwNl90bmxfeG1pdGAsIHdlJ3JlIG5vdyByZWFkaW5nIGB0LVx1MDAzZWVuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgY2FsbGVkIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB3ZSB3YW50IHRvIHByZXZlbnQgYSBzY2VuYXJpbyB3aGVyZSBgdC1cdTAwM2VlbmNhcGAgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluY29uc2lzdGVudCB2YWx1ZXMgYmVpbmcgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYGhsZW5gIGFuZCBjYWxscyB0byBgYnVpbGRfaGVhZGVyKClgLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBdm9pZGluZyByYWNlIGNvbmRpdGlvbnMgbGlrZSB0aGF0IGlzIGNyaXRpY2FsIGZvciBwYWNrZXQgaW50ZWdyaXR5IGFuZCBjb25zaXN0ZW50IGJlaGF2aW9yLlxuXG5CdXTigKYgd2FpdCBhIHNlY29uZC4gVGhhdCBgaXBlbmNhcGAgdmFyaWFibGXigKYgaXQncyBkZWNsYXJlZCByaWdodCB0aGVyZSBvbiB0aGUgc3RhY2s6IGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7YC4gQW5kIGl0J3MgaW5pdGlhbGl6ZWQgd2l0aCBgaXBlbmNhcCA9IGRhdGFfcmFjZSh0LVx1MDAzZWVuY2FwKTtgLiBOb3csIEknbSB0aGlua2luZzogaXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNuZWFrIGluIGhlcmU/IFdlJ3JlIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIGB0LVx1MDAzZWVuY2FwYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUuIGB0LVx1MDAzZWVuY2FwYCAqc2hvdWxkKiBiZSBhIHByb3Blcmx5IGluaXRpYWxpemVkIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIEkgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGlwX3R1bm5lbF9lbmNhcGAgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBydW5uaW5nIGludG8gYW55IHVuZGVmaW5lZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjQwLjcwNjU0NDI3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjA4MjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaD02Nz1zdHJ1Y3QgaXBfdHVubmVsX2tleSB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtODgtXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjg5OnN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC05MC1cXHR1MTZcXHRcXHRcXHR0eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMTo0Mi44NTI2MzIzMzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDkxMTc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGlwX3R1bm5lbF9lbmNhcGAgU3RydWN0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgLiBMZXQncyBwdWxsIHVwIHRoZSBmdWxsIGRlZmluaXRpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgbWVtYmVycywgdGhlaXIgdHlwZXMsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB2YXJpb3VzIGVuY2Fwc3VsYXRpb24gbWV0aG9kcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgcHJvdG9jb2xzIOKAkyBHUkUsIElQSVAsIFZYTEFOLCBHZW5ldmUsIGV0Yy4g4oCTIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcGFja2V0IHByb2Nlc3NpbmcsIHBhcnRpY3VsYXJseSB0aGUgZW5jYXAvZGVjYXAgb3BlcmF0aW9ucywgYW5kIHdoYXQgdGhlIHZhcmlvdXMgZmxhZ3MgYW5kIG9wdGlvbnMgYWN0dWFsbHkgc2lnbmlmeSB3aXRoaW4gdGhlIGRhdGEgc3RydWN0dXJlLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgbnV0cyBhbmQgYm9sdHMuIExldCdzIGdldCB0byB0aGUgc291cmNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwODoyMTo0Ni41MDM1NDY4NThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDg5OlxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAge1xcbiAgOTA6XFx0XFx0dTE2XFx0XFx0XFx0dHlwZTtcXG4gIDkxOlxcdFxcdHUxNlxcdFxcdFxcdGZsYWdzO1xcbiAgOTI6XFx0XFx0X19iZTE2XFx0XFx0XFx0c3BvcnQ7XFxuICA5MzpcXHRcXHRfX2JlMTZcXHRcXHRcXHRkcG9ydDtcXG4gIDk0OlxcdH07XFxuICA5NTpcXHRcXG4gIDk2OlxcdC8qIEZsYWdzIGZvciBpcF90dW5uZWxfaW5mbyBtb2RlLiAqL1xcbiAgOTc6XFx0I2RlZmluZSBJUF9UVU5ORUxfSU5GT19UWFxcdDB4MDFcXHQvKiByZXByZXNlbnRzIHR4IHR1bm5lbCBwYXJhbWV0ZXJzICovXFxuICA5ODpcXHQjZGVmaW5lIElQX1RVTk5FTF9JTkZPX0lQVjZcXHQweDAyXFx0Lyoga2V5IGNvbnRhaW5zIElQdjYgYWRkcmVzc2VzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjQ2LjUwMzYzODc2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY1MzUyNDgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhaW1zIHRvIGZpeCBhIHBvdGVudGlhbCBkYXRhIHJhY2Ugd2l0aCBgdC1cdTAwM2VlbmNhcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHRpbnkgc3RydWN0dXJlLCBqdXN0IDggYnl0ZXMsIGFuZCBjb3BpZWQgYnkgdmFsdWUuIFRoZSBjb2RlIGRvZXMgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cdTAwM2VlbmNhcCk7YCB3aGljaCBtZWFucyBhIGNvbXBsZXRlIGNvcHkuIFNpbmNlIGB0LVx1MDAzZWVuY2FwYCBjb21lcyBmcm9tIGBzdHJ1Y3QgaXA2X3RubGAsIHdoaWNoIGlzIG5ldF9kZXZpY2UtcmVsYXRlZCwgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGd1YXJhbnRlZWQuXG5cbkV2ZW4gaWYgdGhlcmUgKndlcmUqIHBhZGRpbmcgKHdoaWNoIEknbSBwcmV0dHkgc3VyZSB0aGVyZSBpc24ndDsgaXQncyBhIHRpZ2h0IDIrMisyKzIgbGF5b3V0KSwgd2UncmUgb25seSB1c2luZyBgaXBlbmNhcGAgaW50ZXJuYWxseSBpbiBgaXA2X2VuY2FwX2hsZW5gIGFuZCBgaXA2X3RubF9lbmNhcGAuICBgaXA2X3RubF9lbmNhcGAgcGFzc2VzIGEgcG9pbnRlciB0byB0aGUgY29waWVkIGBpcGVuY2FwYCB0byBgb3BzLVx1MDAzZWJ1aWxkX2hlYWRlcmAuICBTbywgaXMgdGhlcmUgYSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0IHRvIHVzZXIgc3BhY2U/IE5vcGUuIFRoZSBlbnRpcmUgYGlwZW5jYXBgIHN0cnVjdHVyZSBpcyBwb3B1bGF0ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50LiAgVGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGxlYWthZ2UgaXMgemVyby5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIGNsYXNzaWMgVE9DLVRPVSBjb25jdXJyZW5jeSBidWcgZml4LCB3aGVyZSBhIHNuYXBzaG90IG9mIHRoZSB2YWx1ZSBpcyB0YWtlbiB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4gS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSB3aGVyZSB0aGUgdmFsdWUgY291bGQgY2hhbmdlIGJldHdlZW4gbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCB1c2FnZS4gS0FTQU4vS0NTQU4gd291bGQgYmUgdGhlIGNvcnJlY3QgdG9vbCBmb3IgdGhpcyBzb3J0IG9mIGlzc3VlLCBidXQgbm90IEtNU0FOLCB3aGljaCBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIGBpcGVuY2FwYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3RydWN0IGFzc2lnbm1lbnQuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU0LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA4OjIxOjU3LjE1NzE3MDI4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgKFRPQy1UT1UpIG9uIGB0LVxcdTAwM2VlbmNhcGAgYnkgdGFraW5nIGEgc25hcHNob3Qgb2YgaXQgaW50byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCBhbmQgdXNpbmcgdGhhdCBzbmFwc2hvdCBmb3IgYm90aCBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGhlYWRlciBidWlsZGluZy4gVGhlIGBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwYCBpcyBhIHNtYWxsIDgtYnl0ZSBzdHJ1Y3R1cmUgd2l0aCBubyBwYWRkaW5nLCBhbmQgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0cnVjdCBhc3NpZ25tZW50IGBpcGVuY2FwID0gZGF0YV9yYWNlKHQtXFx1MDAzZWVuY2FwKTtgLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0NTQU4gKGZvciBkYXRhIHJhY2VzKSBvciBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyB0eXBlIG9mIGJ1Zy4gS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSAoVE9DLVRPVSkgb24gYHQtXFx1MDAzZWVuY2FwYCBieSB0YWtpbmcgYSBzbmFwc2hvdCBvZiBpdCBpbnRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGlwZW5jYXBgIGFuZCB1c2luZyB0aGF0IHNuYXBzaG90IGZvciBib3RoIGxlbmd0aCBjYWxjdWxhdGlvbiBhbmQgaGVhZGVyIGJ1aWxkaW5nLiBUaGUgYHN0cnVjdCBpcF90dW5uZWxfZW5jYXBgIGlzIGEgc21hbGwgOC1ieXRlIHN0cnVjdHVyZSB3aXRoIG5vIHBhZGRpbmcsIGFuZCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgc3RydWN0IGFzc2lnbm1lbnQgYGlwZW5jYXAgPSBkYXRhX3JhY2UodC1cXHUwMDNlZW5jYXApO2AuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQ1NBTiAoZm9yIGRhdGEgcmFjZXMpIG9yIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHR5cGUgb2YgYnVnLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbr5tg[1] Phase: Succeeded StartedAt: 2026-08-25 08:22:08 +0000 UTC FinishedAt: 2026-08-25 08:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 08:22:08 +0000 UTC FinishedAt: 2026-08-25 08:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2] Phase: Succeeded StartedAt: 2026-08-25 08:22:08 +0000 UTC FinishedAt: 2026-08-25 12:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 08:22:08 +0000 UTC FinishedAt: 2026-08-25 12:01:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 08:22:08 +0000 UTC FinishedAt: 2026-08-25 08:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 08:22:08 +0000 UTC FinishedAt: 2026-08-25 08:22:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr5tg/series-workflowbr5tg-convert-artifact-3017666374/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 08:22:18 +0000 UTC FinishedAt: 2026-08-25 08:38:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 08:22:18 +0000 UTC FinishedAt: 2026-08-25 08:38:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d2d074c6-fee0-4757-89af-f2bc721cbd9f,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-workflowbr5tg/series-workflowbr5tg-convert-artifact-3017666374/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": "6569da8a-7800-41b0-aebc-9855955ed011", "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-workflowbr5tg/series-workflowbr5tg-build-action-4291476700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 08:22:18 +0000 UTC FinishedAt: 2026-08-25 08:37:55 +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:*d2d074c6-fee0-4757-89af-f2bc721cbd9f,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-workflowbr5tg/series-workflowbr5tg-convert-artifact-3017666374/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": "6569da8a-7800-41b0-aebc-9855955ed011", "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-workflowbr5tg/series-workflowbr5tg-build-action-4291476700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 08:38:05 +0000 UTC FinishedAt: 2026-08-25 08:38:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 08:38:05 +0000 UTC FinishedAt: 2026-08-25 08:38:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 08:38:05 +0000 UTC FinishedAt: 2026-08-25 08:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 08:38:05 +0000 UTC FinishedAt: 2026-08-25 08:38:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbr5tg/series-workflowbr5tg-convert-artifact-3879350425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 08:38:15 +0000 UTC FinishedAt: 2026-08-25 08:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 08:38:15 +0000 UTC FinishedAt: 2026-08-25 08:40:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6569da8a-7800-41b0-aebc-9855955ed011,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-workflowbr5tg/series-workflowbr5tg-build-action-4291476700/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-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 08:40:26 +0000 UTC FinishedAt: 2026-08-25 08:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 08:40:26 +0000 UTC FinishedAt: 2026-08-25 08:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 08:40:26 +0000 UTC FinishedAt: 2026-08-25 08:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 08:40:26 +0000 UTC FinishedAt: 2026-08-25 08:56:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d2d074c6-fee0-4757-89af-f2bc721cbd9f,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-workflowbr5tg/series-workflowbr5tg-convert-artifact-3879350425/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": "c5879d1a-910f-4c9c-be91-e12b579a2f94", "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-workflowbr5tg/series-workflowbr5tg-build-action-1529102325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 08:40:26 +0000 UTC FinishedAt: 2026-08-25 08:56:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d2d074c6-fee0-4757-89af-f2bc721cbd9f,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-workflowbr5tg/series-workflowbr5tg-convert-artifact-3879350425/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": "c5879d1a-910f-4c9c-be91-e12b579a2f94", "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-workflowbr5tg/series-workflowbr5tg-build-action-1529102325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 08:56:42 +0000 UTC FinishedAt: 2026-08-25 08:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 08:56:42 +0000 UTC FinishedAt: 2026-08-25 08:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 08:56:42 +0000 UTC FinishedAt: 2026-08-25 08:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 08:56:42 +0000 UTC FinishedAt: 2026-08-25 08:59:06 +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:*c5879d1a-910f-4c9c-be91-e12b579a2f94,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-workflowbr5tg/series-workflowbr5tg-build-action-1529102325/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-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 08:59:16 +0000 UTC FinishedAt: 2026-08-25 12:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 08:59:16 +0000 UTC FinishedAt: 2026-08-25 12:01:07 +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":["ip6_tnl_xmit"],"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:*6569da8a-7800-41b0-aebc-9855955ed011,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5879d1a-910f-4c9c-be91-e12b579a2f94,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-workflowbr5tg/series-workflowbr5tg-build-action-4291476700/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-workflowbr5tg/series-workflowbr5tg-build-action-1529102325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 08:59:16 +0000 UTC FinishedAt: 2026-08-25 08:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 08:59:16 +0000 UTC FinishedAt: 2026-08-25 08:59:21 +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":["ip6_tnl_xmit"],"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-workflowbr5tg/series-workflowbr5tg-convert-artifact-1225060494/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 08:59:16 +0000 UTC FinishedAt: 2026-08-25 08:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 08:59:16 +0000 UTC FinishedAt: 2026-08-25 08:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 08:59:16 +0000 UTC FinishedAt: 2026-08-25 08:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 08:59:26 +0000 UTC FinishedAt: 2026-08-25 12:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_tnl_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_TUNNEL"],"series_id":"6f0e95fc-362e-4c9b-ab2d-a6a09bfda4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 08:59:26 +0000 UTC FinishedAt: 2026-08-25 12:00:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6569da8a-7800-41b0-aebc-9855955ed011,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5879d1a-910f-4c9c-be91-e12b579a2f94,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-workflowbr5tg/series-workflowbr5tg-build-action-4291476700/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-workflowbr5tg/series-workflowbr5tg-build-action-1529102325/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-workflowbr5tg/series-workflowbr5tg-convert-artifact-1225060494/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,}