Name: series-workflowppvx6 Phase: Succeeded StartedAt: 2026-07-24 18:20:44 +0000 UTC FinishedAt: 2026-07-24 21:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[0] Phase: Succeeded StartedAt: 2026-07-24 18:20:44 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 18:20:44 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_OCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_OCP" ], "series_id": "33a9d490-d982-47ae-a45b-bdf633c3edfc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ptp_ocp_cpld_i2c_write", "ptp_ocp_cpld_i2c_read", "i2c_bus_ctrl_store", "i2c_bus_ctrl_show", "tap_i2c_errno_to_byte" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX09DUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUmIzM0OywKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY19yZWFkJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zdG9yZSYjMzQ7LAogICAgJiMzNDtpMmNfYnVzX2N0cmxfc2hvdyYjMzQ7LAogICAgJiMzNDt0YXBfaTJjX2Vycm5vX3RvX2J5dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGZkNGQwYmQ1ZThkMjlmOTM4MWYxMGRhMzdkOTU4Njg4YzAwZjIxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDE4OjQ2OjE2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5pbmRleCAzYWU0MWI3NjM0YWM5ZS4uYzYyNzY2ZGY3YTIwMmUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5AQCAtMTEsNiAmIzQzOzExLDYyIEBAIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcbiBcdFx0cmVnaXN0ZXJlZC5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXJcbiYjNDM7RGF0ZTpcdFx0SnVseSAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NzYWdpLm1haW1vbkBhZHZhLmNvbVx1MDAzZVxuJiM0MztEZXNjcmlwdGlvbjpcdChSVykgQmluYXJ5IHN5c2ZzIGF0dHJpYnV0ZSBwcm92aWRpbmcgYSByYXcgSTJDIHBhc3N0aHJvdWdoIHRvXG4mIzQzO1x0XHR0aGUgQ1BMRCBhbmQgSTJDIG11eCBvbiBBRFZBIHgxIFRBUCBib2FyZHMuICBPbmx5IHByZXNlbnQgb25cbiYjNDM7XHRcdHRoYXQgYm9hcmQgdmFyaWFudC5cbiYjNDM7XG4mIzQzO1x0XHRFYWNoIHdyaXRlIGluaXRpYXRlcyBvbmUgSTJDIHRyYW5zYWN0aW9uLiAgVGhlIHdyaXRlIHBheWxvYWRcbiYjNDM7XHRcdG11c3QgYmUgZXhhY3RseSBmb3VyIGhlYWRlciBieXRlcyBmb2xsb3dlZCBieSB0aGUgd3JpdGUgZGF0YTpcbiYjNDM7XG4mIzQzO1x0XHQgIEJ5dGUgMDogc2xhdmUgYWRkcmVzcyAob25seSAweDQwIGFuZCAweDc0IGFyZSBwZXJtaXR0ZWQpXG4mIzQzO1x0XHQgIEJ5dGUgMTogbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlICgwLi42NylcbiYjNDM7XHRcdCAgQnl0ZSAyOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBiYWNrICgwLi4yMClcbiYjNDM7XHRcdCAgQnl0ZSAzOiBmbGFnc1xuJiM0MztcdFx0ICAgICAgICAgICAgYml0IDAgLSBzdXBwcmVzcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmVmb3JlIHRoZVxuJiM0MztcdFx0ICAgICAgICAgICAgICAgICAgICByZWFkIHNlZ21lbnQgKEkyQ19NX05PU1RBUlQpOyBvbmx5IHZhbGlkXG4mIzQzO1x0XHQgICAgICAgICAgICAgICAgICAgIHdoZW4gYm90aCB3cml0ZSBhbmQgcmVhZCBsZW5ndGhzIGFyZVxuJiM0MztcdFx0ICAgICAgICAgICAgICAgICAgICBub24temVyb1xuJiM0MztcdFx0ICBCeXRlcyA0Li46IHdyaXRlIGRhdGEgKHdyaXRlX2xlbiBieXRlcylcbiYjNDM7XG4mIzQzO1x0XHRBIHN1YnNlcXVlbnQgcmVhZCgpIHJldHVybnM6XG4mIzQzO1xuJiM0MztcdFx0ICBCeXRlIDA6IHN0YXR1cyAoMCA9IHN1Y2Nlc3MsIHBvc2l0aXZlIGVycm5vIG9uIGVycm9yKVxuJiM0MztcdFx0ICBCeXRlcyAxLi46IHJlYWQgZGF0YSAocmVhZF9sZW4gYnl0ZXMpLCBwcmVzZW50IG9ubHkgd2hlblxuJiM0MztcdFx0ICAgICAgICAgICAgIHN0YXR1cyBpcyAwIGFuZCByZWFkX2xlbiBcdTAwM2UgMFxuJiM0MztcbiYjNDM7XHRcdFRoZSB3cml0ZSBhbmQgcmVhZCBwb3J0aW9ucyBvZiB0aGUgc3lzZnMgZmlsZSBzaGFyZSBhIHNpbmdsZVxuJiM0MztcdFx0cGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlXG4mIzQzO1x0XHRvcGVuKCkgLyB3cml0ZSgpIC8gcmVhZCgpIHNlcXVlbmNlIG11c3QgYmUgdXNlZCB0byBhdm9pZFxuJiM0MztcdFx0ZGF0YSByYWNlcyBiZXR3ZWVuIGNvbmN1cnJlbnQgdXNlcnMuXG4mIzQzO1xuJiM0MztcdFx0T25seSBzbGF2ZSBhZGRyZXNzZXMgMHg0MCAoTGF0dGljZSBDUExEKSBhbmQgMHg3NCAoUENBOTU0OFxuJiM0MztcdFx0STJDIG11eCkgYXJlIGFjY2VwdGVkOyBhbGwgb3RoZXJzIHJldHVybiBFUEVSTS5cbiYjNDM7XG4mIzQzO1doYXQ6XHRcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9pMmNfYnVzX2N0cmxcbiYjNDM7RGF0ZTpcdFx0SnVseSAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NzYWdpLm1haW1vbkBhZHZhLmNvbVx1MDAzZVxuJiM0MztEZXNjcmlwdGlvbjpcdChSVykgRXhwb3NlcyB0aGUgTWljcm9CbGF6ZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyIGZvclxuJiM0MztcdFx0dGhlIHNoYXJlZCBJMkMgYnVzIG9uIEFEVkEgeDEgYW5kIHgyIFRBUCBib2FyZHMuICBPbmx5XG4mIzQzO1x0XHRwcmVzZW50IHdoZW4gdGhlIGJvYXJkIGhhcyBhIHBwc19zZWxlY3QgcmVnaXN0ZXIgYmxvY2suXG4mIzQzO1xuJiM0MztcdFx0VXNlcnNwYWNlIG11c3QgY29tcGxldGUgYSB0aHJlZS1zdGVwIGhhbmRzaGFrZSBiZWZvcmVcbiYjNDM7XHRcdGRyaXZpbmcgdGhlIGJ1czpcbiYjNDM7XG4mIzQzO1x0XHQgIDEuIFJlYWQgIC0gdmFsdWUgbXVzdCBiZSAweDAwMDAwMDAwIChidXMgaXMgZnJlZSkuXG4mIzQzO1x0XHQgIDIuIFdyaXRlIC0gMHgwMDAwZmZmZiAocmVxdWVzdCBvd25lcnNoaXApLlxuJiM0MztcdFx0ICAzLiBQb2xsICAtIHJlYWQgdW50aWwgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemVcbiYjNDM7XHRcdCAgICAgICAgICAgICBoYXMgYWNrbm93bGVkZ2VkIHRoZSBoYW5kb3ZlcikuXG4mIzQzO1xuJiM0MztcdFx0QWZ0ZXIgYWxsIEkyQyB0cmFmZmljIGlzIGNvbXBsZXRlIHRoZSBidXMgbXVzdCBiZSByZWxlYXNlZFxuJiM0MztcdFx0Ynkgd3JpdGluZyAweDAwMDAwMDAwLlxuJiM0MztcbiYjNDM7XHRcdFRoZSBwb2xsIHJlYWQgaXMgYSBQQ0llIG5vbi1wb3N0ZWQgcmVhZCBhbmQgdGhlcmVmb3JlIGFsc29cbiYjNDM7XHRcdGZsdXNoZXMgdGhlIHByZWNlZGluZyBwb3N0ZWQgd3JpdGUgdG8gdGhlIEZQR0E7IG5vXG4mIzQzO1x0XHRhZGRpdGlvbmFsIHJlYWQtYmFjayBpcyByZXF1aXJlZCBmb3Igb3JkZXJpbmcuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlc1xuIERhdGU6XHRcdFNlcHRlbWJlciAyMDIxXG4gQ29udGFjdDpcdEpvbmF0aGFuIExlbW9uIFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuaW5kZXggMzVlOTExZjFhZDc4YzAuLjc5ZmVjNTE2MWM5OTdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX29jcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbkBAIC0xNjMsNyAmIzQzOzE2Myw4IEBAIHN0cnVjdCBncGlvX3JlZyB7XG4gXHR1MzJcdGdwaW8xO1xuIFx0dTMyXHRfX3BhZDA7XG4gXHR1MzJcdGdwaW8yO1xuLVx0dTMyXHRfX3BhZDE7XG4mIzQzO1x0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXG4mIzQzO1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiAmIzQzOzQxNywxMSBAQCBzdHJ1Y3QgcHRwX29jcCB7XG4gXHRkcGxsX3RyYWNrZXIgdHJhY2tlcjtcbiBcdGludCBzaWduYWxzX25yO1xuIFx0aW50IGZyZXFfaW5fbnI7XG4mIzQzO1x0LyogY3BsZF9pMmNfeGZlciBzeXNmcyAoYWR2YV94MSkgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0dGFwX2kyY19sb2NrO1xuJiM0MztcdGludFx0XHRcdHRhcF9pMmNfYWRhcF9ucjsgLyogYWRhcHRlciBucjsgLTEgaWYgYWJzZW50ICovXG4mIzQzO1x0dThcdFx0XHR0YXBfaTJjX3JzcFsyMV07IC8qIFtzdGF0dXMsIHJlYWRfZGF0YS4uLl0gKi9cbiYjNDM7XHRzaXplX3RcdFx0XHR0YXBfaTJjX3JzcF9sZW47XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXHRCSVQoMClcbkBAIC00MjI0LDYgJiM0Mzs0MjMwLDIwNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHtcbiBcdHsgfSxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBpMmNfYnVzX2N0cmwgZXhwb3NlcyB0aGUgTWljcm9CbGF6ZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgc2hhcmVkIGJ1cyByZXF1aXJlcyBhIHRocmVlLXN0ZXAgaGFuZHNoYWtlIGJlZm9yZSB1c2U6XG4mIzQzOyAqICAgcmVhZCAweDAwMDAwMDAwIChmcmVlKSAtXHUwMDNlIHdyaXRlIDB4MDAwMGZmZmYgKHJlcXVlc3QpIC1cdTAwM2VcbiYjNDM7ICogICBwb2xsIHVudGlsIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemUgY29uZmlybXMgcmVsZWFzZSkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBwb2xsIGlzIGEgUENJZSBub24tcG9zdGVkIHJlYWQsIHdoaWNoIGFsc28gZmx1c2hlcyB0aGUgcHJlY2VkaW5nXG4mIzQzOyAqIHBvc3RlZCB3cml0ZSB0byB0aGUgRlBHQSwgc28gbm8gc2VwYXJhdGUga2VybmVsIHJlYWQtYmFjayBpcyBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0MztpMmNfYnVzX2N0cmxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VwcHNfc2VsZWN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsweCUwOHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3RcbiYjNDM7aTJjX2J1c19jdHJsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdGlmIChrc3RydG91MzIoYnVmLCAwLCBcdTAwMjZ2YWwpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aW93cml0ZTMyKHZhbCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JXKGkyY19idXNfY3RybCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBjcGxkX2kyY194ZmVyIC0gc3lzZnMgYmluYXJ5IEkyQyBwYXNzdGhyb3VnaCBmb3IgYWR2YV94MSBUQVAgQ1BMRC5cbiYjNDM7ICpcbiYjNDM7ICogd3JpdGU6IFthZGRyXVt3cml0ZV9sZW5dW3JlYWRfbGVuXVtmbGFnc11bd3JpdGVfZGF0YS4uLl1cbiYjNDM7ICogICBmbGFncyBiaXQgMDogSTJDX01fTk9TVEFSVCBvbiB0aGUgcmVhZCBzZWdtZW50XG4mIzQzOyAqIHJlYWQ6ICBbc3RhdHVzXVtyZWFkX2RhdGEuLi5dXG4mIzQzOyAqICAgc3RhdHVzIDAgPSBzdWNjZXNzLCBlbHNlIHBvc2l0aXZlIGVycm5vXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgYWRkcmVzc2VzIDB4NDAgKENQTEQpIGFuZCAweDc0IChtdXgpIGFyZSBwZXJtaXR0ZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0gIDJcbiYjNDM7c3RhdGljIGNvbnN0IHU4IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNXSA9IHtcbiYjNDM7XHQweDQwLCAvKiBDUExEICovXG4mIzQzO1x0MHg3NCwgLyogbXV4ICAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLlxuJiM0MzsgKlxuJiM0MzsgKiBFcnJub3MgXHUwMDNlIDI1NSAoZS5nLiBFTk9UU1VQUD01MjQpIG9yIG11bHRpcGxlcyBvZiAyNTYgd291bGQgdHJ1bmNhdGVcbiYjNDM7ICogdG8gYSB3cm9uZyBvciB6ZXJvIHZhbHVlIHdpdGggYSBwbGFpbiAodTgpIGNhc3QuICBNYXAgdGhvc2UgdG8gRUlPLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHU4IHRhcF9pMmNfZXJybm9fdG9fYnl0ZShpbnQgZXJyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IChlcnIgXHUwMDNjIDApID8gLWVyciA6IEVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh2YWwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2M9IDB4RkYpID8gKHU4KXZhbCA6IEVJTztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBUQVBfSTJDX1JFUV9IRFJfTEVOICAgNFxuJiM0MzsjZGVmaW5lIFRBUF9JMkNfTUFYX1dSSVRFX0xFTiA2N1xuJiM0MzsjZGVmaW5lIFRBUF9JMkNfTUFYX1JFQURfTEVOICAyMFxuJiM0MzsjZGVmaW5lIFRBUF9JMkNfRkxBR19OT1NUQVJUICBCSVQoMClcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90XG4mIzQzO3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuJiM0MztcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0ICAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGtvYmpfdG9fZGV2KGtvYmopKTtcbiYjNDM7XHRjb25zdCB1OCAqcmVxID0gKGNvbnN0IHU4ICopYnVmO1xuJiM0MztcdHU4IGFkZHIsIHdyaXRlX2xlbiwgcmVhZF9sZW4sIGZsYWdzO1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiYjNDM7XHRzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdO1xuJiM0MztcdHU4ICpyZGJ1ZiA9IE5VTEw7XG4mIzQzO1x0aW50IG5tc2dzLCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdC8qIEVhY2ggd3JpdGUgaXMgb25lIGF0b21pYyByZXF1ZXN0OyBub24temVybyBvZmZzZXQgbWVhbnMgYVxuJiM0MztcdCAqIG1pZC1idWZmZXIgcHdyaXRlKCkgd2hpY2ggd291bGQgbWlzcGFyc2UgdGhlIGhlYWRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob2ZmICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNjIFRBUF9JMkNfUkVRX0hEUl9MRU4gfHwgY291bnQgXHUwMDNlIFRBUF9JMkNfUkVRX0hEUl9MRU4gJiM0MzsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGFkZHIgICAgICA9IHJlcVswXTtcbiYjNDM7XHR3cml0ZV9sZW4gPSByZXFbMV07XG4mIzQzO1x0cmVhZF9sZW4gID0gcmVxWzJdO1xuJiM0MztcdGZsYWdzICAgICA9IHJlcVszXTtcbiYjNDM7XG4mIzQzO1x0LyogVmFsaWRhdGUgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChhZGRyID09IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tpXSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0aWYgKGkgPT0gVEFQX0kyQ19BTExPV0VEX0FERFJTX05VTSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9sZW4gXHUwMDNlIFRBUF9JMkNfTUFYX1dSSVRFX0xFTilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChyZWFkX2xlbiBcdTAwM2UgVEFQX0kyQ19NQVhfUkVBRF9MRU4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAod3JpdGVfbGVuICYjNDM7IFRBUF9JMkNfUkVRX0hEUl9MRU4gXHUwMDNlIGNvdW50KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHdyaXRlX2xlbiA9PSAwIFx1MDAyNlx1MDAyNiByZWFkX2xlbiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0LyogSTJDX01fTk9TVEFSVCBzdXBwcmVzc2VzIHRoZSByZXBlYXRlZCBTVEFSVCBiZXR3ZWVuIHdyaXRlIGFuZCByZWFkXG4mIzQzO1x0ICogc2VnbWVudHM7IGl0IGhhcyBubyBtZWFuaW5nIG9uIGEgZmlyc3QtYW5kLW9ubHkgbWVzc2FnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBUQVBfSTJDX0ZMQUdfTk9TVEFSVCkgXHUwMDI2XHUwMDI2IHdyaXRlX2xlbiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIGkyY19nZXRfYWRhcHRlcigpIHRha2VzIGEgcmVmZXJlbmNlIHVuZGVyIGNvcmVfbG9jazsgc2FmZSBhZ2FpbnN0XG4mIzQzO1x0ICogY29uY3VycmVudCBhZGFwdGVyIHVuYmluZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhZGFwID0gaTJjX2dldF9hZGFwdGVyKFJFQURfT05DRShicC1cdTAwM2V0YXBfaTJjX2FkYXBfbnIpKTtcbiYjNDM7XHRpZiAoIWFkYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0bm1zZ3MgPSAwO1xuJiM0MztcdGlmICh3cml0ZV9sZW4gXHUwMDNlIDApIHtcbiYjNDM7XHRcdG1zZ3Nbbm1zZ3NdLmFkZHIgID0gYWRkcjtcbiYjNDM7XHRcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gMDtcbiYjNDM7XHRcdG1zZ3Nbbm1zZ3NdLmxlbiAgID0gd3JpdGVfbGVuO1xuJiM0MztcdFx0bXNnc1tubXNnc10uYnVmICAgPSAodTggKilyZXEgJiM0MzsgVEFQX0kyQ19SRVFfSERSX0xFTjtcbiYjNDM7XHRcdG5tc2dzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHJlYWRfbGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHR1MTYgcmRfZmxhZ3MgPSBJMkNfTV9SRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IFRBUF9JMkNfRkxBR19OT1NUQVJUKVxuJiM0MztcdFx0XHRyZF9mbGFncyB8PSBJMkNfTV9OT1NUQVJUO1xuJiM0MztcdFx0bXNnc1tubXNnc10uYWRkciAgPSBhZGRyO1xuJiM0MztcdFx0bXNnc1tubXNnc10uZmxhZ3MgPSByZF9mbGFncyB8IEkyQ19NX0RNQV9TQUZFO1xuJiM0MztcdFx0bXNnc1tubXNnc10ubGVuICAgPSByZWFkX2xlbjtcbiYjNDM7XHRcdHJkYnVmID0ga3phbGxvYyhyZWFkX2xlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXJkYnVmKSB7XG4mIzQzO1x0XHRcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtc2dzW25tc2dzXS5idWYgPSByZGJ1ZjtcbiYjNDM7XHRcdG5tc2dzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGlzZSB0cmFuc2ZlciYjNDM7cHVibGlzaCBzbyBjb25jdXJyZW50IHdyaXRlcnMgY2Fubm90IG92ZXJ3cml0ZVxuJiM0MztcdCAqIGVhY2ggb3RoZXImIzM5O3MgcmVzcG9uc2UgaW4gdGFwX2kyY19yc3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuJiM0MztcdHJldCA9IGkyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4mIzQzO1x0aWYgKHJldCA9PSBubXNncykge1xuJiM0MztcdFx0YnAtXHUwMDNldGFwX2kyY19yc3BbMF0gPSAwO1xuJiM0MztcdFx0aWYgKHJlYWRfbGVuIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2YnAtXHUwMDNldGFwX2kyY19yc3BbMV0sIHJkYnVmLCByZWFkX2xlbik7XG4mIzQzO1x0XHRicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4gPSAxICYjNDM7IHJlYWRfbGVuO1xuJiM0MztcdFx0cmV0ID0gY291bnQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJwLVx1MDAzZXRhcF9pMmNfcnNwWzBdICA9IHRhcF9pMmNfZXJybm9fdG9fYnl0ZShyZXQpO1xuJiM0MztcdFx0YnAtXHUwMDNldGFwX2kyY19yc3BfbGVuID0gMTtcbiYjNDM7XHRcdHJldCA9IChyZXQgXHUwMDNjIDApID8gcmV0IDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZXRhcF9pMmNfbG9jayk7XG4mIzQzO1x0a2ZyZWUocmRidWYpO1xuJiM0MztcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3RcbiYjNDM7cHRwX29jcF9jcGxkX2kyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0ICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoa29ial90b19kZXYoa29iaikpO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJwLVx1MDAzZXRhcF9pMmNfbG9jayk7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2U9IGJwLVx1MDAzZXRhcF9pMmNfcnNwX2xlbikge1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gbWluKGNvdW50LCBicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4gLSAoc2l6ZV90KW9mZik7XG4mIzQzO1x0XHRtZW1jcHkoYnVmLCBicC1cdTAwM2V0YXBfaTJjX3JzcCAmIzQzOyBvZmYsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB0YXBfaTJjX2Jpbl9hdHRyID0ge1xuJiM0MztcdC5hdHRyICA9IHsgLm5hbWUgPSBcJiMzNDtjcGxkX2kyY194ZmVyXCYjMzQ7LCAubW9kZSA9IDA2MDAgfSxcbiYjNDM7XHQud3JpdGUgPSBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlLFxuJiM0MztcdC5yZWFkICA9IHB0cF9vY3BfY3BsZF9pMmNfcmVhZCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX3NlcmlhbG51bS5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfZ25zc19zeW5jLmF0dHIsXG5AQCAtNDI3MiwxMSAmIzQzOzQ0NzcsMTggQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX3RzX3dpbmRvd19hZGp1c3QuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3V0Y190YWlfb2Zmc2V0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl90b2RfY29ycmVjdGlvbi5hdHRyLFxuJiM0MztcdFx1MDAyNmRldl9hdHRyX2kyY19idXNfY3RybC5hdHRyLFxuJiM0MztcdE5VTEwsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4mIzQzO1x0XHUwMDI2dGFwX2kyY19iaW5fYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xuLVx0LmF0dHJzID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbiYjNDM7XHQuYXR0cnMgICAgID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbiYjNDM7XHQuYmluX2F0dHJzID0gYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzW10gPSB7XG5AQCAtNDkwMiw2ICYjNDM7NTExNCw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiBcdFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cdTAwM2VpMmNfY2xrKTtcbiBcdGlmIChicC1cdTAwM2VuX2lycXMpXG4gXHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVx1MDAzZXBkZXYpO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbiBcdGRldmljZV91bnJlZ2lzdGVyKFx1MDAyNmJwLVx1MDAzZWRldik7XG4gfVxuIFxuQEAgLTUwNzgsNiAmIzQzOzUyOTEsMTcgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfZGlzYWJsZTtcbiBcbiYjNDM7XHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXG4mIzQzO1x0ICogc28gbXV0ZXhfZGVzdHJveSgpIGFsd2F5cyBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LlxuJiM0MztcdCAqIE11c3QgYWxzbyBiZSBiZWZvcmUgcHRwX29jcF9yZWdpc3Rlcl9yZXNvdXJjZXMoKTogdGhlIEkyQyBidXNcbiYjNDM7XHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxuJiM0MztcdCAqIHJlZ2lzdGVycyBhbmQgc3RvcmVzIHRoZSBhZGFwdGVyIG51bWJlciBpbiB0YXBfaTJjX2FkYXBfbnI7IHRoZVxuJiM0MztcdCAqIC0xIHNlbnRpbmVsIGJlbG93IG11c3QgYWxyZWFkeSBiZSB3cml0dGVuIHNvIHRoYXQgYSBub3RpZmllclxuJiM0MztcdCAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNmJwLVx1MDAzZXRhcF9pMmNfbG9jayk7XG4mIzQzO1x0YnAtXHUwMDNldGFwX2kyY19hZGFwX25yID0gLTE7XG4mIzQzO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MjE3LDExICYjNDM7NTQ0MSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbiYjNDM7XHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBDYWNoZSBhZGFwdGVyIG51bWJlcjsgY3BsZF9pMmNfeGZlciB1c2VzIGkyY19nZXRfYWRhcHRlcigpXG4mIzQzO1x0XHQgKiBmb3IgYSByZWZlcmVuY2UtY291bnRlZCwgdW5iaW5kLXNhZmUgbG9va3VwLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZXRhcF9pMmNfYWRhcF9uciwgaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKS1cdTAwM2Vucik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNldGFwX2kyY19hZGFwX25yLCAtMSk7XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlICovXG4gXHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNmJwLVx1MDAzZWRldi5rb2JqLCBcJiMzNDtpMmNcJiMzNDspO1xuLVxuJiM0MztcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfT0NQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY193cml0ZSYjMzQ7LAogICAgJiMzNDtwdHBfb2NwX2NwbGRfaTJjX3JlYWQmIzM0OywKICAgICYjMzQ7aTJjX2J1c19jdHJsX3N0b3JlJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zaG93JiMzNDssCiAgICAmIzM0O3RhcF9pMmNfZXJybm9fdG9fYnl0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBmZDRkMGJkNWU4ZDI5ZjkzODFmMTBkYTM3ZDk1ODY4OGMwMGYyMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCmluZGV4IDNhZTQxYjc2MzRhYzllLi5jNjI3NjZkZjdhMjAyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCkBAIC0xMSw2ICYjNDM7MTEsNjIgQEAgQ29udGFjdDoJSm9uYXRoYW4gTGVtb24gJmx0O2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbSZndDsKIERlc2NyaXB0aW9uOglUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkCiAJCXJlZ2lzdGVyZWQuCiAKJiM0MztXaGF0OgkJL3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXIKJiM0MztEYXRlOgkJSnVseSAyMDI2CiYjNDM7Q29udGFjdDoJU2FnaSBNYWltb24gJmx0O3NhZ2kubWFpbW9uQGFkdmEuY29tJmd0OwomIzQzO0Rlc2NyaXB0aW9uOgkoUlcpIEJpbmFyeSBzeXNmcyBhdHRyaWJ1dGUgcHJvdmlkaW5nIGEgcmF3IEkyQyBwYXNzdGhyb3VnaCB0bwomIzQzOwkJdGhlIENQTEQgYW5kIEkyQyBtdXggb24gQURWQSB4MSBUQVAgYm9hcmRzLiAgT25seSBwcmVzZW50IG9uCiYjNDM7CQl0aGF0IGJvYXJkIHZhcmlhbnQuCiYjNDM7CiYjNDM7CQlFYWNoIHdyaXRlIGluaXRpYXRlcyBvbmUgSTJDIHRyYW5zYWN0aW9uLiAgVGhlIHdyaXRlIHBheWxvYWQKJiM0MzsJCW11c3QgYmUgZXhhY3RseSBmb3VyIGhlYWRlciBieXRlcyBmb2xsb3dlZCBieSB0aGUgd3JpdGUgZGF0YToKJiM0MzsKJiM0MzsJCSAgQnl0ZSAwOiBzbGF2ZSBhZGRyZXNzIChvbmx5IDB4NDAgYW5kIDB4NzQgYXJlIHBlcm1pdHRlZCkKJiM0MzsJCSAgQnl0ZSAxOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgKDAuLjY3KQomIzQzOwkJICBCeXRlIDI6IG51bWJlciBvZiBieXRlcyB0byByZWFkIGJhY2sgKDAuLjIwKQomIzQzOwkJICBCeXRlIDM6IGZsYWdzCiYjNDM7CQkgICAgICAgICAgICBiaXQgMCAtIHN1cHByZXNzIHRoZSByZXBlYXRlZCBTVEFSVCBiZWZvcmUgdGhlCiYjNDM7CQkgICAgICAgICAgICAgICAgICAgIHJlYWQgc2VnbWVudCAoSTJDX01fTk9TVEFSVCk7IG9ubHkgdmFsaWQKJiM0MzsJCSAgICAgICAgICAgICAgICAgICAgd2hlbiBib3RoIHdyaXRlIGFuZCByZWFkIGxlbmd0aHMgYXJlCiYjNDM7CQkgICAgICAgICAgICAgICAgICAgIG5vbi16ZXJvCiYjNDM7CQkgIEJ5dGVzIDQuLjogd3JpdGUgZGF0YSAod3JpdGVfbGVuIGJ5dGVzKQomIzQzOwomIzQzOwkJQSBzdWJzZXF1ZW50IHJlYWQoKSByZXR1cm5zOgomIzQzOwomIzQzOwkJICBCeXRlIDA6IHN0YXR1cyAoMCA9IHN1Y2Nlc3MsIHBvc2l0aXZlIGVycm5vIG9uIGVycm9yKQomIzQzOwkJICBCeXRlcyAxLi46IHJlYWQgZGF0YSAocmVhZF9sZW4gYnl0ZXMpLCBwcmVzZW50IG9ubHkgd2hlbgomIzQzOwkJICAgICAgICAgICAgIHN0YXR1cyBpcyAwIGFuZCByZWFkX2xlbiAmZ3Q7IDAKJiM0MzsKJiM0MzsJCVRoZSB3cml0ZSBhbmQgcmVhZCBwb3J0aW9ucyBvZiB0aGUgc3lzZnMgZmlsZSBzaGFyZSBhIHNpbmdsZQomIzQzOwkJcGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlCiYjNDM7CQlvcGVuKCkgLyB3cml0ZSgpIC8gcmVhZCgpIHNlcXVlbmNlIG11c3QgYmUgdXNlZCB0byBhdm9pZAomIzQzOwkJZGF0YSByYWNlcyBiZXR3ZWVuIGNvbmN1cnJlbnQgdXNlcnMuCiYjNDM7CiYjNDM7CQlPbmx5IHNsYXZlIGFkZHJlc3NlcyAweDQwIChMYXR0aWNlIENQTEQpIGFuZCAweDc0IChQQ0E5NTQ4CiYjNDM7CQlJMkMgbXV4KSBhcmUgYWNjZXB0ZWQ7IGFsbCBvdGhlcnMgcmV0dXJuIEVQRVJNLgomIzQzOwomIzQzO1doYXQ6CQkvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vaTJjX2J1c19jdHJsCiYjNDM7RGF0ZToJCUp1bHkgMjAyNgomIzQzO0NvbnRhY3Q6CVNhZ2kgTWFpbW9uICZsdDtzYWdpLm1haW1vbkBhZHZhLmNvbSZndDsKJiM0MztEZXNjcmlwdGlvbjoJKFJXKSBFeHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIgZm9yCiYjNDM7CQl0aGUgc2hhcmVkIEkyQyBidXMgb24gQURWQSB4MSBhbmQgeDIgVEFQIGJvYXJkcy4gIE9ubHkKJiM0MzsJCXByZXNlbnQgd2hlbiB0aGUgYm9hcmQgaGFzIGEgcHBzX3NlbGVjdCByZWdpc3RlciBibG9jay4KJiM0MzsKJiM0MzsJCVVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlCiYjNDM7CQlkcml2aW5nIHRoZSBidXM6CiYjNDM7CiYjNDM7CQkgIDEuIFJlYWQgIC0gdmFsdWUgbXVzdCBiZSAweDAwMDAwMDAwIChidXMgaXMgZnJlZSkuCiYjNDM7CQkgIDIuIFdyaXRlIC0gMHgwMDAwZmZmZiAocmVxdWVzdCBvd25lcnNoaXApLgomIzQzOwkJICAzLiBQb2xsICAtIHJlYWQgdW50aWwgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemUKJiM0MzsJCSAgICAgICAgICAgICBoYXMgYWNrbm93bGVkZ2VkIHRoZSBoYW5kb3ZlcikuCiYjNDM7CiYjNDM7CQlBZnRlciBhbGwgSTJDIHRyYWZmaWMgaXMgY29tcGxldGUgdGhlIGJ1cyBtdXN0IGJlIHJlbGVhc2VkCiYjNDM7CQlieSB3cml0aW5nIDB4MDAwMDAwMDAuCiYjNDM7CiYjNDM7CQlUaGUgcG9sbCByZWFkIGlzIGEgUENJZSBub24tcG9zdGVkIHJlYWQgYW5kIHRoZXJlZm9yZSBhbHNvCiYjNDM7CQlmbHVzaGVzIHRoZSBwcmVjZWRpbmcgcG9zdGVkIHdyaXRlIHRvIHRoZSBGUEdBOyBubwomIzQzOwkJYWRkaXRpb25hbCByZWFkLWJhY2sgaXMgcmVxdWlyZWQgZm9yIG9yZGVyaW5nLgomIzQzOwogV2hhdDoJCS9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlcwogRGF0ZToJCVNlcHRlbWJlciAyMDIxCiBDb250YWN0OglKb25hdGhhbiBMZW1vbiAmbHQ7am9uYXRoYW4ubGVtb25AZ21haWwuY29tJmd0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jCmluZGV4IDM1ZTkxMWYxYWQ3OGMwLi43OWZlYzUxNjFjOTk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX29jcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuYwpAQCAtMTYzLDcgJiM0MzsxNjMsOCBAQCBzdHJ1Y3QgZ3Bpb19yZWcgewogCXUzMglncGlvMTsKIAl1MzIJX19wYWQwOwogCXUzMglncGlvMjsKLQl1MzIJX19wYWQxOwomIzQzOwkvKiBhZHZhX3gxOiBJMkMgYnVzIG93bmVyc2hpcCByZWdpc3RlcjsgcmVzZXJ2ZWQgb24gb3RoZXIgdmFyaWFudHMgKi8KJiM0MzsJdTMyCWkyY19idXNfY3RybDsKIH07CiAKIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcgewpAQCAtNDE2LDYgJiM0Mzs0MTcsMTEgQEAgc3RydWN0IHB0cF9vY3AgewogCWRwbGxfdHJhY2tlciB0cmFja2VyOwogCWludCBzaWduYWxzX25yOwogCWludCBmcmVxX2luX25yOwomIzQzOwkvKiBjcGxkX2kyY194ZmVyIHN5c2ZzIChhZHZhX3gxKSAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCXRhcF9pMmNfbG9jazsKJiM0MzsJaW50CQkJdGFwX2kyY19hZGFwX25yOyAvKiBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi8KJiM0MzsJdTgJCQl0YXBfaTJjX3JzcFsyMV07IC8qIFtzdGF0dXMsIHJlYWRfZGF0YS4uLl0gKi8KJiM0MzsJc2l6ZV90CQkJdGFwX2kyY19yc3BfbGVuOwogfTsKIAogI2RlZmluZSBPQ1BfUkVRX1RJTUVTVEFNUAlCSVQoMCkKQEAgLTQyMjQsNiAmIzQzOzQyMzAsMjA1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0gewogCXsgfSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIGkyY19idXNfY3RybCBleHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBUaGUgc2hhcmVkIGJ1cyByZXF1aXJlcyBhIHRocmVlLXN0ZXAgaGFuZHNoYWtlIGJlZm9yZSB1c2U6CiYjNDM7ICogICByZWFkIDB4MDAwMDAwMDAgKGZyZWUpIC0mZ3Q7IHdyaXRlIDB4MDAwMGZmZmYgKHJlcXVlc3QpIC0mZ3Q7CiYjNDM7ICogICBwb2xsIHVudGlsIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemUgY29uZmlybXMgcmVsZWFzZSkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcG9sbCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkLCB3aGljaCBhbHNvIGZsdXNoZXMgdGhlIHByZWNlZGluZwomIzQzOyAqIHBvc3RlZCB3cml0ZSB0byB0aGUgRlBHQSwgc28gbm8gc2VwYXJhdGUga2VybmVsIHJlYWQtYmFjayBpcyBuZWVkZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QKJiM0MztpMmNfYnVzX2N0cmxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFicC0mZ3Q7cHBzX3NlbGVjdCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7MHglMDh4XG4mIzM0OywKJiM0MzsJCQkgIGlvcmVhZDMyKCZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2kyY19idXNfY3RybF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKCFicC0mZ3Q7cHBzX3NlbGVjdCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwlpZiAoa3N0cnRvdTMyKGJ1ZiwgMCwgJmFtcDt2YWwpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlvd3JpdGUzMih2YWwsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JXKGkyY19idXNfY3RybCk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBjcGxkX2kyY194ZmVyIC0gc3lzZnMgYmluYXJ5IEkyQyBwYXNzdGhyb3VnaCBmb3IgYWR2YV94MSBUQVAgQ1BMRC4KJiM0MzsgKgomIzQzOyAqIHdyaXRlOiBbYWRkcl1bd3JpdGVfbGVuXVtyZWFkX2xlbl1bZmxhZ3NdW3dyaXRlX2RhdGEuLi5dCiYjNDM7ICogICBmbGFncyBiaXQgMDogSTJDX01fTk9TVEFSVCBvbiB0aGUgcmVhZCBzZWdtZW50CiYjNDM7ICogcmVhZDogIFtzdGF0dXNdW3JlYWRfZGF0YS4uLl0KJiM0MzsgKiAgIHN0YXR1cyAwID0gc3VjY2VzcywgZWxzZSBwb3NpdGl2ZSBlcnJubwomIzQzOyAqCiYjNDM7ICogT25seSBhZGRyZXNzZXMgMHg0MCAoQ1BMRCkgYW5kIDB4NzQgKG11eCkgYXJlIHBlcm1pdHRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0gIDIKJiM0MztzdGF0aWMgY29uc3QgdTggdGFwX2kyY19hbGxvd2VkX2FkZHJzW1RBUF9JMkNfQUxMT1dFRF9BRERSU19OVU1dID0gewomIzQzOwkweDQwLCAvKiBDUExEICovCiYjNDM7CTB4NzQsIC8qIG11eCAgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLgomIzQzOyAqCiYjNDM7ICogRXJybm9zICZndDsgMjU1IChlLmcuIEVOT1RTVVBQPTUyNCkgb3IgbXVsdGlwbGVzIG9mIDI1NiB3b3VsZCB0cnVuY2F0ZQomIzQzOyAqIHRvIGEgd3Jvbmcgb3IgemVybyB2YWx1ZSB3aXRoIGEgcGxhaW4gKHU4KSBjYXN0LiAgTWFwIHRob3NlIHRvIEVJTy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdTggdGFwX2kyY19lcnJub190b19ieXRlKGludCBlcnIpCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gKGVyciAmbHQ7IDApID8gLWVyciA6IEVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuICh2YWwgJmd0OyAwICZhbXA7JmFtcDsgdmFsICZsdDs9IDB4RkYpID8gKHU4KXZhbCA6IEVJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBUQVBfSTJDX1JFUV9IRFJfTEVOICAgNAomIzQzOyNkZWZpbmUgVEFQX0kyQ19NQVhfV1JJVEVfTEVOIDY3CiYjNDM7I2RlZmluZSBUQVBfSTJDX01BWF9SRUFEX0xFTiAgMjAKJiM0MzsjZGVmaW5lIFRBUF9JMkNfRkxBR19OT1NUQVJUICBCSVQoMCkKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAomIzQzOwkJICAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGtvYmpfdG9fZGV2KGtvYmopKTsKJiM0MzsJY29uc3QgdTggKnJlcSA9IChjb25zdCB1OCAqKWJ1ZjsKJiM0MzsJdTggYWRkciwgd3JpdGVfbGVuLCByZWFkX2xlbiwgZmxhZ3M7CiYjNDM7CXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKJiM0MzsJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKJiM0MzsJdTggKnJkYnVmID0gTlVMTDsKJiM0MzsJaW50IG5tc2dzLCByZXQsIGk7CiYjNDM7CiYjNDM7CS8qIEVhY2ggd3JpdGUgaXMgb25lIGF0b21pYyByZXF1ZXN0OyBub24temVybyBvZmZzZXQgbWVhbnMgYQomIzQzOwkgKiBtaWQtYnVmZmVyIHB3cml0ZSgpIHdoaWNoIHdvdWxkIG1pc3BhcnNlIHRoZSBoZWFkZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAob2ZmICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGNvdW50ICZsdDsgVEFQX0kyQ19SRVFfSERSX0xFTiB8fCBjb3VudCAmZ3Q7IFRBUF9JMkNfUkVRX0hEUl9MRU4gJiM0MzsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWFkZHIgICAgICA9IHJlcVswXTsKJiM0MzsJd3JpdGVfbGVuID0gcmVxWzFdOwomIzQzOwlyZWFkX2xlbiAgPSByZXFbMl07CiYjNDM7CWZsYWdzICAgICA9IHJlcVszXTsKJiM0MzsKJiM0MzsJLyogVmFsaWRhdGUgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGFkZHIgPT0gdGFwX2kyY19hbGxvd2VkX2FkZHJzW2ldKQomIzQzOwkJCWJyZWFrOwomIzQzOwlpZiAoaSA9PSBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJaWYgKHdyaXRlX2xlbiAmZ3Q7IFRBUF9JMkNfTUFYX1dSSVRFX0xFTikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAocmVhZF9sZW4gJmd0OyBUQVBfSTJDX01BWF9SRUFEX0xFTikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAod3JpdGVfbGVuICYjNDM7IFRBUF9JMkNfUkVRX0hEUl9MRU4gJmd0OyBjb3VudCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAod3JpdGVfbGVuID09IDAgJmFtcDsmYW1wOyByZWFkX2xlbiA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CS8qIEkyQ19NX05PU1RBUlQgc3VwcHJlc3NlcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmV0d2VlbiB3cml0ZSBhbmQgcmVhZAomIzQzOwkgKiBzZWdtZW50czsgaXQgaGFzIG5vIG1lYW5pbmcgb24gYSBmaXJzdC1hbmQtb25seSBtZXNzYWdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKChmbGFncyAmYW1wOyBUQVBfSTJDX0ZMQUdfTk9TVEFSVCkgJmFtcDsmYW1wOyB3cml0ZV9sZW4gPT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBpMmNfZ2V0X2FkYXB0ZXIoKSB0YWtlcyBhIHJlZmVyZW5jZSB1bmRlciBjb3JlX2xvY2s7IHNhZmUgYWdhaW5zdAomIzQzOwkgKiBjb25jdXJyZW50IGFkYXB0ZXIgdW5iaW5kLgomIzQzOwkgKi8KJiM0MzsJYWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtJmd0O3RhcF9pMmNfYWRhcF9ucikpOwomIzQzOwlpZiAoIWFkYXApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbm1zZ3MgPSAwOwomIzQzOwlpZiAod3JpdGVfbGVuICZndDsgMCkgewomIzQzOwkJbXNnc1tubXNnc10uYWRkciAgPSBhZGRyOwomIzQzOwkJbXNnc1tubXNnc10uZmxhZ3MgPSAwOwomIzQzOwkJbXNnc1tubXNnc10ubGVuICAgPSB3cml0ZV9sZW47CiYjNDM7CQltc2dzW25tc2dzXS5idWYgICA9ICh1OCAqKXJlcSAmIzQzOyBUQVBfSTJDX1JFUV9IRFJfTEVOOwomIzQzOwkJbm1zZ3MmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CWlmIChyZWFkX2xlbiAmZ3Q7IDApIHsKJiM0MzsJCXUxNiByZF9mbGFncyA9IEkyQ19NX1JEOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IFRBUF9JMkNfRkxBR19OT1NUQVJUKQomIzQzOwkJCXJkX2ZsYWdzIHw9IEkyQ19NX05PU1RBUlQ7CiYjNDM7CQltc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7CiYjNDM7CQltc2dzW25tc2dzXS5mbGFncyA9IHJkX2ZsYWdzIHwgSTJDX01fRE1BX1NBRkU7CiYjNDM7CQltc2dzW25tc2dzXS5sZW4gICA9IHJlYWRfbGVuOwomIzQzOwkJcmRidWYgPSBremFsbG9jKHJlYWRfbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghcmRidWYpIHsKJiM0MzsJCQlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQl9CiYjNDM7CQltc2dzW25tc2dzXS5idWYgPSByZGJ1ZjsKJiM0MzsJCW5tc2dzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXJpYWxpc2UgdHJhbnNmZXImIzQzO3B1Ymxpc2ggc28gY29uY3VycmVudCB3cml0ZXJzIGNhbm5vdCBvdmVyd3JpdGUKJiM0MzsJICogZWFjaCBvdGhlciYjMzk7cyByZXNwb25zZSBpbiB0YXBfaTJjX3JzcC4KJiM0MzsJICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDticC0mZ3Q7dGFwX2kyY19sb2NrKTsKJiM0MzsJcmV0ID0gaTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTsKJiM0MzsJaWYgKHJldCA9PSBubXNncykgewomIzQzOwkJYnAtJmd0O3RhcF9pMmNfcnNwWzBdID0gMDsKJiM0MzsJCWlmIChyZWFkX2xlbiAmZ3Q7IDApCiYjNDM7CQkJbWVtY3B5KCZhbXA7YnAtJmd0O3RhcF9pMmNfcnNwWzFdLCByZGJ1ZiwgcmVhZF9sZW4pOwomIzQzOwkJYnAtJmd0O3RhcF9pMmNfcnNwX2xlbiA9IDEgJiM0MzsgcmVhZF9sZW47CiYjNDM7CQlyZXQgPSBjb3VudDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJwLSZndDt0YXBfaTJjX3JzcFswXSAgPSB0YXBfaTJjX2Vycm5vX3RvX2J5dGUocmV0KTsKJiM0MzsJCWJwLSZndDt0YXBfaTJjX3JzcF9sZW4gPSAxOwomIzQzOwkJcmV0ID0gKHJldCAmbHQ7IDApID8gcmV0IDogLUVJTzsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDticC0mZ3Q7dGFwX2kyY19sb2NrKTsKJiM0MzsJa2ZyZWUocmRidWYpOwomIzQzOwlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90CiYjNDM7cHRwX29jcF9jcGxkX2kyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAomIzQzOwkJICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoa29ial90b19kZXYoa29iaikpOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2JwLSZndDt0YXBfaTJjX2xvY2spOwomIzQzOwlpZiAob2ZmICZndDs9IGJwLSZndDt0YXBfaTJjX3JzcF9sZW4pIHsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBtaW4oY291bnQsIGJwLSZndDt0YXBfaTJjX3JzcF9sZW4gLSAoc2l6ZV90KW9mZik7CiYjNDM7CQltZW1jcHkoYnVmLCBicC0mZ3Q7dGFwX2kyY19yc3AgJiM0Mzsgb2ZmLCByZXQpOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JwLSZndDt0YXBfaTJjX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgdGFwX2kyY19iaW5fYXR0ciA9IHsKJiM0MzsJLmF0dHIgID0geyAubmFtZSA9ICYjMzQ7Y3BsZF9pMmNfeGZlciYjMzQ7LCAubW9kZSA9IDA2MDAgfSwKJiM0MzsJLndyaXRlID0gcHRwX29jcF9jcGxkX2kyY193cml0ZSwKJiM0MzsJLnJlYWQgID0gcHRwX29jcF9jcGxkX2kyY19yZWFkLAomIzQzO307CiYjNDM7CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfc2VyaWFsbnVtLmF0dHIsCiAJJmFtcDtkZXZfYXR0cl9nbnNzX3N5bmMuYXR0ciwKQEAgLTQyNzIsMTEgJiM0Mzs0NDc3LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7CiAJJmFtcDtkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsCiAJJmFtcDtkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLAogCSZhbXA7ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0ciwKJiM0MzsJJmFtcDtkZXZfYXR0cl9pMmNfYnVzX2N0cmwuYXR0ciwKJiM0MzsJTlVMTCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnNbXSA9IHsKJiM0MzsJJmFtcDt0YXBfaTJjX2Jpbl9hdHRyLAogCU5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0gewotCS5hdHRycyA9IGFkdmFfdGltZWNhcmRfeDFfYXR0cnMsCiYjNDM7CS5hdHRycyAgICAgPSBhZHZhX3RpbWVjYXJkX3gxX2F0dHJzLAomIzQzOwkuYmluX2F0dHJzID0gYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzW10gPSB7CkBAIC00OTAyLDYgJiM0Mzs1MTE0LDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKQogCQljbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLSZndDtpMmNfY2xrKTsKIAlpZiAoYnAtJmd0O25faXJxcykKIAkJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtJmd0O3BkZXYpOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7YnAtJmd0O3RhcF9pMmNfbG9jayk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmFtcDticC0mZ3Q7ZGV2KTsKIH0KIApAQCAtNTA3OCw2ICYjNDM7NTI5MSwxNyBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKGVycikKIAkJZ290byBvdXRfZGlzYWJsZTsKIAomIzQzOwkvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksCiYjNDM7CSAqIHNvIG11dGV4X2Rlc3Ryb3koKSBhbHdheXMgcnVucyBvbiBhbiBpbml0aWFsaXNlZCBtdXRleC4KJiM0MzsJICogTXVzdCBhbHNvIGJlIGJlZm9yZSBwdHBfb2NwX3JlZ2lzdGVyX3Jlc291cmNlcygpOiB0aGUgSTJDIGJ1cwomIzQzOwkgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlcgomIzQzOwkgKiByZWdpc3RlcnMgYW5kIHN0b3JlcyB0aGUgYWRhcHRlciBudW1iZXIgaW4gdGFwX2kyY19hZGFwX25yOyB0aGUKJiM0MzsJICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyCiYjNDM7CSAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC4KJiM0MzsJICovCiYjNDM7CW11dGV4X2luaXQoJmFtcDticC0mZ3Q7dGFwX2kyY19sb2NrKTsKJiM0MzsJYnAtJmd0O3RhcF9pMmNfYWRhcF9uciA9IC0xOwomIzQzOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7YnAtJmd0O3N5bmNfd29yaywgcHRwX29jcF9zeW5jX3dvcmspOwogCiAJLyogY29tcGF0IG1vZGUuCkBAIC01MjE3LDExICYjNDM7NTQ0MSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAKIGZvdW5kOgogCWJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGFkZCkKJiM0MzsJaWYgKGFkZCkgewogCQlwdHBfb2NwX3N5bWxpbmsoYnAsIGNoaWxkLCAmIzM0O2kyYyYjMzQ7KTsKLQllbHNlCiYjNDM7CQkvKiBDYWNoZSBhZGFwdGVyIG51bWJlcjsgY3BsZF9pMmNfeGZlciB1c2VzIGkyY19nZXRfYWRhcHRlcigpCiYjNDM7CQkgKiBmb3IgYSByZWZlcmVuY2UtY291bnRlZCwgdW5iaW5kLXNhZmUgbG9va3VwLgomIzQzOwkJICovCiYjNDM7CQlXUklURV9PTkNFKGJwLSZndDt0YXBfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktJmd0O25yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCVdSSVRFX09OQ0UoYnAtJmd0O3RhcF9pMmNfYWRhcF9uciwgLTEpOwkvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlICovCiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZhbXA7YnAtJmd0O2Rldi5rb2JqLCAmIzM0O2kyYyYjMzQ7KTsKLQomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXcgUGF0Y2ggZm9yIHRoZSBQVFAgT0NQIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgaW50cm9kdWNlcyBzb21lIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIHRvIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGFkZGluZyBgaTJjX2J1c19jdHJsYCwgd2hpY2ggaXMgcmVhZC13cml0ZSwgYW5kIHRoZW4gYGNwbGRfaTJjX3hmZXJgLCB3aGljaCBpcyBhIHJlYWQtd3JpdGUgYmluYXJ5IGF0dHJpYnV0ZS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4gU2luY2UgaXQgbW9kaWZpZXMgYSBkcml2ZXIsIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUuCgpUaGlzIHBhdGNoIHRvdWNoZXMgdGhlICYjMzQ7T3BlbiBDb21wdXRlIFByb2plY3QgdGltZSBjYXJkJiMzNDsgZHJpdmVyLiBJIHJlbWVtYmVyIHRoaXMgb25lOyBpdCYjMzk7cyBhIFBDSSBkZXZpY2UgZHJpdmVyLiBUaGUgcHJvYmUgZnVuY3Rpb24gaXMgYHB0cF9vY3BfcHJvYmVgLCBhbmQgdGhlIHBhdGNoIGFkZHMgdGhlc2UgbmV3IHN5c2ZzIGF0dHJpYnV0ZXMuIE5vdywgY2FuIHN5emthbGxlciBoYW5kbGUgdGhlc2Ugc3lzZnMgYXR0cmlidXRlcz8gWWVzLCBpdCBhYnNvbHV0ZWx5IGNhbi4gRWl0aGVyIGlmIHRoZXJlIGFyZSBkaXJlY3QgZGVzY3JpcHRpb25zIG9yIGV2ZW4ganVzdCB0aHJvdWdoIGdlbmVyaWMgc3lzZnMgZnV6emluZy4gQWN0dWFsbHksIEkgc2VlbSB0byByZWNhbGwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHN5c2ZzIGRlc2NyaXB0aW9ucy4gR3JlYXQuIFRoYXQmIzM5O3MgYSBodWdlIHBsdXMuCgpUaGUgbmV4dCBzdGVwLCBhbHdheXMsIGlzIHRvIGNoZWNrIGlmIGBwdHBfb2NwYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZnV6eiBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgYnVpbHQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnPTE5OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMDktXG5kcml2ZXJzL3B0cC9LY29uZmlnOjIxMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O09wZW5Db21wdXRlIFRpbWVDYXJkIGFzIFBUUCBjbG9ja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSBwaWVjZXMgdGhpcyB0aGluZyByZWxpZXMgb24uIEkgY2FuJiMzOTt0IGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGlzc3VlcyB1bnRpbCBJIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgbGlrZSBidWlsZGluZyBhIGhvdXNlIOKAkyB5b3UgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBmb3VuZGF0aW9uLCBmcmFtaW5nLCBhbmQgdXRpbGl0aWVzIGFyZSBjb21pbmcgZnJvbSBiZWZvcmUgeW91IGNhbiBldmVuIHRoaW5rIGFib3V0IHRoZSBpbnRlcmlvciBkZXNpZ24uIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCYjMzk7cyB0aWVkIHRvLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmNvbm5lY3Rpb25zIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qUFRQXzE1ODhfQ0xPQ0tfT0NQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBLY29uZmlnIGVudHJ5OgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRW50cnkgZm9yIFBUUF8xNTg4X0NMT0NLX09DUCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgb3IgcmVjb21tZW5kYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtjb25maWcgb3B0aW9uLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgaW5zaWRlIGFuZCBvdXQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbWV0aWN1bG91c2x5IHJlYWRpbmcgaXQuIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIG9yIGltcGxpY2F0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIG15IGN1cnJlbnQgYXJjaGl0ZWN0dXJlIG9yIHByb2plY3QgZ29hbHM/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGdyYW51bGFyIGRldGFpbHMg4oCTIHRoZSBzdWJ0bGV0aWVzIHRoYXQgd2lsbCBkZWZpbmUgaG93IHRoaXMgY2xvY2sgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSBhbmQgd2hldGhlciBpdCB0cnVseSBsZXZlcmFnZXMgT0NQIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8ga25vdyBob3cgaXQgbWlnaHQgYWZmZWN0IHRoZSBwcmVjaXNpb24gYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBQVFAgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gb3BlbiBtaW5kIGFzIEkgcmVhZCwgYW5kIG1ha2Ugbm90ZXMgb2YgdGhlIGFzc3VtcHRpb25zIHRoZSBhdXRob3IgbWF5IGhhdmUgbWFkZSBhbmQgd2hhdCBwb3NzaWJsZSBlZGdlLWNhc2VzIG1heSBuZWVkIGF0dGVudGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4gMjExOlx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcJiMzNDtcbiAyMTI6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAyMTM6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBQQ0lcbiAyMTQ6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBNVERcbiAyMTU6XHRcdGRlcGVuZHMgb24gU0VSSUFMXzgyNTBcbiAyMTY6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAyMTc6XHRcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuIDIxODpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gMjE5Olx0XHRzZWxlY3QgQ1JDMTZcbiAyMjA6XHRcdHNlbGVjdCBEUExMXG4gMjIxOlx0XHRoZWxwXG4gMjIyOlx0XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxuIDIyMzpcdFxuIDIyNDpcdFx0ICBUaGUgT3BlbkNvbXB1dGUgdGltZSBjYXJkIGlzIGFuIGF0b21pYyBjbG9jayBhbG9uZyB3aXRoXG4gMjI1Olx0XHQgIGEgR1BTIHJlY2VpdmVyIHRoYXQgcHJvdmlkZXMgYSBHcmFuZG1hc3RlciBjbG9jayBzb3VyY2VcbiAyMjY6XHRcdCAgZm9yIGEgUFRQIGVuYWJsZWQgbmV0d29yay5cbiAyMjc6XHRcbiAyMjg6XHRcdCAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy50aW1pbmdjYXJkLmNvbS9cbiAyMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTEzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgRGVlcCBEaXZlIGludG8gdGhlIFBUUCBPQ1AgQ1BMRCBJMkMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgZGVwZW5kZW5jaWVzOiBQQ0ksIEkyQywgTVRELCBTRVJJQUxfODI1MCwgYW5kIENPTU1PTl9DTEsuIEl0JiMzOTtzIGEgUENJIGRyaXZlciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG1lYW5zIFN5emthbGxlciBjYW4gcHJvYmFibHkgdXNlIHZQQ0kgdG8gZnV6eiBpdC4gTXkga2V5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGF0IHRoaXMgZHJpdmVyIHJlZ2lzdGVycyBzeXNmcyBhdHRyaWJ1dGVzIC0gYWx3YXlzIGEgZ3JlYXQgYXR0YWNrIHN1cmZhY2UuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoZXNlIGZ1bmN0aW9uczogYGkyY19idXNfY3RybF9zaG93YCwgYGkyY19idXNfY3RybF9zdG9yZWAsIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYCwgYW5kIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgLiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWA/IEJpbmdvISBJdCYjMzk7cyBhIHN5c2ZzIGJpbmFyeSBhdHRyaWJ1dGUgd3JpdGUgZnVuY3Rpb24sIGFuZCBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgZnV6emluZyBzeXNmcy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgcHRwX29jcGAgaXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4sIGFuZCBpdCBsb29rcyBsaWtlIGl0IGNhbiBiZSBidWlsdC1pbiBpZiB3ZSBlbmFibGUgYFBUUF8xNTg4X0NMT0NLX09DUGAuIFNvLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBmb3VyOiBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAsIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgLCBgaTJjX2J1c19jdHJsX3N0b3JlYCwgYW5kIGBpMmNfYnVzX2N0cmxfc2hvd2AuCgpJIHNlZSBzb21lIG90aGVyIGZ1bmN0aW9ucywgYnV0IGB0YXBfaTJjX2Vycm5vX3RvX2J5dGVgIGlzIGNsZWFybHkgYSBoZWxwZXIsIGFuZCBgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbGAgc2VlbXMgdG8gaGF2ZSBzb21lIG1vZGlmaWNhdGlvbnMuCgpJcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5ISBJdCYjMzk7cyBhZGRpbmcgbmV3IHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBwYXJzZSB1c2VyIGlucHV0LCBpbnRlcmFjdCB3aXRoIEkyQywgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIGlzIGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBwYXJzZXMgYSBoZWFkZXIsIGNyYWZ0cyBJMkMgbWVzc2FnZXMsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBjYWxscyBgaTJjX3RyYW5zZmVyYCAtIGEgY2xhc3NpYyByZWNpcGUgZm9yIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4KCk5vdywgSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZywgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgbWFpbiBrZXkuIEJ1dCB3YWl0LCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgdXNlcyBgaTJjX2dldF9hZGFwdGVyYCBhbmQgYGkyY190cmFuc2ZlcmAsIGFuZCBJJiMzOTttIGFsd2F5cyB0aGlua2luZyBhYm91dCBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXJlIGFueSBBRFZBIHgxIFRBUCBib2FyZCBzcGVjaWZpYyBjb25maWdzPyBRdWljayBjaGVjayBvZiBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmb3IgYGFkdmFfeDFgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGNvdmVycyBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkdmFfeDEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jPTE2Mj1zdHJ1Y3QgZ3Bpb19yZWcge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNjUtXHR1MzJcdGdwaW8yO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE2NjpcdC8qIGFkdmFfeDE6IEkyQyBidXMgb3duZXJzaGlwIHJlZ2lzdGVyOyByZXNlcnZlZCBvbiBvdGhlciB2YXJpYW50cyAqL1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTE2Ny1cdHUzMlx0aTJjX2J1c19jdHJsO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0zNjA9c3RydWN0IHB0cF9vY3Age1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MTktXHRpbnQgZnJlcV9pbl9ucjtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MjA6XHQvKiBjcGxkX2kyY194ZmVyIHN5c2ZzIChhZHZhX3gxKSAqL1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQyMS1cdHN0cnVjdCBtdXRleFx0XHR0YXBfaTJjX2xvY2s7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTQ1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ1OTpzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ2MC1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9OTE1PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3Jlc291cmNlW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNzktXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA4MDpzdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV94MV9yZXNvdXJjZVtdID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwODEtXHR7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNzctXHRcdFx0LmZsYXNoX3N0YXJ0ICA9IDB4MTAwMDAwMCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjc4Olx0XHRcdC5zbWFfb3AgICAgICAgPSBcdTAwMjZvY3BfYWR2YV94MV9zbWFfb3AsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI3OS1cdFx0XHQuc2lnbmFsc19uciAgID0gNCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTI4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI5MS1cdHsgUENJX0RFVklDRV9EQVRBKEFEVkEsIFRJTUVDQVJELCBcdTAwMjZvY3BfYWR2YV9yZXNvdXJjZSkgfSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjkyOlx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFx1MDAyNm9jcF9hZHZhX3gxX3Jlc291cmNlKSB9LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTMtXHR7IH1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2FkdmFfc21hX291dFtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzg4LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzODk6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9hZHZhX3gxX3NtYV9pbltdID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzOTAtXHR7IC5uYW1lID0gXCYjMzQ7UFBTMVwmIzM0OyxcdC52YWx1ZSA9IDB4MDAwMSwgICAgICAuZnJlcXVlbmN5ID0gMSB9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNDAyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE0MDM6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9hZHZhX3gxX3NtYV9vdXRbXSA9IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNDA0LVx0eyAubmFtZSA9IFwmIzM0OzEwTWh6XCYjMzQ7LFx0LnZhbHVlID0gMHgwMDAwLCAgLmZyZXF1ZW5jeSA9IDEwMDAwMDAwfSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjkwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTEyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcCA9IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyOTE0Olx0LnRibFx0XHQ9IHsgcHRwX29jcF9hZHZhX3gxX3NtYV9pbiwgcHRwX29jcF9hZHZhX3gxX3NtYV9vdXQgfSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTE1LVx0LmluaXRcdFx0PSBwdHBfb2NwX3NtYV9mYl9pbml0LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00MjY5PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhpMmNfYnVzX2N0cmwpO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjcxLS8qXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDI3MjogKiBjcGxkX2kyY194ZmVyIC0gc3lzZnMgYmluYXJ5IEkyQyBwYXNzdGhyb3VnaCBmb3IgYWR2YV94MSBUQVAgQ1BMRC5cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjczLSAqXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTQ0NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDQ4My1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NDg0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnNbXSA9IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NDg1LVx0XHUwMDI2dGFwX2kyY19iaW5fYXR0cixcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDQ4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ0OTAtXHQuYXR0cnMgICAgID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NDkxOlx0LmJpbl9hdHRycyA9IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ0OTItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODgKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogNzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEFEVkEgeDEgVEFQIEJvYXJkIEkyQyBJbnRlcmZhY2UqKgoKT2theSwgc28gdGhlIGBhZHZhX3gxYCBpcyBlc3NlbnRpYWxseSBqdXN0IGFub3RoZXIgUENJIGRldmljZSB2YXJpYW50LiBUaGF0IG1lYW5zIFN5emthbGxlciBjYW4sIGFuZCBzaG91bGQsIGZ1enogaXQuIFRoZSBrZXkgaXMgc2V0dGluZyB1cCB0aGUgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCB2ZW5kb3IvZGV2aWNlIElELiBUaGUgc3lzZnMgYXR0cmlidXRlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGBhZHZhX3gxYCB2YXJpYW50LCBzbyB3ZSYjMzk7cmUgb25seSBmdXp6aW5nIHRoZSByaWdodCB0YXJnZXQuIFN5emthbGxlciYjMzk7cyB2aXJ0dWFsIFBDSSBzdXBwb3J0IHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIGVtdWxhdGlvbi4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgKmFsbCogd2UgbmVlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvcHRwL0tjb25maWdgIGZpbGUuLi4gWWVwLCBpdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIGBIQVNfSU9NRU1gLCBgUENJYCwgYEkyQ2AsIGBNVERgLCBgU0VSSUFMXzgyNTBgLCBhbmQgYENPTU1PTl9DTEtgLCBidXQgd2UgY2FuIGVuYWJsZSB0aG9zZSBmcm9tIHRoZSBiYXNlIGNvbmZpZy4gSnVzdCBlbmFibGluZyBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyBlbm91Z2guCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBJdCYjMzk7czoKKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYAoqICAgYHB0cF9vY3BfY3BsZF9pMmNfcmVhZGAKKiAgIGBpMmNfYnVzX2N0cmxfc3RvcmVgCiogICBgaTJjX2J1c19jdHJsX3Nob3dgCgpJcyBgdGFwX2kyY19lcnJub190b19ieXRlYCB3b3J0aCBpbmNsdWRpbmc/IEl0JiMzOTtzIGEgc21hbGwgaGVscGVyLCBidXQgaXQmIzM5O3MgcGFydCBvZiB0aGlzIG5ldyBsb2dpYywgc28gbGV0JiMzOTtzIGFkZCBpdC4gV2hhdCBhYm91dCBgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbGA/IFRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYnV0IGl0JiMzOTtzIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLCBzbyBub3QgY3JpdGljYWwgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHBhcnQgb2YgdGhlIGJhc2UgZHJpdmVyLgoKUXVpY2sgZG91YmxlLWNoZWNrOiBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBzcGVjaWZpYyBjb25maWcgd2UgbmVlZC4KClJldmlld2luZyB0aGUgcGF0Y2ggYWdhaW4gY29uZmlybXMgdGhlIGtleSBhZGRpdGlvbnM6CiogICBgaTJjX2J1c19jdHJsX3Nob3dgCiogICBgaTJjX2J1c19jdHJsX3N0b3JlYAoqICAgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWAKKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYAoqICAgYHB0cF9vY3BfY3BsZF9pMmNfcmVhZGAKClRoZXNlIGFyZSBhbGwgKm5ldyogZnVuY3Rpb25zIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMuIFRoaXMgbWFrZXMgdGhlbSBpZGVhbCBmdXp6aW5nIHRhcmdldHMgZm9yIFN5emthbGxlci4KClRoZXJlZm9yZSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O2xsIGRvOgoKKiAgIFNldCBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgU2V0IGBGb2N1c1N5bWJvbHM6YCB0bzoKICAgICogICBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAKICAgICogICBgcHRwX29jcF9jcGxkX2kyY19yZWFkYAogICAgKiAgIGBpMmNfYnVzX2N0cmxfc3RvcmVgCiAgICAqICAgYGkyY19idXNfY3RybF9zaG93YAogICAgKiAgIGB0YXBfaTJjX2Vycm5vX3RvX2J5dGVgCiogICBTZXQgYEVuYWJsZUNvbmZpZ3M6YCB0bzoKICAgICogICBgUFRQXzE1ODhfQ0xPQ0tfT0NQYAoKVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSBpbiB0aGUgYHB0cF9vY3BgIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYWxsb3cgdXNlcnNwYWNlIHRvIGluaXRpYXRlIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIEluIHBhcnRpY3VsYXIsIHRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB1c2VyIGlucHV0LCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIEkyQyB0cmFuc2ZlciBpbml0aWF0aW9uOyB0aGlzIGlzIGNvbXBsZXggZnVuY3Rpb25hbCBsb2dpYyBhbmQgdGhlcmVmb3JlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfT0NQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY193cml0ZSYjMzQ7LAogICAgJiMzNDtwdHBfb2NwX2NwbGRfaTJjX3JlYWQmIzM0OywKICAgICYjMzQ7aTJjX2J1c19jdHJsX3N0b3JlJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zaG93JiMzNDssCiAgICAmIzM0O3RhcF9pMmNfZXJybm9fdG9fYnl0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX09DUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUmIzM0OywKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY19yZWFkJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zdG9yZSYjMzQ7LAogICAgJiMzNDtpMmNfYnVzX2N0cmxfc2hvdyYjMzQ7LAogICAgJiMzNDt0YXBfaTJjX2Vycm5vX3RvX2J5dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MTguMTExMDQzOTUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0NjAxMjQ2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHRwX29jcF9jcGxkX2kyY193cml0ZVwiLFxuICAgIFwicHRwX29jcF9jcGxkX2kyY19yZWFkXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc3RvcmVcIixcbiAgICBcImkyY19idXNfY3RybF9zaG93XCIsXG4gICAgXCJ0YXBfaTJjX2Vycm5vX3RvX2J5dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjE4LjExMTA1MTg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3NzE0MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGZkNGQwYmQ1ZThkMjlmOTM4MWYxMGRhMzdkOTU4Njg4YzAwZjIxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbmluZGV4IDNhZTQxYjc2MzRhYzllLi5jNjI3NjZkZjdhMjAyZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbkBAIC0xMSw2ICsxMSw2MiBAQCBDb250YWN0OlxcdEpvbmF0aGFuIExlbW9uIFxcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cXHUwMDNlXFxuIERlc2NyaXB0aW9uOlxcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcXG4gXFx0XFx0cmVnaXN0ZXJlZC5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXJcXG4rRGF0ZTpcXHRcXHRKdWx5IDIwMjZcXG4rQ29udGFjdDpcXHRTYWdpIE1haW1vbiBcXHUwMDNjc2FnaS5tYWltb25AYWR2YS5jb21cXHUwMDNlXFxuK0Rlc2NyaXB0aW9uOlxcdChSVykgQmluYXJ5IHN5c2ZzIGF0dHJpYnV0ZSBwcm92aWRpbmcgYSByYXcgSTJDIHBhc3N0aHJvdWdoIHRvXFxuK1xcdFxcdHRoZSBDUExEIGFuZCBJMkMgbXV4IG9uIEFEVkEgeDEgVEFQIGJvYXJkcy4gIE9ubHkgcHJlc2VudCBvblxcbitcXHRcXHR0aGF0IGJvYXJkIHZhcmlhbnQuXFxuK1xcbitcXHRcXHRFYWNoIHdyaXRlIGluaXRpYXRlcyBvbmUgSTJDIHRyYW5zYWN0aW9uLiAgVGhlIHdyaXRlIHBheWxvYWRcXG4rXFx0XFx0bXVzdCBiZSBleGFjdGx5IGZvdXIgaGVhZGVyIGJ5dGVzIGZvbGxvd2VkIGJ5IHRoZSB3cml0ZSBkYXRhOlxcbitcXG4rXFx0XFx0ICBCeXRlIDA6IHNsYXZlIGFkZHJlc3MgKG9ubHkgMHg0MCBhbmQgMHg3NCBhcmUgcGVybWl0dGVkKVxcbitcXHRcXHQgIEJ5dGUgMTogbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlICgwLi42NylcXG4rXFx0XFx0ICBCeXRlIDI6IG51bWJlciBvZiBieXRlcyB0byByZWFkIGJhY2sgKDAuLjIwKVxcbitcXHRcXHQgIEJ5dGUgMzogZmxhZ3NcXG4rXFx0XFx0ICAgICAgICAgICAgYml0IDAgLSBzdXBwcmVzcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmVmb3JlIHRoZVxcbitcXHRcXHQgICAgICAgICAgICAgICAgICAgIHJlYWQgc2VnbWVudCAoSTJDX01fTk9TVEFSVCk7IG9ubHkgdmFsaWRcXG4rXFx0XFx0ICAgICAgICAgICAgICAgICAgICB3aGVuIGJvdGggd3JpdGUgYW5kIHJlYWQgbGVuZ3RocyBhcmVcXG4rXFx0XFx0ICAgICAgICAgICAgICAgICAgICBub24temVyb1xcbitcXHRcXHQgIEJ5dGVzIDQuLjogd3JpdGUgZGF0YSAod3JpdGVfbGVuIGJ5dGVzKVxcbitcXG4rXFx0XFx0QSBzdWJzZXF1ZW50IHJlYWQoKSByZXR1cm5zOlxcbitcXG4rXFx0XFx0ICBCeXRlIDA6IHN0YXR1cyAoMCA9IHN1Y2Nlc3MsIHBvc2l0aXZlIGVycm5vIG9uIGVycm9yKVxcbitcXHRcXHQgIEJ5dGVzIDEuLjogcmVhZCBkYXRhIChyZWFkX2xlbiBieXRlcyksIHByZXNlbnQgb25seSB3aGVuXFxuK1xcdFxcdCAgICAgICAgICAgICBzdGF0dXMgaXMgMCBhbmQgcmVhZF9sZW4gXFx1MDAzZSAwXFxuK1xcbitcXHRcXHRUaGUgd3JpdGUgYW5kIHJlYWQgcG9ydGlvbnMgb2YgdGhlIHN5c2ZzIGZpbGUgc2hhcmUgYSBzaW5nbGVcXG4rXFx0XFx0cGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlXFxuK1xcdFxcdG9wZW4oKSAvIHdyaXRlKCkgLyByZWFkKCkgc2VxdWVuY2UgbXVzdCBiZSB1c2VkIHRvIGF2b2lkXFxuK1xcdFxcdGRhdGEgcmFjZXMgYmV0d2VlbiBjb25jdXJyZW50IHVzZXJzLlxcbitcXG4rXFx0XFx0T25seSBzbGF2ZSBhZGRyZXNzZXMgMHg0MCAoTGF0dGljZSBDUExEKSBhbmQgMHg3NCAoUENBOTU0OFxcbitcXHRcXHRJMkMgbXV4KSBhcmUgYWNjZXB0ZWQ7IGFsbCBvdGhlcnMgcmV0dXJuIEVQRVJNLlxcbitcXG4rV2hhdDpcXHRcXHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vaTJjX2J1c19jdHJsXFxuK0RhdGU6XFx0XFx0SnVseSAyMDI2XFxuK0NvbnRhY3Q6XFx0U2FnaSBNYWltb24gXFx1MDAzY3NhZ2kubWFpbW9uQGFkdmEuY29tXFx1MDAzZVxcbitEZXNjcmlwdGlvbjpcXHQoUlcpIEV4cG9zZXMgdGhlIE1pY3JvQmxhemUgSTJDIGJ1cyBhcmJpdHJhdGlvbiByZWdpc3RlciBmb3JcXG4rXFx0XFx0dGhlIHNoYXJlZCBJMkMgYnVzIG9uIEFEVkEgeDEgYW5kIHgyIFRBUCBib2FyZHMuICBPbmx5XFxuK1xcdFxcdHByZXNlbnQgd2hlbiB0aGUgYm9hcmQgaGFzIGEgcHBzX3NlbGVjdCByZWdpc3RlciBibG9jay5cXG4rXFxuK1xcdFxcdFVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlXFxuK1xcdFxcdGRyaXZpbmcgdGhlIGJ1czpcXG4rXFxuK1xcdFxcdCAgMS4gUmVhZCAgLSB2YWx1ZSBtdXN0IGJlIDB4MDAwMDAwMDAgKGJ1cyBpcyBmcmVlKS5cXG4rXFx0XFx0ICAyLiBXcml0ZSAtIDB4MDAwMGZmZmYgKHJlcXVlc3Qgb3duZXJzaGlwKS5cXG4rXFx0XFx0ICAzLiBQb2xsICAtIHJlYWQgdW50aWwgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemVcXG4rXFx0XFx0ICAgICAgICAgICAgIGhhcyBhY2tub3dsZWRnZWQgdGhlIGhhbmRvdmVyKS5cXG4rXFxuK1xcdFxcdEFmdGVyIGFsbCBJMkMgdHJhZmZpYyBpcyBjb21wbGV0ZSB0aGUgYnVzIG11c3QgYmUgcmVsZWFzZWRcXG4rXFx0XFx0Ynkgd3JpdGluZyAweDAwMDAwMDAwLlxcbitcXG4rXFx0XFx0VGhlIHBvbGwgcmVhZCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkIGFuZCB0aGVyZWZvcmUgYWxzb1xcbitcXHRcXHRmbHVzaGVzIHRoZSBwcmVjZWRpbmcgcG9zdGVkIHdyaXRlIHRvIHRoZSBGUEdBOyBub1xcbitcXHRcXHRhZGRpdGlvbmFsIHJlYWQtYmFjayBpcyByZXF1aXJlZCBmb3Igb3JkZXJpbmcuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlc1xcbiBEYXRlOlxcdFxcdFNlcHRlbWJlciAyMDIxXFxuIENvbnRhY3Q6XFx0Sm9uYXRoYW4gTGVtb24gXFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuaW5kZXggMzVlOTExZjFhZDc4YzAuLjc5ZmVjNTE2MWM5OTdiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbkBAIC0xNjMsNyArMTYzLDggQEAgc3RydWN0IGdwaW9fcmVnIHtcXG4gXFx0dTMyXFx0Z3BpbzE7XFxuIFxcdHUzMlxcdF9fcGFkMDtcXG4gXFx0dTMyXFx0Z3BpbzI7XFxuLVxcdHUzMlxcdF9fcGFkMTtcXG4rXFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuK1xcdHUzMlxcdGkyY19idXNfY3RybDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xcbkBAIC00MTYsNiArNDE3LDExIEBAIHN0cnVjdCBwdHBfb2NwIHtcXG4gXFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XFxuIFxcdGludCBzaWduYWxzX25yO1xcbiBcXHRpbnQgZnJlcV9pbl9ucjtcXG4rXFx0LyogY3BsZF9pMmNfeGZlciBzeXNmcyAoYWR2YV94MSkgKi9cXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0dGFwX2kyY19sb2NrO1xcbitcXHRpbnRcXHRcXHRcXHR0YXBfaTJjX2FkYXBfbnI7IC8qIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xcbitcXHR1OFxcdFxcdFxcdHRhcF9pMmNfcnNwWzIxXTsgLyogW3N0YXR1cywgcmVhZF9kYXRhLi4uXSAqL1xcbitcXHRzaXplX3RcXHRcXHRcXHR0YXBfaTJjX3JzcF9sZW47XFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXFx0QklUKDApXFxuQEAgLTQyMjQsNiArNDIzMCwyMDUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7XFxuIFxcdHsgfSxcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIGkyY19idXNfY3RybCBleHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFRoZSBzaGFyZWQgYnVzIHJlcXVpcmVzIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlIHVzZTpcXG4rICogICByZWFkIDB4MDAwMDAwMDAgKGZyZWUpIC1cXHUwMDNlIHdyaXRlIDB4MDAwMGZmZmYgKHJlcXVlc3QpIC1cXHUwMDNlXFxuKyAqICAgcG9sbCB1bnRpbCAweGZmZmZmZmZmIChNaWNyb0JsYXplIGNvbmZpcm1zIHJlbGVhc2UpLlxcbisgKlxcbisgKiBUaGUgcG9sbCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkLCB3aGljaCBhbHNvIGZsdXNoZXMgdGhlIHByZWNlZGluZ1xcbisgKiBwb3N0ZWQgd3JpdGUgdG8gdGhlIEZQR0EsIHNvIG5vIHNlcGFyYXRlIGtlcm5lbCByZWFkLWJhY2sgaXMgbmVlZGVkLlxcbisgKi9cXG4rc3RhdGljIHNzaXplX3RcXG4raTJjX2J1c19jdHJsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcHBzX3NlbGVjdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIjB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBpb3JlYWQzMihcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCkpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdFxcbitpMmNfYnVzX2N0cmxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdHUzMiB2YWw7XFxuK1xcbitcXHRpZiAoIWJwLVxcdTAwM2VwcHNfc2VsZWN0KVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0aWYgKGtzdHJ0b3UzMihidWYsIDAsIFxcdTAwMjZ2YWwpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aW93cml0ZTMyKHZhbCwgXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhpMmNfYnVzX2N0cmwpO1xcbitcXG4rLypcXG4rICogY3BsZF9pMmNfeGZlciAtIHN5c2ZzIGJpbmFyeSBJMkMgcGFzc3Rocm91Z2ggZm9yIGFkdmFfeDEgVEFQIENQTEQuXFxuKyAqXFxuKyAqIHdyaXRlOiBbYWRkcl1bd3JpdGVfbGVuXVtyZWFkX2xlbl1bZmxhZ3NdW3dyaXRlX2RhdGEuLi5dXFxuKyAqICAgZmxhZ3MgYml0IDA6IEkyQ19NX05PU1RBUlQgb24gdGhlIHJlYWQgc2VnbWVudFxcbisgKiByZWFkOiAgW3N0YXR1c11bcmVhZF9kYXRhLi4uXVxcbisgKiAgIHN0YXR1cyAwID0gc3VjY2VzcywgZWxzZSBwb3NpdGl2ZSBlcnJub1xcbisgKlxcbisgKiBPbmx5IGFkZHJlc3NlcyAweDQwIChDUExEKSBhbmQgMHg3NCAobXV4KSBhcmUgcGVybWl0dGVkLlxcbisgKi9cXG4rI2RlZmluZSBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNICAyXFxuK3N0YXRpYyBjb25zdCB1OCB0YXBfaTJjX2FsbG93ZWRfYWRkcnNbVEFQX0kyQ19BTExPV0VEX0FERFJTX05VTV0gPSB7XFxuK1xcdDB4NDAsIC8qIENQTEQgKi9cXG4rXFx0MHg3NCwgLyogbXV4ICAqL1xcbit9O1xcbitcXG4rLypcXG4rICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLlxcbisgKlxcbisgKiBFcnJub3MgXFx1MDAzZSAyNTUgKGUuZy4gRU5PVFNVUFA9NTI0KSBvciBtdWx0aXBsZXMgb2YgMjU2IHdvdWxkIHRydW5jYXRlXFxuKyAqIHRvIGEgd3Jvbmcgb3IgemVybyB2YWx1ZSB3aXRoIGEgcGxhaW4gKHU4KSBjYXN0LiAgTWFwIHRob3NlIHRvIEVJTy5cXG4rICovXFxuK3N0YXRpYyB1OCB0YXBfaTJjX2Vycm5vX3RvX2J5dGUoaW50IGVycilcXG4re1xcbitcXHRpbnQgdmFsID0gKGVyciBcXHUwMDNjIDApID8gLWVyciA6IEVJTztcXG4rXFxuK1xcdHJldHVybiAodmFsIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiB2YWwgXFx1MDAzYz0gMHhGRikgPyAodTgpdmFsIDogRUlPO1xcbit9XFxuK1xcbisjZGVmaW5lIFRBUF9JMkNfUkVRX0hEUl9MRU4gICA0XFxuKyNkZWZpbmUgVEFQX0kyQ19NQVhfV1JJVEVfTEVOIDY3XFxuKyNkZWZpbmUgVEFQX0kyQ19NQVhfUkVBRF9MRU4gIDIwXFxuKyNkZWZpbmUgVEFQX0kyQ19GTEFHX05PU1RBUlQgIEJJVCgwKVxcbitcXG4rc3RhdGljIHNzaXplX3RcXG4rcHRwX29jcF9jcGxkX2kyY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0ICAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShrb2JqX3RvX2Rldihrb2JqKSk7XFxuK1xcdGNvbnN0IHU4ICpyZXEgPSAoY29uc3QgdTggKilidWY7XFxuK1xcdHU4IGFkZHIsIHdyaXRlX2xlbiwgcmVhZF9sZW4sIGZsYWdzO1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XFxuK1xcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XFxuK1xcdHU4ICpyZGJ1ZiA9IE5VTEw7XFxuK1xcdGludCBubXNncywgcmV0LCBpO1xcbitcXG4rXFx0LyogRWFjaCB3cml0ZSBpcyBvbmUgYXRvbWljIHJlcXVlc3Q7IG5vbi16ZXJvIG9mZnNldCBtZWFucyBhXFxuK1xcdCAqIG1pZC1idWZmZXIgcHdyaXRlKCkgd2hpY2ggd291bGQgbWlzcGFyc2UgdGhlIGhlYWRlci5cXG4rXFx0ICovXFxuK1xcdGlmIChvZmYgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChjb3VudCBcXHUwMDNjIFRBUF9JMkNfUkVRX0hEUl9MRU4gfHwgY291bnQgXFx1MDAzZSBUQVBfSTJDX1JFUV9IRFJfTEVOICsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGFkZHIgICAgICA9IHJlcVswXTtcXG4rXFx0d3JpdGVfbGVuID0gcmVxWzFdO1xcbitcXHRyZWFkX2xlbiAgPSByZXFbMl07XFxuK1xcdGZsYWdzICAgICA9IHJlcVszXTtcXG4rXFxuK1xcdC8qIFZhbGlkYXRlICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNOyBpKyspXFxuK1xcdFxcdGlmIChhZGRyID09IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tpXSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdGlmIChpID09IFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0pXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRpZiAod3JpdGVfbGVuIFxcdTAwM2UgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJlYWRfbGVuIFxcdTAwM2UgVEFQX0kyQ19NQVhfUkVBRF9MRU4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAod3JpdGVfbGVuICsgVEFQX0kyQ19SRVFfSERSX0xFTiBcXHUwMDNlIGNvdW50KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHdyaXRlX2xlbiA9PSAwIFxcdTAwMjZcXHUwMDI2IHJlYWRfbGVuID09IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHQvKiBJMkNfTV9OT1NUQVJUIHN1cHByZXNzZXMgdGhlIHJlcGVhdGVkIFNUQVJUIGJldHdlZW4gd3JpdGUgYW5kIHJlYWRcXG4rXFx0ICogc2VnbWVudHM7IGl0IGhhcyBubyBtZWFuaW5nIG9uIGEgZmlyc3QtYW5kLW9ubHkgbWVzc2FnZS5cXG4rXFx0ICovXFxuK1xcdGlmICgoZmxhZ3MgXFx1MDAyNiBUQVBfSTJDX0ZMQUdfTk9TVEFSVCkgXFx1MDAyNlxcdTAwMjYgd3JpdGVfbGVuID09IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogaTJjX2dldF9hZGFwdGVyKCkgdGFrZXMgYSByZWZlcmVuY2UgdW5kZXIgY29yZV9sb2NrOyBzYWZlIGFnYWluc3RcXG4rXFx0ICogY29uY3VycmVudCBhZGFwdGVyIHVuYmluZC5cXG4rXFx0ICovXFxuK1xcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVxcdTAwM2V0YXBfaTJjX2FkYXBfbnIpKTtcXG4rXFx0aWYgKCFhZGFwKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdG5tc2dzID0gMDtcXG4rXFx0aWYgKHdyaXRlX2xlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0bXNnc1tubXNnc10uYWRkciAgPSBhZGRyO1xcbitcXHRcXHRtc2dzW25tc2dzXS5mbGFncyA9IDA7XFxuK1xcdFxcdG1zZ3Nbbm1zZ3NdLmxlbiAgID0gd3JpdGVfbGVuO1xcbitcXHRcXHRtc2dzW25tc2dzXS5idWYgICA9ICh1OCAqKXJlcSArIFRBUF9JMkNfUkVRX0hEUl9MRU47XFxuK1xcdFxcdG5tc2dzKys7XFxuK1xcdH1cXG4rXFx0aWYgKHJlYWRfbGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHR1MTYgcmRfZmxhZ3MgPSBJMkNfTV9SRDtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRBUF9JMkNfRkxBR19OT1NUQVJUKVxcbitcXHRcXHRcXHRyZF9mbGFncyB8PSBJMkNfTV9OT1NUQVJUO1xcbitcXHRcXHRtc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7XFxuK1xcdFxcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gcmRfZmxhZ3MgfCBJMkNfTV9ETUFfU0FGRTtcXG4rXFx0XFx0bXNnc1tubXNnc10ubGVuICAgPSByZWFkX2xlbjtcXG4rXFx0XFx0cmRidWYgPSBremFsbG9jKHJlYWRfbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFyZGJ1Zikge1xcbitcXHRcXHRcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1zZ3Nbbm1zZ3NdLmJ1ZiA9IHJkYnVmO1xcbitcXHRcXHRubXNncysrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZXJpYWxpc2UgdHJhbnNmZXIrcHVibGlzaCBzbyBjb25jdXJyZW50IHdyaXRlcnMgY2Fubm90IG92ZXJ3cml0ZVxcbitcXHQgKiBlYWNoIG90aGVyJ3MgcmVzcG9uc2UgaW4gdGFwX2kyY19yc3AuXFxuK1xcdCAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZicC1cXHUwMDNldGFwX2kyY19sb2NrKTtcXG4rXFx0cmV0ID0gaTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcXG4rXFx0aWYgKHJldCA9PSBubXNncykge1xcbitcXHRcXHRicC1cXHUwMDNldGFwX2kyY19yc3BbMF0gPSAwO1xcbitcXHRcXHRpZiAocmVhZF9sZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNmJwLVxcdTAwM2V0YXBfaTJjX3JzcFsxXSwgcmRidWYsIHJlYWRfbGVuKTtcXG4rXFx0XFx0YnAtXFx1MDAzZXRhcF9pMmNfcnNwX2xlbiA9IDEgKyByZWFkX2xlbjtcXG4rXFx0XFx0cmV0ID0gY291bnQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJwLVxcdTAwM2V0YXBfaTJjX3JzcFswXSAgPSB0YXBfaTJjX2Vycm5vX3RvX2J5dGUocmV0KTtcXG4rXFx0XFx0YnAtXFx1MDAzZXRhcF9pMmNfcnNwX2xlbiA9IDE7XFxuK1xcdFxcdHJldCA9IChyZXQgXFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicC1cXHUwMDNldGFwX2kyY19sb2NrKTtcXG4rXFx0a2ZyZWUocmRidWYpO1xcbitcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdFxcbitwdHBfb2NwX2NwbGRfaTJjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbitcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0ICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGtvYmpfdG9fZGV2KGtvYmopKTtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZicC1cXHUwMDNldGFwX2kyY19sb2NrKTtcXG4rXFx0aWYgKG9mZiBcXHUwMDNlPSBicC1cXHUwMDNldGFwX2kyY19yc3BfbGVuKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IG1pbihjb3VudCwgYnAtXFx1MDAzZXRhcF9pMmNfcnNwX2xlbiAtIChzaXplX3Qpb2ZmKTtcXG4rXFx0XFx0bWVtY3B5KGJ1ZiwgYnAtXFx1MDAzZXRhcF9pMmNfcnNwICsgb2ZmLCByZXQpO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZXRhcF9pMmNfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB0YXBfaTJjX2Jpbl9hdHRyID0ge1xcbitcXHQuYXR0ciAgPSB7IC5uYW1lID0gXFxcImNwbGRfaTJjX3hmZXJcXFwiLCAubW9kZSA9IDA2MDAgfSxcXG4rXFx0LndyaXRlID0gcHRwX29jcF9jcGxkX2kyY193cml0ZSxcXG4rXFx0LnJlYWQgID0gcHRwX29jcF9jcGxkX2kyY19yZWFkLFxcbit9O1xcbitcXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfYXR0cnNbXSA9IHtcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3NlcmlhbG51bS5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfZ25zc19zeW5jLmF0dHIsXFxuQEAgLTQyNzIsMTEgKzQ0NzcsMTggQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3RzX3dpbmRvd19hZGp1c3QuYXR0cixcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3V0Y190YWlfb2Zmc2V0LmF0dHIsXFxuIFxcdFxcdTAwMjZkZXZfYXR0cl90b2RfY29ycmVjdGlvbi5hdHRyLFxcbitcXHRcXHUwMDI2ZGV2X2F0dHJfaTJjX2J1c19jdHJsLmF0dHIsXFxuK1xcdE5VTEwsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzW10gPSB7XFxuK1xcdFxcdTAwMjZ0YXBfaTJjX2Jpbl9hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWR2YV90aW1lY2FyZF94MV9ncm91cCA9IHtcXG4tXFx0LmF0dHJzID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcXG4rXFx0LmF0dHJzICAgICA9IGFkdmFfdGltZWNhcmRfeDFfYXR0cnMsXFxuK1xcdC5iaW5fYXR0cnMgPSBiaW5fYWR2YV94MV90aW1lY2FyZF9hdHRycyxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYWR2YV90aW1lY2FyZF94MV9ncm91cHNbXSA9IHtcXG5AQCAtNDkwMiw2ICs1MTE0LDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKVxcbiBcXHRcXHRjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLVxcdTAwM2VpMmNfY2xrKTtcXG4gXFx0aWYgKGJwLVxcdTAwM2VuX2lycXMpXFxuIFxcdFxcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVxcdTAwM2VwZGV2KTtcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2YnAtXFx1MDAzZXRhcF9pMmNfbG9jayk7XFxuIFxcdGRldmljZV91bnJlZ2lzdGVyKFxcdTAwMjZicC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG5AQCAtNTA3OCw2ICs1MjkxLDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZTtcXG4gXFxuK1xcdC8qIE11c3QgYmUgYmVmb3JlIHRoZSBmaXJzdCBlcnJvciBwYXRoIHRoYXQgY2FsbHMgcHRwX29jcF9kZXRhY2goKSxcXG4rXFx0ICogc28gbXV0ZXhfZGVzdHJveSgpIGFsd2F5cyBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LlxcbitcXHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXFxuK1xcdCAqIG5vdGlmaWVyIChwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKSBmaXJlcyB3aGVuIHRoZSBhZGFwdGVyXFxuK1xcdCAqIHJlZ2lzdGVycyBhbmQgc3RvcmVzIHRoZSBhZGFwdGVyIG51bWJlciBpbiB0YXBfaTJjX2FkYXBfbnI7IHRoZVxcbitcXHQgKiAtMSBzZW50aW5lbCBiZWxvdyBtdXN0IGFscmVhZHkgYmUgd3JpdHRlbiBzbyB0aGF0IGEgbm90aWZpZXJcXG4rXFx0ICogZmlyaW5nIGR1cmluZyByZWdpc3RyYXRpb24gaXMgbmV2ZXIgb3ZlcndyaXR0ZW4gYnkgdGhpcyBpbml0LlxcbitcXHQgKi9cXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2YnAtXFx1MDAzZXRhcF9pMmNfbG9jayk7XFxuK1xcdGJwLVxcdTAwM2V0YXBfaTJjX2FkYXBfbnIgPSAtMTtcXG4rXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XFxuIFxcbiBcXHQvKiBjb21wYXQgbW9kZS5cXG5AQCAtNTIxNywxMSArNTQ0MSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIFxcbiBmb3VuZDpcXG4gXFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4tXFx0aWYgKGFkZClcXG4rXFx0aWYgKGFkZCkge1xcbiBcXHRcXHRwdHBfb2NwX3N5bWxpbmsoYnAsIGNoaWxkLCBcXFwiaTJjXFxcIik7XFxuLVxcdGVsc2VcXG4rXFx0XFx0LyogQ2FjaGUgYWRhcHRlciBudW1iZXI7IGNwbGRfaTJjX3hmZXIgdXNlcyBpMmNfZ2V0X2FkYXB0ZXIoKVxcbitcXHRcXHQgKiBmb3IgYSByZWZlcmVuY2UtY291bnRlZCwgdW5iaW5kLXNhZmUgbG9va3VwLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNldGFwX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLVxcdTAwM2Vucik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZXRhcF9pMmNfYWRhcF9uciwgLTEpO1xcdC8qIGludmFsaWRhdGUgYmVmb3JlIGZyZWUgKi9cXG4gXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmJwLVxcdTAwM2VkZXYua29iaiwgXFxcImkyY1xcXCIpO1xcbi1cXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MTguNzQ5NjMxNzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDA4MjE1MjgwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHRwX29jcF9jcGxkX2kyY193cml0ZVwiLFxuICAgIFwicHRwX29jcF9jcGxkX2kyY19yZWFkXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc3RvcmVcIixcbiAgICBcImkyY19idXNfY3RybF9zaG93XCIsXG4gICAgXCJ0YXBfaTJjX2Vycm5vX3RvX2J5dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGZkNGQwYmQ1ZThkMjlmOTM4MWYxMGRhMzdkOTU4Njg4YzAwZjIxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDE4OjQ2OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbmluZGV4IDNhZTQxYjc2MzRhYzllLi5jNjI3NjZkZjdhMjAyZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbkBAIC0xMSw2ICsxMSw2MiBAQCBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG4gRGVzY3JpcHRpb246XHRUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkXG4gXHRcdHJlZ2lzdGVyZWQuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXJcbitEYXRlOlx0XHRKdWx5IDIwMjZcbitDb250YWN0Olx0U2FnaSBNYWltb24gXHUwMDNjc2FnaS5tYWltb25AYWR2YS5jb21cdTAwM2VcbitEZXNjcmlwdGlvbjpcdChSVykgQmluYXJ5IHN5c2ZzIGF0dHJpYnV0ZSBwcm92aWRpbmcgYSByYXcgSTJDIHBhc3N0aHJvdWdoIHRvXG4rXHRcdHRoZSBDUExEIGFuZCBJMkMgbXV4IG9uIEFEVkEgeDEgVEFQIGJvYXJkcy4gIE9ubHkgcHJlc2VudCBvblxuK1x0XHR0aGF0IGJvYXJkIHZhcmlhbnQuXG4rXG4rXHRcdEVhY2ggd3JpdGUgaW5pdGlhdGVzIG9uZSBJMkMgdHJhbnNhY3Rpb24uICBUaGUgd3JpdGUgcGF5bG9hZFxuK1x0XHRtdXN0IGJlIGV4YWN0bHkgZm91ciBoZWFkZXIgYnl0ZXMgZm9sbG93ZWQgYnkgdGhlIHdyaXRlIGRhdGE6XG4rXG4rXHRcdCAgQnl0ZSAwOiBzbGF2ZSBhZGRyZXNzIChvbmx5IDB4NDAgYW5kIDB4NzQgYXJlIHBlcm1pdHRlZClcbitcdFx0ICBCeXRlIDE6IG51bWJlciBvZiBieXRlcyB0byB3cml0ZSAoMC4uNjcpXG4rXHRcdCAgQnl0ZSAyOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBiYWNrICgwLi4yMClcbitcdFx0ICBCeXRlIDM6IGZsYWdzXG4rXHRcdCAgICAgICAgICAgIGJpdCAwIC0gc3VwcHJlc3MgdGhlIHJlcGVhdGVkIFNUQVJUIGJlZm9yZSB0aGVcbitcdFx0ICAgICAgICAgICAgICAgICAgICByZWFkIHNlZ21lbnQgKEkyQ19NX05PU1RBUlQpOyBvbmx5IHZhbGlkXG4rXHRcdCAgICAgICAgICAgICAgICAgICAgd2hlbiBib3RoIHdyaXRlIGFuZCByZWFkIGxlbmd0aHMgYXJlXG4rXHRcdCAgICAgICAgICAgICAgICAgICAgbm9uLXplcm9cbitcdFx0ICBCeXRlcyA0Li46IHdyaXRlIGRhdGEgKHdyaXRlX2xlbiBieXRlcylcbitcbitcdFx0QSBzdWJzZXF1ZW50IHJlYWQoKSByZXR1cm5zOlxuK1xuK1x0XHQgIEJ5dGUgMDogc3RhdHVzICgwID0gc3VjY2VzcywgcG9zaXRpdmUgZXJybm8gb24gZXJyb3IpXG4rXHRcdCAgQnl0ZXMgMS4uOiByZWFkIGRhdGEgKHJlYWRfbGVuIGJ5dGVzKSwgcHJlc2VudCBvbmx5IHdoZW5cbitcdFx0ICAgICAgICAgICAgIHN0YXR1cyBpcyAwIGFuZCByZWFkX2xlbiBcdTAwM2UgMFxuK1xuK1x0XHRUaGUgd3JpdGUgYW5kIHJlYWQgcG9ydGlvbnMgb2YgdGhlIHN5c2ZzIGZpbGUgc2hhcmUgYSBzaW5nbGVcbitcdFx0cGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlXG4rXHRcdG9wZW4oKSAvIHdyaXRlKCkgLyByZWFkKCkgc2VxdWVuY2UgbXVzdCBiZSB1c2VkIHRvIGF2b2lkXG4rXHRcdGRhdGEgcmFjZXMgYmV0d2VlbiBjb25jdXJyZW50IHVzZXJzLlxuK1xuK1x0XHRPbmx5IHNsYXZlIGFkZHJlc3NlcyAweDQwIChMYXR0aWNlIENQTEQpIGFuZCAweDc0IChQQ0E5NTQ4XG4rXHRcdEkyQyBtdXgpIGFyZSBhY2NlcHRlZDsgYWxsIG90aGVycyByZXR1cm4gRVBFUk0uXG4rXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2kyY19idXNfY3RybFxuK0RhdGU6XHRcdEp1bHkgMjAyNlxuK0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NzYWdpLm1haW1vbkBhZHZhLmNvbVx1MDAzZVxuK0Rlc2NyaXB0aW9uOlx0KFJXKSBFeHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIgZm9yXG4rXHRcdHRoZSBzaGFyZWQgSTJDIGJ1cyBvbiBBRFZBIHgxIGFuZCB4MiBUQVAgYm9hcmRzLiAgT25seVxuK1x0XHRwcmVzZW50IHdoZW4gdGhlIGJvYXJkIGhhcyBhIHBwc19zZWxlY3QgcmVnaXN0ZXIgYmxvY2suXG4rXG4rXHRcdFVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlXG4rXHRcdGRyaXZpbmcgdGhlIGJ1czpcbitcbitcdFx0ICAxLiBSZWFkICAtIHZhbHVlIG11c3QgYmUgMHgwMDAwMDAwMCAoYnVzIGlzIGZyZWUpLlxuK1x0XHQgIDIuIFdyaXRlIC0gMHgwMDAwZmZmZiAocmVxdWVzdCBvd25lcnNoaXApLlxuK1x0XHQgIDMuIFBvbGwgIC0gcmVhZCB1bnRpbCB0aGUgdmFsdWUgaXMgMHhmZmZmZmZmZiAoTWljcm9CbGF6ZVxuK1x0XHQgICAgICAgICAgICAgaGFzIGFja25vd2xlZGdlZCB0aGUgaGFuZG92ZXIpLlxuK1xuK1x0XHRBZnRlciBhbGwgSTJDIHRyYWZmaWMgaXMgY29tcGxldGUgdGhlIGJ1cyBtdXN0IGJlIHJlbGVhc2VkXG4rXHRcdGJ5IHdyaXRpbmcgMHgwMDAwMDAwMC5cbitcbitcdFx0VGhlIHBvbGwgcmVhZCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkIGFuZCB0aGVyZWZvcmUgYWxzb1xuK1x0XHRmbHVzaGVzIHRoZSBwcmVjZWRpbmcgcG9zdGVkIHdyaXRlIHRvIHRoZSBGUEdBOyBub1xuK1x0XHRhZGRpdGlvbmFsIHJlYWQtYmFjayBpcyByZXF1aXJlZCBmb3Igb3JkZXJpbmcuXG4rXG4gV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXG4gRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjFcbiBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXG5pbmRleCAzNWU5MTFmMWFkNzhjMC4uNzlmZWM1MTYxYzk5N2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuQEAgLTE2Myw3ICsxNjMsOCBAQCBzdHJ1Y3QgZ3Bpb19yZWcge1xuIFx0dTMyXHRncGlvMTtcbiBcdHUzMlx0X19wYWQwO1xuIFx0dTMyXHRncGlvMjtcbi1cdHUzMlx0X19wYWQxO1xuK1x0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXG4rXHR1MzJcdGkyY19idXNfY3RybDtcbiB9O1xuIFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xuQEAgLTQxNiw2ICs0MTcsMTEgQEAgc3RydWN0IHB0cF9vY3Age1xuIFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XG4gXHRpbnQgc2lnbmFsc19ucjtcbiBcdGludCBmcmVxX2luX25yO1xuK1x0LyogY3BsZF9pMmNfeGZlciBzeXNmcyAoYWR2YV94MSkgKi9cbitcdHN0cnVjdCBtdXRleFx0XHR0YXBfaTJjX2xvY2s7XG4rXHRpbnRcdFx0XHR0YXBfaTJjX2FkYXBfbnI7IC8qIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xuK1x0dThcdFx0XHR0YXBfaTJjX3JzcFsyMV07IC8qIFtzdGF0dXMsIHJlYWRfZGF0YS4uLl0gKi9cbitcdHNpemVfdFx0XHRcdHRhcF9pMmNfcnNwX2xlbjtcbiB9O1xuIFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcdEJJVCgwKVxuQEAgLTQyMjQsNiArNDIzMCwyMDUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7XG4gXHR7IH0sXG4gfTtcbiBcbisvKlxuKyAqIGkyY19idXNfY3RybCBleHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuXG4rICpcbisgKiBUaGUgc2hhcmVkIGJ1cyByZXF1aXJlcyBhIHRocmVlLXN0ZXAgaGFuZHNoYWtlIGJlZm9yZSB1c2U6XG4rICogICByZWFkIDB4MDAwMDAwMDAgKGZyZWUpIC1cdTAwM2Ugd3JpdGUgMHgwMDAwZmZmZiAocmVxdWVzdCkgLVx1MDAzZVxuKyAqICAgcG9sbCB1bnRpbCAweGZmZmZmZmZmIChNaWNyb0JsYXplIGNvbmZpcm1zIHJlbGVhc2UpLlxuKyAqXG4rICogVGhlIHBvbGwgaXMgYSBQQ0llIG5vbi1wb3N0ZWQgcmVhZCwgd2hpY2ggYWxzbyBmbHVzaGVzIHRoZSBwcmVjZWRpbmdcbisgKiBwb3N0ZWQgd3JpdGUgdG8gdGhlIEZQR0EsIHNvIG5vIHNlcGFyYXRlIGtlcm5lbCByZWFkLWJhY2sgaXMgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90XG4raTJjX2J1c19jdHJsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0aWYgKCFicC1cdTAwM2VwcHNfc2VsZWN0KVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIweCUwOHhcXG5cIixcbitcdFx0XHQgIGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKSk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90XG4raTJjX2J1c19jdHJsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0dTMyIHZhbDtcbitcbitcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRpZiAoa3N0cnRvdTMyKGJ1ZiwgMCwgXHUwMDI2dmFsKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpb3dyaXRlMzIodmFsLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhpMmNfYnVzX2N0cmwpO1xuK1xuKy8qXG4rICogY3BsZF9pMmNfeGZlciAtIHN5c2ZzIGJpbmFyeSBJMkMgcGFzc3Rocm91Z2ggZm9yIGFkdmFfeDEgVEFQIENQTEQuXG4rICpcbisgKiB3cml0ZTogW2FkZHJdW3dyaXRlX2xlbl1bcmVhZF9sZW5dW2ZsYWdzXVt3cml0ZV9kYXRhLi4uXVxuKyAqICAgZmxhZ3MgYml0IDA6IEkyQ19NX05PU1RBUlQgb24gdGhlIHJlYWQgc2VnbWVudFxuKyAqIHJlYWQ6ICBbc3RhdHVzXVtyZWFkX2RhdGEuLi5dXG4rICogICBzdGF0dXMgMCA9IHN1Y2Nlc3MsIGVsc2UgcG9zaXRpdmUgZXJybm9cbisgKlxuKyAqIE9ubHkgYWRkcmVzc2VzIDB4NDAgKENQTEQpIGFuZCAweDc0IChtdXgpIGFyZSBwZXJtaXR0ZWQuXG4rICovXG4rI2RlZmluZSBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNICAyXG4rc3RhdGljIGNvbnN0IHU4IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNXSA9IHtcbitcdDB4NDAsIC8qIENQTEQgKi9cbitcdDB4NzQsIC8qIG11eCAgKi9cbit9O1xuK1xuKy8qXG4rICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLlxuKyAqXG4rICogRXJybm9zIFx1MDAzZSAyNTUgKGUuZy4gRU5PVFNVUFA9NTI0KSBvciBtdWx0aXBsZXMgb2YgMjU2IHdvdWxkIHRydW5jYXRlXG4rICogdG8gYSB3cm9uZyBvciB6ZXJvIHZhbHVlIHdpdGggYSBwbGFpbiAodTgpIGNhc3QuICBNYXAgdGhvc2UgdG8gRUlPLlxuKyAqL1xuK3N0YXRpYyB1OCB0YXBfaTJjX2Vycm5vX3RvX2J5dGUoaW50IGVycilcbit7XG4rXHRpbnQgdmFsID0gKGVyciBcdTAwM2MgMCkgPyAtZXJyIDogRUlPO1xuK1xuK1x0cmV0dXJuICh2YWwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2M9IDB4RkYpID8gKHU4KXZhbCA6IEVJTztcbit9XG4rXG4rI2RlZmluZSBUQVBfSTJDX1JFUV9IRFJfTEVOICAgNFxuKyNkZWZpbmUgVEFQX0kyQ19NQVhfV1JJVEVfTEVOIDY3XG4rI2RlZmluZSBUQVBfSTJDX01BWF9SRUFEX0xFTiAgMjBcbisjZGVmaW5lIFRBUF9JMkNfRkxBR19OT1NUQVJUICBCSVQoMClcbitcbitzdGF0aWMgc3NpemVfdFxuK3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHQgICAgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdCAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoa29ial90b19kZXYoa29iaikpO1xuK1x0Y29uc3QgdTggKnJlcSA9IChjb25zdCB1OCAqKWJ1ZjtcbitcdHU4IGFkZHIsIHdyaXRlX2xlbiwgcmVhZF9sZW4sIGZsYWdzO1xuK1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuK1x0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcbitcdHU4ICpyZGJ1ZiA9IE5VTEw7XG4rXHRpbnQgbm1zZ3MsIHJldCwgaTtcbitcbitcdC8qIEVhY2ggd3JpdGUgaXMgb25lIGF0b21pYyByZXF1ZXN0OyBub24temVybyBvZmZzZXQgbWVhbnMgYVxuK1x0ICogbWlkLWJ1ZmZlciBwd3JpdGUoKSB3aGljaCB3b3VsZCBtaXNwYXJzZSB0aGUgaGVhZGVyLlxuK1x0ICovXG4rXHRpZiAob2ZmICE9IDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGNvdW50IFx1MDAzYyBUQVBfSTJDX1JFUV9IRFJfTEVOIHx8IGNvdW50IFx1MDAzZSBUQVBfSTJDX1JFUV9IRFJfTEVOICsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGFkZHIgICAgICA9IHJlcVswXTtcbitcdHdyaXRlX2xlbiA9IHJlcVsxXTtcbitcdHJlYWRfbGVuICA9IHJlcVsyXTtcbitcdGZsYWdzICAgICA9IHJlcVszXTtcbitcbitcdC8qIFZhbGlkYXRlICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNOyBpKyspXG4rXHRcdGlmIChhZGRyID09IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tpXSlcbitcdFx0XHRicmVhaztcbitcdGlmIChpID09IFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0pXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRpZiAod3JpdGVfbGVuIFx1MDAzZSBUQVBfSTJDX01BWF9XUklURV9MRU4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHJlYWRfbGVuIFx1MDAzZSBUQVBfSTJDX01BWF9SRUFEX0xFTilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAod3JpdGVfbGVuICsgVEFQX0kyQ19SRVFfSERSX0xFTiBcdTAwM2UgY291bnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHdyaXRlX2xlbiA9PSAwIFx1MDAyNlx1MDAyNiByZWFkX2xlbiA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdC8qIEkyQ19NX05PU1RBUlQgc3VwcHJlc3NlcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmV0d2VlbiB3cml0ZSBhbmQgcmVhZFxuK1x0ICogc2VnbWVudHM7IGl0IGhhcyBubyBtZWFuaW5nIG9uIGEgZmlyc3QtYW5kLW9ubHkgbWVzc2FnZS5cbitcdCAqL1xuK1x0aWYgKChmbGFncyBcdTAwMjYgVEFQX0kyQ19GTEFHX05PU1RBUlQpIFx1MDAyNlx1MDAyNiB3cml0ZV9sZW4gPT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBpMmNfZ2V0X2FkYXB0ZXIoKSB0YWtlcyBhIHJlZmVyZW5jZSB1bmRlciBjb3JlX2xvY2s7IHNhZmUgYWdhaW5zdFxuK1x0ICogY29uY3VycmVudCBhZGFwdGVyIHVuYmluZC5cbitcdCAqL1xuK1x0YWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtXHUwMDNldGFwX2kyY19hZGFwX25yKSk7XG4rXHRpZiAoIWFkYXApXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0bm1zZ3MgPSAwO1xuK1x0aWYgKHdyaXRlX2xlbiBcdTAwM2UgMCkge1xuK1x0XHRtc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7XG4rXHRcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gMDtcbitcdFx0bXNnc1tubXNnc10ubGVuICAgPSB3cml0ZV9sZW47XG4rXHRcdG1zZ3Nbbm1zZ3NdLmJ1ZiAgID0gKHU4ICopcmVxICsgVEFQX0kyQ19SRVFfSERSX0xFTjtcbitcdFx0bm1zZ3MrKztcbitcdH1cbitcdGlmIChyZWFkX2xlbiBcdTAwM2UgMCkge1xuK1x0XHR1MTYgcmRfZmxhZ3MgPSBJMkNfTV9SRDtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBUQVBfSTJDX0ZMQUdfTk9TVEFSVClcbitcdFx0XHRyZF9mbGFncyB8PSBJMkNfTV9OT1NUQVJUO1xuK1x0XHRtc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7XG4rXHRcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gcmRfZmxhZ3MgfCBJMkNfTV9ETUFfU0FGRTtcbitcdFx0bXNnc1tubXNnc10ubGVuICAgPSByZWFkX2xlbjtcbitcdFx0cmRidWYgPSBremFsbG9jKHJlYWRfbGVuLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFyZGJ1Zikge1xuK1x0XHRcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuK1x0XHRtc2dzW25tc2dzXS5idWYgPSByZGJ1ZjtcbitcdFx0bm1zZ3MrKztcbitcdH1cbitcbitcdC8qIFNlcmlhbGlzZSB0cmFuc2ZlcitwdWJsaXNoIHNvIGNvbmN1cnJlbnQgd3JpdGVycyBjYW5ub3Qgb3ZlcndyaXRlXG4rXHQgKiBlYWNoIG90aGVyJ3MgcmVzcG9uc2UgaW4gdGFwX2kyY19yc3AuXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbitcdHJldCA9IGkyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4rXHRpZiAocmV0ID09IG5tc2dzKSB7XG4rXHRcdGJwLVx1MDAzZXRhcF9pMmNfcnNwWzBdID0gMDtcbitcdFx0aWYgKHJlYWRfbGVuIFx1MDAzZSAwKVxuK1x0XHRcdG1lbWNweShcdTAwMjZicC1cdTAwM2V0YXBfaTJjX3JzcFsxXSwgcmRidWYsIHJlYWRfbGVuKTtcbitcdFx0YnAtXHUwMDNldGFwX2kyY19yc3BfbGVuID0gMSArIHJlYWRfbGVuO1xuK1x0XHRyZXQgPSBjb3VudDtcbitcdH0gZWxzZSB7XG4rXHRcdGJwLVx1MDAzZXRhcF9pMmNfcnNwWzBdICA9IHRhcF9pMmNfZXJybm9fdG9fYnl0ZShyZXQpO1xuK1x0XHRicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4gPSAxO1xuK1x0XHRyZXQgPSAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbitcdGtmcmVlKHJkYnVmKTtcbitcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90XG4rcHRwX29jcF9jcGxkX2kyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdCAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShrb2JqX3RvX2Rldihrb2JqKSk7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbitcdGlmIChvZmYgXHUwMDNlPSBicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4pIHtcbitcdFx0cmV0ID0gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IG1pbihjb3VudCwgYnAtXHUwMDNldGFwX2kyY19yc3BfbGVuIC0gKHNpemVfdClvZmYpO1xuK1x0XHRtZW1jcHkoYnVmLCBicC1cdTAwM2V0YXBfaTJjX3JzcCArIG9mZiwgcmV0KTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlIHRhcF9pMmNfYmluX2F0dHIgPSB7XG4rXHQuYXR0ciAgPSB7IC5uYW1lID0gXCJjcGxkX2kyY194ZmVyXCIsIC5tb2RlID0gMDYwMCB9LFxuK1x0LndyaXRlID0gcHRwX29jcF9jcGxkX2kyY193cml0ZSxcbitcdC5yZWFkICA9IHB0cF9vY3BfY3BsZF9pMmNfcmVhZCxcbit9O1xuK1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzIsMTEgKzQ0NzcsMTggQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX3RzX3dpbmRvd19hZGp1c3QuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3V0Y190YWlfb2Zmc2V0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl90b2RfY29ycmVjdGlvbi5hdHRyLFxuK1x0XHUwMDI2ZGV2X2F0dHJfaTJjX2J1c19jdHJsLmF0dHIsXG4rXHROVUxMLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBiaW5fYWR2YV94MV90aW1lY2FyZF9hdHRyc1tdID0ge1xuK1x0XHUwMDI2dGFwX2kyY19iaW5fYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xuLVx0LmF0dHJzID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbitcdC5hdHRycyAgICAgPSBhZHZhX3RpbWVjYXJkX3gxX2F0dHJzLFxuK1x0LmJpbl9hdHRycyA9IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3Vwc1tdID0ge1xuQEAgLTQ5MDIsNiArNTExNCw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiBcdFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cdTAwM2VpMmNfY2xrKTtcbiBcdGlmIChicC1cdTAwM2VuX2lycXMpXG4gXHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVx1MDAzZXBkZXYpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuIFx0ZGV2aWNlX3VucmVnaXN0ZXIoXHUwMDI2YnAtXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtNTA3OCw2ICs1MjkxLDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4rXHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXG4rXHQgKiBzbyBtdXRleF9kZXN0cm95KCkgYWx3YXlzIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXguXG4rXHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXG4rXHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxuK1x0ICogcmVnaXN0ZXJzIGFuZCBzdG9yZXMgdGhlIGFkYXB0ZXIgbnVtYmVyIGluIHRhcF9pMmNfYWRhcF9ucjsgdGhlXG4rXHQgKiAtMSBzZW50aW5lbCBiZWxvdyBtdXN0IGFscmVhZHkgYmUgd3JpdHRlbiBzbyB0aGF0IGEgbm90aWZpZXJcbitcdCAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC5cbitcdCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuK1x0YnAtXHUwMDNldGFwX2kyY19hZGFwX25yID0gLTE7XG4rXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZicC1cdTAwM2VzeW5jX3dvcmssIHB0cF9vY3Bfc3luY193b3JrKTtcbiBcbiBcdC8qIGNvbXBhdCBtb2RlLlxuQEAgLTUyMTcsMTEgKzU0NDEsMTYgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIGZvdW5kOlxuIFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbi1cdGlmIChhZGQpXG4rXHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwiaTJjXCIpO1xuLVx0ZWxzZVxuK1x0XHQvKiBDYWNoZSBhZGFwdGVyIG51bWJlcjsgY3BsZF9pMmNfeGZlciB1c2VzIGkyY19nZXRfYWRhcHRlcigpXG4rXHRcdCAqIGZvciBhIHJlZmVyZW5jZS1jb3VudGVkLCB1bmJpbmQtc2FmZSBsb29rdXAuXG4rXHRcdCAqL1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZXRhcF9pMmNfYWRhcF9uciwgaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKS1cdTAwM2Vucik7XG4rXHR9IGVsc2Uge1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZXRhcF9pMmNfYWRhcF9uciwgLTEpO1x0LyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSAqL1xuIFx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZicC1cdTAwM2VkZXYua29iaiwgXCJpMmNcIik7XG4tXG4rXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjoxOC43NDk2MzM2NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjAyODM5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldyBQYXRjaCBmb3IgdGhlIFBUUCBPQ1AgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgaW50cm9kdWNlcyBzb21lIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIHRvIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgYWRkaW5nIGBpMmNfYnVzX2N0cmxgLCB3aGljaCBpcyByZWFkLXdyaXRlLCBhbmQgdGhlbiBgY3BsZF9pMmNfeGZlcmAsIHdoaWNoIGlzIGEgcmVhZC13cml0ZSBiaW5hcnkgYXR0cmlidXRlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLiBTaW5jZSBpdCBtb2RpZmllcyBhIGRyaXZlciwgaXQncyBhIGdvb2QgY2FuZGlkYXRlLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgdGhlIFwiT3BlbiBDb21wdXRlIFByb2plY3QgdGltZSBjYXJkXCIgZHJpdmVyLiBJIHJlbWVtYmVyIHRoaXMgb25lOyBpdCdzIGEgUENJIGRldmljZSBkcml2ZXIuIFRoZSBwcm9iZSBmdW5jdGlvbiBpcyBgcHRwX29jcF9wcm9iZWAsIGFuZCB0aGUgcGF0Y2ggYWRkcyB0aGVzZSBuZXcgc3lzZnMgYXR0cmlidXRlcy4gTm93LCBjYW4gc3l6a2FsbGVyIGhhbmRsZSB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzPyBZZXMsIGl0IGFic29sdXRlbHkgY2FuLiBFaXRoZXIgaWYgdGhlcmUgYXJlIGRpcmVjdCBkZXNjcmlwdGlvbnMgb3IgZXZlbiBqdXN0IHRocm91Z2ggZ2VuZXJpYyBzeXNmcyBmdXp6aW5nLiBBY3R1YWxseSwgSSBzZWVtIHRvIHJlY2FsbCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgc3lzZnMgZGVzY3JpcHRpb25zLiBHcmVhdC4gVGhhdCdzIGEgaHVnZSBwbHVzLlxuXG5UaGUgbmV4dCBzdGVwLCBhbHdheXMsIGlzIHRvIGNoZWNrIGlmIGBwdHBfb2NwYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0J3MgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IG5vIHBvaW50IGluIHRyeWluZyB0byBmdXp6IHNvbWV0aGluZyB0aGF0IGlzbid0IGJ1aWx0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTYwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MjMuOTUyNDc1NTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjY5ODQyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9LY29uZmlnPTE5OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIwOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjIxMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIk9wZW5Db21wdXRlIFRpbWVDYXJkIGFzIFBUUCBjbG9ja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MjYuMzE5NDY0OTU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1Njc0NzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgcGllY2VzIHRoaXMgdGhpbmcgcmVsaWVzIG9uLiBJIGNhbid0IGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGlzc3VlcyB1bnRpbCBJIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBsaWtlIGJ1aWxkaW5nIGEgaG91c2Ug4oCTIHlvdSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIGZvdW5kYXRpb24sIGZyYW1pbmcsIGFuZCB1dGlsaXRpZXMgYXJlIGNvbWluZyBmcm9tIGJlZm9yZSB5b3UgY2FuIGV2ZW4gdGhpbmsgYWJvdXQgdGhlIGludGVyaW9yIGRlc2lnbi4gSSBuZWVkIHRvIGtub3cgKmV2ZXJ5dGhpbmcqIGl0J3MgdGllZCB0by4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJjb25uZWN0aW9ucyBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MjkuMjc2MjE0NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwMTU0OTM3OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjozMi4yNzc3NzU2NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2MjIwOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIEtjb25maWcgZW50cnk6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEVudHJ5IGZvciBQVFBfMTU4OF9DTE9DS19PQ1AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgb3IgcmVjb21tZW5kYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtjb25maWcgb3B0aW9uLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgaW5zaWRlIGFuZCBvdXQuIEknbSBnb2luZyB0byBzdGFydCBieSBtZXRpY3Vsb3VzbHkgcmVhZGluZyBpdC4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgaW1wbGljYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgbXkgY3VycmVudCBhcmNoaXRlY3R1cmUgb3IgcHJvamVjdCBnb2Fscz8gSSdtIGxvb2tpbmcgZm9yIHRoZSBncmFudWxhciBkZXRhaWxzIOKAkyB0aGUgc3VidGxldGllcyB0aGF0IHdpbGwgZGVmaW5lIGhvdyB0aGlzIGNsb2NrIGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kIHdoZXRoZXIgaXQgdHJ1bHkgbGV2ZXJhZ2VzIE9DUCBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIGtub3cgaG93IGl0IG1pZ2h0IGFmZmVjdCB0aGUgcHJlY2lzaW9uIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgUFRQIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGtlZXBpbmcgYW4gb3BlbiBtaW5kIGFzIEkgcmVhZCwgYW5kIG1ha2Ugbm90ZXMgb2YgdGhlIGFzc3VtcHRpb25zIHRoZSBhdXRob3IgbWF5IGhhdmUgbWFkZSBhbmQgd2hhdCBwb3NzaWJsZSBlZGdlLWNhc2VzIG1heSBuZWVkIGF0dGVudGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MzUuODgzOTk4ODAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxcbiAyMTE6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW5Db21wdXRlIFRpbWVDYXJkIGFzIFBUUCBjbG9ja1xcXCJcXG4gMjEyOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gMjEzOlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTVREXFxuIDIxNTpcXHRcXHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXFxuIDIxNjpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuIDIxNzpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gMjE4OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAyMTk6XFx0XFx0c2VsZWN0IENSQzE2XFxuIDIyMDpcXHRcXHRzZWxlY3QgRFBMTFxcbiAyMjE6XFx0XFx0aGVscFxcbiAyMjI6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ICBUaGUgT3BlbkNvbXB1dGUgdGltZSBjYXJkIGlzIGFuIGF0b21pYyBjbG9jayBhbG9uZyB3aXRoXFxuIDIyNTpcXHRcXHQgIGEgR1BTIHJlY2VpdmVyIHRoYXQgcHJvdmlkZXMgYSBHcmFuZG1hc3RlciBjbG9jayBzb3VyY2VcXG4gMjI2OlxcdFxcdCAgZm9yIGEgUFRQIGVuYWJsZWQgbmV0d29yay5cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnRpbWluZ2NhcmQuY29tL1xcbiAyMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjM1Ljg4NDA2OTA1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNzE2NzUzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQSBEZWVwIERpdmUgaW50byB0aGUgUFRQIE9DUCBDUExEIEkyQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgZGVwZW5kZW5jaWVzOiBQQ0ksIEkyQywgTVRELCBTRVJJQUxfODI1MCwgYW5kIENPTU1PTl9DTEsuIEl0J3MgYSBQQ0kgZHJpdmVyLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbWVhbnMgU3l6a2FsbGVyIGNhbiBwcm9iYWJseSB1c2UgdlBDSSB0byBmdXp6IGl0LiBNeSBrZXkgZm9jdXMgcmlnaHQgbm93IGlzIHRoYXQgdGhpcyBkcml2ZXIgcmVnaXN0ZXJzIHN5c2ZzIGF0dHJpYnV0ZXMgLSBhbHdheXMgYSBncmVhdCBhdHRhY2sgc3VyZmFjZS5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGVzZSBmdW5jdGlvbnM6IGBpMmNfYnVzX2N0cmxfc2hvd2AsIGBpMmNfYnVzX2N0cmxfc3RvcmVgLCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAsIGFuZCBgcHRwX29jcF9jcGxkX2kyY19yZWFkYC4gVGhlIGJpZyBxdWVzdGlvbiBpcywgY2FuIEkgcmVhY2ggYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgPyBCaW5nbyEgSXQncyBhIHN5c2ZzIGJpbmFyeSBhdHRyaWJ1dGUgd3JpdGUgZnVuY3Rpb24sIGFuZCBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgZnV6emluZyBzeXNmcy5cblxuTm93LCBsZXQncyBzZWUgaWYgYHB0cF9vY3BgIGlzIGEgbW9kdWxlIG9yIGJ1aWx0LWluLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBjYW4gYmUgYnVpbHQtaW4gaWYgd2UgZW5hYmxlIGBQVFBfMTU4OF9DTE9DS19PQ1BgLiBTbywgSSdsbCBmb2N1cyBvbiB0aGVzZSBmb3VyOiBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAsIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgLCBgaTJjX2J1c19jdHJsX3N0b3JlYCwgYW5kIGBpMmNfYnVzX2N0cmxfc2hvd2AuXG5cbkkgc2VlIHNvbWUgb3RoZXIgZnVuY3Rpb25zLCBidXQgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWAgaXMgY2xlYXJseSBhIGhlbHBlciwgYW5kIGBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsYCBzZWVtcyB0byBoYXZlIHNvbWUgbW9kaWZpY2F0aW9ucy5cblxuSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSEgSXQncyBhZGRpbmcgbmV3IHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBwYXJzZSB1c2VyIGlucHV0LCBpbnRlcmFjdCB3aXRoIEkyQywgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIGlzIGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBwYXJzZXMgYSBoZWFkZXIsIGNyYWZ0cyBJMkMgbWVzc2FnZXMsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBjYWxscyBgaTJjX3RyYW5zZmVyYCAtIGEgY2xhc3NpYyByZWNpcGUgZm9yIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy5cblxuTm93LCBJJ20gdmVyaWZ5aW5nIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWcsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQncyB0aGUgbWFpbiBrZXkuIEJ1dCB3YWl0LCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgdXNlcyBgaTJjX2dldF9hZGFwdGVyYCBhbmQgYGkyY190cmFuc2ZlcmAsIGFuZCBJJ20gYWx3YXlzIHRoaW5raW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IEFEVkEgeDEgVEFQIGJvYXJkIHNwZWNpZmljIGNvbmZpZ3M/IFF1aWNrIGNoZWNrIG9mIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGZvciBgYWR2YV94MWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgY292ZXJzIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjQ0LjE1NTc0NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTk4ODk3NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWR2YV94MVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTYyPXN0cnVjdCBncGlvX3JlZyB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTY1LVxcdHUzMlxcdGdwaW8yO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxNjY6XFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTE2Ny1cXHR1MzJcXHRpMmNfYnVzX2N0cmw7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzYwPXN0cnVjdCBwdHBfb2NwIHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MTktXFx0aW50IGZyZXFfaW5fbnI7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQyMDpcXHQvKiBjcGxkX2kyY194ZmVyIHN5c2ZzIChhZHZhX3gxKSAqL1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjEtXFx0c3RydWN0IG11dGV4XFx0XFx0dGFwX2kyY19sb2NrO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTQ1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NTk6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcDtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDYwLVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTkxNT1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV9yZXNvdXJjZVtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNzktXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwODA6c3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA4MS1cXHR7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI3Ny1cXHRcXHRcXHQuZmxhc2hfc3RhcnQgID0gMHgxMDAwMDAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjc4OlxcdFxcdFxcdC5zbWFfb3AgICAgICAgPSBcXHUwMDI2b2NwX2FkdmFfeDFfc21hX29wLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjc5LVxcdFxcdFxcdC5zaWduYWxzX25yICAgPSA0LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTEyODc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI5MS1cXHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjkyOlxcdHsgUENJX0RFVklDRV9EQVRBKEFEVkEsIFRJTUVDQVJEX1gxLCBcXHUwMDI2b2NwX2FkdmFfeDFfcmVzb3VyY2UpIH0sXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTMtXFx0eyB9XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2FkdmFfc21hX291dFtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzODgtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzODk6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9hZHZhX3gxX3NtYV9pbltdID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzkwLVxcdHsgLm5hbWUgPSBcXFwiUFBTMVxcXCIsXFx0LnZhbHVlID0gMHgwMDAxLCAgICAgIC5mcmVxdWVuY3kgPSAxIH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTQwMi1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTQwMzpzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2FkdmFfeDFfc21hX291dFtdID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNDA0LVxcdHsgLm5hbWUgPSBcXFwiMTBNaHpcXFwiLFxcdC52YWx1ZSA9IDB4MDAwMCwgIC5mcmVxdWVuY3kgPSAxMDAwMDAwMH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjkwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI5MTItXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcCA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MjkxNDpcXHQudGJsXFx0XFx0PSB7IHB0cF9vY3BfYWR2YV94MV9zbWFfaW4sIHB0cF9vY3BfYWR2YV94MV9zbWFfb3V0IH0sXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI5MTUtXFx0LmluaXRcXHRcXHQ9IHB0cF9vY3Bfc21hX2ZiX2luaXQsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDI2OT1zdGF0aWMgREVWSUNFX0FUVFJfUlcoaTJjX2J1c19jdHJsKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjcxLS8qXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQyNzI6ICogY3BsZF9pMmNfeGZlciAtIHN5c2ZzIGJpbmFyeSBJMkMgcGFzc3Rocm91Z2ggZm9yIGFkdmFfeDEgVEFQIENQTEQuXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQyNzMtICpcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00NDY0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDQ4My1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDQ4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzW10gPSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ0ODUtXFx0XFx1MDAyNnRhcF9pMmNfYmluX2F0dHIsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDQ4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NDkwLVxcdC5hdHRycyAgICAgPSBhZHZhX3RpbWVjYXJkX3gxX2F0dHJzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NDkxOlxcdC5iaW5fYXR0cnMgPSBiaW5fYWR2YV94MV90aW1lY2FyZF9hdHRycyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDQ5Mi19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo0Ny43NTU2NDI5NDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MzgzMDQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQURWQSB4MSBUQVAgQm9hcmQgSTJDIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIHRoZSBgYWR2YV94MWAgaXMgZXNzZW50aWFsbHkganVzdCBhbm90aGVyIFBDSSBkZXZpY2UgdmFyaWFudC4gVGhhdCBtZWFucyBTeXprYWxsZXIgY2FuLCBhbmQgc2hvdWxkLCBmdXp6IGl0LiBUaGUga2V5IGlzIHNldHRpbmcgdXAgdGhlIFBDSSBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgdmVuZG9yL2RldmljZSBJRC4gVGhlIHN5c2ZzIGF0dHJpYnV0ZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBgYWR2YV94MWAgdmFyaWFudCwgc28gd2UncmUgb25seSBmdXp6aW5nIHRoZSByaWdodCB0YXJnZXQuIFN5emthbGxlcidzIHZpcnR1YWwgUENJIHN1cHBvcnQgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMgZW11bGF0aW9uLiBUaGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBQVFBfMTU4OF9DTE9DS19PQ1BgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBQVFBfMTU4OF9DTE9DS19PQ1BgIGlzICphbGwqIHdlIG5lZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3B0cC9LY29uZmlnYCBmaWxlLi4uIFllcCwgaXQgZGVwZW5kcyBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCBgSEFTX0lPTUVNYCwgYFBDSWAsIGBJMkNgLCBgTVREYCwgYFNFUklBTF84MjUwYCwgYW5kIGBDT01NT05fQ0xLYCwgYnV0IHdlIGNhbiBlbmFibGUgdGhvc2UgZnJvbSB0aGUgYmFzZSBjb25maWcuIEp1c3QgZW5hYmxpbmcgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgZW5vdWdoLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEl0J3M6XG4qICAgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgXG4qICAgYHB0cF9vY3BfY3BsZF9pMmNfcmVhZGBcbiogICBgaTJjX2J1c19jdHJsX3N0b3JlYFxuKiAgIGBpMmNfYnVzX2N0cmxfc2hvd2BcblxuSXMgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWAgd29ydGggaW5jbHVkaW5nPyBJdCdzIGEgc21hbGwgaGVscGVyLCBidXQgaXQncyBwYXJ0IG9mIHRoaXMgbmV3IGxvZ2ljLCBzbyBsZXQncyBhZGQgaXQuIFdoYXQgYWJvdXQgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgPyBUaGF0J3MgYmVlbiBtb2RpZmllZCwgYnV0IGl0J3MgYW4gZXhpc3RpbmcgZnVuY3Rpb24sIHNvIG5vdCBjcml0aWNhbCBmb3IgZnV6emluZy4gSXQncyBwYXJ0IG9mIHRoZSBiYXNlIGRyaXZlci5cblxuUXVpY2sgZG91YmxlLWNoZWNrOiBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBzcGVjaWZpYyBjb25maWcgd2UgbmVlZC5cblxuUmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbiBjb25maXJtcyB0aGUga2V5IGFkZGl0aW9uczpcbiogICBgaTJjX2J1c19jdHJsX3Nob3dgXG4qICAgYGkyY19idXNfY3RybF9zdG9yZWBcbiogICBgdGFwX2kyY19lcnJub190b19ieXRlYFxuKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYFxuKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgXG5cblRoZXNlIGFyZSBhbGwgKm5ldyogZnVuY3Rpb25zIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMuIFRoaXMgbWFrZXMgdGhlbSBpZGVhbCBmdXp6aW5nIHRhcmdldHMgZm9yIFN5emthbGxlci5cblxuVGhlcmVmb3JlLCBoZXJlJ3Mgd2hhdCBJJ2xsIGRvOlxuXG4qICAgU2V0IGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgU2V0IGBGb2N1c1N5bWJvbHM6YCB0bzpcbiAgICAqICAgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgXG4gICAgKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgXG4gICAgKiAgIGBpMmNfYnVzX2N0cmxfc3RvcmVgXG4gICAgKiAgIGBpMmNfYnVzX2N0cmxfc2hvd2BcbiAgICAqICAgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWBcbiogICBTZXQgYEVuYWJsZUNvbmZpZ3M6YCB0bzpcbiAgICAqICAgYFBUUF8xNTg4X0NMT0NLX09DUGBcblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSBpbiB0aGUgYHB0cF9vY3BgIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYWxsb3cgdXNlcnNwYWNlIHRvIGluaXRpYXRlIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIEluIHBhcnRpY3VsYXIsIHRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB1c2VyIGlucHV0LCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIEkyQyB0cmFuc2ZlciBpbml0aWF0aW9uOyB0aGlzIGlzIGNvbXBsZXggZnVuY3Rpb25hbCBsb2dpYyBhbmQgdGhlcmVmb3JlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4OCwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6NTkuNDkzOTUxNzA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyMDQzMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBUUF8xNTg4X0NMT0NLX09DUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfd3JpdGVcIixcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfcmVhZFwiLFxuICAgIFwiaTJjX2J1c19jdHJsX3N0b3JlXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc2hvd1wiLFxuICAgIFwidGFwX2kyY19lcnJub190b19ieXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBUUF8xNTg4X0NMT0NLX09DUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfd3JpdGVcIixcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfcmVhZFwiLFxuICAgIFwiaTJjX2J1c19jdHJsX3N0b3JlXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc2hvd1wiLFxuICAgIFwidGFwX2kyY19lcnJub190b19ieXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 18:20:44 +0000 UTC FinishedAt: 2026-07-24 18:47:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_OCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_OCP" ], "series_id": "33a9d490-d982-47ae-a45b-bdf633c3edfc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ptp_ocp_cpld_i2c_write", "ptp_ocp_cpld_i2c_read", "i2c_bus_ctrl_store", "i2c_bus_ctrl_show", "tap_i2c_errno_to_byte" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX09DUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUmIzM0OywKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY19yZWFkJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zdG9yZSYjMzQ7LAogICAgJiMzNDtpMmNfYnVzX2N0cmxfc2hvdyYjMzQ7LAogICAgJiMzNDt0YXBfaTJjX2Vycm5vX3RvX2J5dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGZkNGQwYmQ1ZThkMjlmOTM4MWYxMGRhMzdkOTU4Njg4YzAwZjIxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDE4OjQ2OjE2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5pbmRleCAzYWU0MWI3NjM0YWM5ZS4uYzYyNzY2ZGY3YTIwMmUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5AQCAtMTEsNiAmIzQzOzExLDYyIEBAIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcbiBcdFx0cmVnaXN0ZXJlZC5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXJcbiYjNDM7RGF0ZTpcdFx0SnVseSAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NzYWdpLm1haW1vbkBhZHZhLmNvbVx1MDAzZVxuJiM0MztEZXNjcmlwdGlvbjpcdChSVykgQmluYXJ5IHN5c2ZzIGF0dHJpYnV0ZSBwcm92aWRpbmcgYSByYXcgSTJDIHBhc3N0aHJvdWdoIHRvXG4mIzQzO1x0XHR0aGUgQ1BMRCBhbmQgSTJDIG11eCBvbiBBRFZBIHgxIFRBUCBib2FyZHMuICBPbmx5IHByZXNlbnQgb25cbiYjNDM7XHRcdHRoYXQgYm9hcmQgdmFyaWFudC5cbiYjNDM7XG4mIzQzO1x0XHRFYWNoIHdyaXRlIGluaXRpYXRlcyBvbmUgSTJDIHRyYW5zYWN0aW9uLiAgVGhlIHdyaXRlIHBheWxvYWRcbiYjNDM7XHRcdG11c3QgYmUgZXhhY3RseSBmb3VyIGhlYWRlciBieXRlcyBmb2xsb3dlZCBieSB0aGUgd3JpdGUgZGF0YTpcbiYjNDM7XG4mIzQzO1x0XHQgIEJ5dGUgMDogc2xhdmUgYWRkcmVzcyAob25seSAweDQwIGFuZCAweDc0IGFyZSBwZXJtaXR0ZWQpXG4mIzQzO1x0XHQgIEJ5dGUgMTogbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlICgwLi42NylcbiYjNDM7XHRcdCAgQnl0ZSAyOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBiYWNrICgwLi4yMClcbiYjNDM7XHRcdCAgQnl0ZSAzOiBmbGFnc1xuJiM0MztcdFx0ICAgICAgICAgICAgYml0IDAgLSBzdXBwcmVzcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmVmb3JlIHRoZVxuJiM0MztcdFx0ICAgICAgICAgICAgICAgICAgICByZWFkIHNlZ21lbnQgKEkyQ19NX05PU1RBUlQpOyBvbmx5IHZhbGlkXG4mIzQzO1x0XHQgICAgICAgICAgICAgICAgICAgIHdoZW4gYm90aCB3cml0ZSBhbmQgcmVhZCBsZW5ndGhzIGFyZVxuJiM0MztcdFx0ICAgICAgICAgICAgICAgICAgICBub24temVyb1xuJiM0MztcdFx0ICBCeXRlcyA0Li46IHdyaXRlIGRhdGEgKHdyaXRlX2xlbiBieXRlcylcbiYjNDM7XG4mIzQzO1x0XHRBIHN1YnNlcXVlbnQgcmVhZCgpIHJldHVybnM6XG4mIzQzO1xuJiM0MztcdFx0ICBCeXRlIDA6IHN0YXR1cyAoMCA9IHN1Y2Nlc3MsIHBvc2l0aXZlIGVycm5vIG9uIGVycm9yKVxuJiM0MztcdFx0ICBCeXRlcyAxLi46IHJlYWQgZGF0YSAocmVhZF9sZW4gYnl0ZXMpLCBwcmVzZW50IG9ubHkgd2hlblxuJiM0MztcdFx0ICAgICAgICAgICAgIHN0YXR1cyBpcyAwIGFuZCByZWFkX2xlbiBcdTAwM2UgMFxuJiM0MztcbiYjNDM7XHRcdFRoZSB3cml0ZSBhbmQgcmVhZCBwb3J0aW9ucyBvZiB0aGUgc3lzZnMgZmlsZSBzaGFyZSBhIHNpbmdsZVxuJiM0MztcdFx0cGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlXG4mIzQzO1x0XHRvcGVuKCkgLyB3cml0ZSgpIC8gcmVhZCgpIHNlcXVlbmNlIG11c3QgYmUgdXNlZCB0byBhdm9pZFxuJiM0MztcdFx0ZGF0YSByYWNlcyBiZXR3ZWVuIGNvbmN1cnJlbnQgdXNlcnMuXG4mIzQzO1xuJiM0MztcdFx0T25seSBzbGF2ZSBhZGRyZXNzZXMgMHg0MCAoTGF0dGljZSBDUExEKSBhbmQgMHg3NCAoUENBOTU0OFxuJiM0MztcdFx0STJDIG11eCkgYXJlIGFjY2VwdGVkOyBhbGwgb3RoZXJzIHJldHVybiBFUEVSTS5cbiYjNDM7XG4mIzQzO1doYXQ6XHRcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9pMmNfYnVzX2N0cmxcbiYjNDM7RGF0ZTpcdFx0SnVseSAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NzYWdpLm1haW1vbkBhZHZhLmNvbVx1MDAzZVxuJiM0MztEZXNjcmlwdGlvbjpcdChSVykgRXhwb3NlcyB0aGUgTWljcm9CbGF6ZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyIGZvclxuJiM0MztcdFx0dGhlIHNoYXJlZCBJMkMgYnVzIG9uIEFEVkEgeDEgYW5kIHgyIFRBUCBib2FyZHMuICBPbmx5XG4mIzQzO1x0XHRwcmVzZW50IHdoZW4gdGhlIGJvYXJkIGhhcyBhIHBwc19zZWxlY3QgcmVnaXN0ZXIgYmxvY2suXG4mIzQzO1xuJiM0MztcdFx0VXNlcnNwYWNlIG11c3QgY29tcGxldGUgYSB0aHJlZS1zdGVwIGhhbmRzaGFrZSBiZWZvcmVcbiYjNDM7XHRcdGRyaXZpbmcgdGhlIGJ1czpcbiYjNDM7XG4mIzQzO1x0XHQgIDEuIFJlYWQgIC0gdmFsdWUgbXVzdCBiZSAweDAwMDAwMDAwIChidXMgaXMgZnJlZSkuXG4mIzQzO1x0XHQgIDIuIFdyaXRlIC0gMHgwMDAwZmZmZiAocmVxdWVzdCBvd25lcnNoaXApLlxuJiM0MztcdFx0ICAzLiBQb2xsICAtIHJlYWQgdW50aWwgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemVcbiYjNDM7XHRcdCAgICAgICAgICAgICBoYXMgYWNrbm93bGVkZ2VkIHRoZSBoYW5kb3ZlcikuXG4mIzQzO1xuJiM0MztcdFx0QWZ0ZXIgYWxsIEkyQyB0cmFmZmljIGlzIGNvbXBsZXRlIHRoZSBidXMgbXVzdCBiZSByZWxlYXNlZFxuJiM0MztcdFx0Ynkgd3JpdGluZyAweDAwMDAwMDAwLlxuJiM0MztcbiYjNDM7XHRcdFRoZSBwb2xsIHJlYWQgaXMgYSBQQ0llIG5vbi1wb3N0ZWQgcmVhZCBhbmQgdGhlcmVmb3JlIGFsc29cbiYjNDM7XHRcdGZsdXNoZXMgdGhlIHByZWNlZGluZyBwb3N0ZWQgd3JpdGUgdG8gdGhlIEZQR0E7IG5vXG4mIzQzO1x0XHRhZGRpdGlvbmFsIHJlYWQtYmFjayBpcyByZXF1aXJlZCBmb3Igb3JkZXJpbmcuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlc1xuIERhdGU6XHRcdFNlcHRlbWJlciAyMDIxXG4gQ29udGFjdDpcdEpvbmF0aGFuIExlbW9uIFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuaW5kZXggMzVlOTExZjFhZDc4YzAuLjc5ZmVjNTE2MWM5OTdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX29jcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbkBAIC0xNjMsNyAmIzQzOzE2Myw4IEBAIHN0cnVjdCBncGlvX3JlZyB7XG4gXHR1MzJcdGdwaW8xO1xuIFx0dTMyXHRfX3BhZDA7XG4gXHR1MzJcdGdwaW8yO1xuLVx0dTMyXHRfX3BhZDE7XG4mIzQzO1x0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXG4mIzQzO1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiAmIzQzOzQxNywxMSBAQCBzdHJ1Y3QgcHRwX29jcCB7XG4gXHRkcGxsX3RyYWNrZXIgdHJhY2tlcjtcbiBcdGludCBzaWduYWxzX25yO1xuIFx0aW50IGZyZXFfaW5fbnI7XG4mIzQzO1x0LyogY3BsZF9pMmNfeGZlciBzeXNmcyAoYWR2YV94MSkgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0dGFwX2kyY19sb2NrO1xuJiM0MztcdGludFx0XHRcdHRhcF9pMmNfYWRhcF9ucjsgLyogYWRhcHRlciBucjsgLTEgaWYgYWJzZW50ICovXG4mIzQzO1x0dThcdFx0XHR0YXBfaTJjX3JzcFsyMV07IC8qIFtzdGF0dXMsIHJlYWRfZGF0YS4uLl0gKi9cbiYjNDM7XHRzaXplX3RcdFx0XHR0YXBfaTJjX3JzcF9sZW47XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXHRCSVQoMClcbkBAIC00MjI0LDYgJiM0Mzs0MjMwLDIwNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHtcbiBcdHsgfSxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBpMmNfYnVzX2N0cmwgZXhwb3NlcyB0aGUgTWljcm9CbGF6ZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgc2hhcmVkIGJ1cyByZXF1aXJlcyBhIHRocmVlLXN0ZXAgaGFuZHNoYWtlIGJlZm9yZSB1c2U6XG4mIzQzOyAqICAgcmVhZCAweDAwMDAwMDAwIChmcmVlKSAtXHUwMDNlIHdyaXRlIDB4MDAwMGZmZmYgKHJlcXVlc3QpIC1cdTAwM2VcbiYjNDM7ICogICBwb2xsIHVudGlsIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemUgY29uZmlybXMgcmVsZWFzZSkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBwb2xsIGlzIGEgUENJZSBub24tcG9zdGVkIHJlYWQsIHdoaWNoIGFsc28gZmx1c2hlcyB0aGUgcHJlY2VkaW5nXG4mIzQzOyAqIHBvc3RlZCB3cml0ZSB0byB0aGUgRlBHQSwgc28gbm8gc2VwYXJhdGUga2VybmVsIHJlYWQtYmFjayBpcyBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0MztpMmNfYnVzX2N0cmxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VwcHNfc2VsZWN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsweCUwOHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3RcbiYjNDM7aTJjX2J1c19jdHJsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdGlmIChrc3RydG91MzIoYnVmLCAwLCBcdTAwMjZ2YWwpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aW93cml0ZTMyKHZhbCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JXKGkyY19idXNfY3RybCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBjcGxkX2kyY194ZmVyIC0gc3lzZnMgYmluYXJ5IEkyQyBwYXNzdGhyb3VnaCBmb3IgYWR2YV94MSBUQVAgQ1BMRC5cbiYjNDM7ICpcbiYjNDM7ICogd3JpdGU6IFthZGRyXVt3cml0ZV9sZW5dW3JlYWRfbGVuXVtmbGFnc11bd3JpdGVfZGF0YS4uLl1cbiYjNDM7ICogICBmbGFncyBiaXQgMDogSTJDX01fTk9TVEFSVCBvbiB0aGUgcmVhZCBzZWdtZW50XG4mIzQzOyAqIHJlYWQ6ICBbc3RhdHVzXVtyZWFkX2RhdGEuLi5dXG4mIzQzOyAqICAgc3RhdHVzIDAgPSBzdWNjZXNzLCBlbHNlIHBvc2l0aXZlIGVycm5vXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgYWRkcmVzc2VzIDB4NDAgKENQTEQpIGFuZCAweDc0IChtdXgpIGFyZSBwZXJtaXR0ZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0gIDJcbiYjNDM7c3RhdGljIGNvbnN0IHU4IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNXSA9IHtcbiYjNDM7XHQweDQwLCAvKiBDUExEICovXG4mIzQzO1x0MHg3NCwgLyogbXV4ICAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLlxuJiM0MzsgKlxuJiM0MzsgKiBFcnJub3MgXHUwMDNlIDI1NSAoZS5nLiBFTk9UU1VQUD01MjQpIG9yIG11bHRpcGxlcyBvZiAyNTYgd291bGQgdHJ1bmNhdGVcbiYjNDM7ICogdG8gYSB3cm9uZyBvciB6ZXJvIHZhbHVlIHdpdGggYSBwbGFpbiAodTgpIGNhc3QuICBNYXAgdGhvc2UgdG8gRUlPLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHU4IHRhcF9pMmNfZXJybm9fdG9fYnl0ZShpbnQgZXJyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IChlcnIgXHUwMDNjIDApID8gLWVyciA6IEVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh2YWwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2M9IDB4RkYpID8gKHU4KXZhbCA6IEVJTztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBUQVBfSTJDX1JFUV9IRFJfTEVOICAgNFxuJiM0MzsjZGVmaW5lIFRBUF9JMkNfTUFYX1dSSVRFX0xFTiA2N1xuJiM0MzsjZGVmaW5lIFRBUF9JMkNfTUFYX1JFQURfTEVOICAyMFxuJiM0MzsjZGVmaW5lIFRBUF9JMkNfRkxBR19OT1NUQVJUICBCSVQoMClcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90XG4mIzQzO3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuJiM0MztcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0ICAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGtvYmpfdG9fZGV2KGtvYmopKTtcbiYjNDM7XHRjb25zdCB1OCAqcmVxID0gKGNvbnN0IHU4ICopYnVmO1xuJiM0MztcdHU4IGFkZHIsIHdyaXRlX2xlbiwgcmVhZF9sZW4sIGZsYWdzO1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiYjNDM7XHRzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdO1xuJiM0MztcdHU4ICpyZGJ1ZiA9IE5VTEw7XG4mIzQzO1x0aW50IG5tc2dzLCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdC8qIEVhY2ggd3JpdGUgaXMgb25lIGF0b21pYyByZXF1ZXN0OyBub24temVybyBvZmZzZXQgbWVhbnMgYVxuJiM0MztcdCAqIG1pZC1idWZmZXIgcHdyaXRlKCkgd2hpY2ggd291bGQgbWlzcGFyc2UgdGhlIGhlYWRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAob2ZmICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNjIFRBUF9JMkNfUkVRX0hEUl9MRU4gfHwgY291bnQgXHUwMDNlIFRBUF9JMkNfUkVRX0hEUl9MRU4gJiM0MzsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGFkZHIgICAgICA9IHJlcVswXTtcbiYjNDM7XHR3cml0ZV9sZW4gPSByZXFbMV07XG4mIzQzO1x0cmVhZF9sZW4gID0gcmVxWzJdO1xuJiM0MztcdGZsYWdzICAgICA9IHJlcVszXTtcbiYjNDM7XG4mIzQzO1x0LyogVmFsaWRhdGUgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChhZGRyID09IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tpXSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0aWYgKGkgPT0gVEFQX0kyQ19BTExPV0VEX0FERFJTX05VTSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9sZW4gXHUwMDNlIFRBUF9JMkNfTUFYX1dSSVRFX0xFTilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChyZWFkX2xlbiBcdTAwM2UgVEFQX0kyQ19NQVhfUkVBRF9MRU4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAod3JpdGVfbGVuICYjNDM7IFRBUF9JMkNfUkVRX0hEUl9MRU4gXHUwMDNlIGNvdW50KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHdyaXRlX2xlbiA9PSAwIFx1MDAyNlx1MDAyNiByZWFkX2xlbiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0LyogSTJDX01fTk9TVEFSVCBzdXBwcmVzc2VzIHRoZSByZXBlYXRlZCBTVEFSVCBiZXR3ZWVuIHdyaXRlIGFuZCByZWFkXG4mIzQzO1x0ICogc2VnbWVudHM7IGl0IGhhcyBubyBtZWFuaW5nIG9uIGEgZmlyc3QtYW5kLW9ubHkgbWVzc2FnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBUQVBfSTJDX0ZMQUdfTk9TVEFSVCkgXHUwMDI2XHUwMDI2IHdyaXRlX2xlbiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIGkyY19nZXRfYWRhcHRlcigpIHRha2VzIGEgcmVmZXJlbmNlIHVuZGVyIGNvcmVfbG9jazsgc2FmZSBhZ2FpbnN0XG4mIzQzO1x0ICogY29uY3VycmVudCBhZGFwdGVyIHVuYmluZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhZGFwID0gaTJjX2dldF9hZGFwdGVyKFJFQURfT05DRShicC1cdTAwM2V0YXBfaTJjX2FkYXBfbnIpKTtcbiYjNDM7XHRpZiAoIWFkYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0bm1zZ3MgPSAwO1xuJiM0MztcdGlmICh3cml0ZV9sZW4gXHUwMDNlIDApIHtcbiYjNDM7XHRcdG1zZ3Nbbm1zZ3NdLmFkZHIgID0gYWRkcjtcbiYjNDM7XHRcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gMDtcbiYjNDM7XHRcdG1zZ3Nbbm1zZ3NdLmxlbiAgID0gd3JpdGVfbGVuO1xuJiM0MztcdFx0bXNnc1tubXNnc10uYnVmICAgPSAodTggKilyZXEgJiM0MzsgVEFQX0kyQ19SRVFfSERSX0xFTjtcbiYjNDM7XHRcdG5tc2dzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHJlYWRfbGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHR1MTYgcmRfZmxhZ3MgPSBJMkNfTV9SRDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IFRBUF9JMkNfRkxBR19OT1NUQVJUKVxuJiM0MztcdFx0XHRyZF9mbGFncyB8PSBJMkNfTV9OT1NUQVJUO1xuJiM0MztcdFx0bXNnc1tubXNnc10uYWRkciAgPSBhZGRyO1xuJiM0MztcdFx0bXNnc1tubXNnc10uZmxhZ3MgPSByZF9mbGFncyB8IEkyQ19NX0RNQV9TQUZFO1xuJiM0MztcdFx0bXNnc1tubXNnc10ubGVuICAgPSByZWFkX2xlbjtcbiYjNDM7XHRcdHJkYnVmID0ga3phbGxvYyhyZWFkX2xlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXJkYnVmKSB7XG4mIzQzO1x0XHRcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtc2dzW25tc2dzXS5idWYgPSByZGJ1ZjtcbiYjNDM7XHRcdG5tc2dzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGlzZSB0cmFuc2ZlciYjNDM7cHVibGlzaCBzbyBjb25jdXJyZW50IHdyaXRlcnMgY2Fubm90IG92ZXJ3cml0ZVxuJiM0MztcdCAqIGVhY2ggb3RoZXImIzM5O3MgcmVzcG9uc2UgaW4gdGFwX2kyY19yc3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuJiM0MztcdHJldCA9IGkyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4mIzQzO1x0aWYgKHJldCA9PSBubXNncykge1xuJiM0MztcdFx0YnAtXHUwMDNldGFwX2kyY19yc3BbMF0gPSAwO1xuJiM0MztcdFx0aWYgKHJlYWRfbGVuIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2YnAtXHUwMDNldGFwX2kyY19yc3BbMV0sIHJkYnVmLCByZWFkX2xlbik7XG4mIzQzO1x0XHRicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4gPSAxICYjNDM7IHJlYWRfbGVuO1xuJiM0MztcdFx0cmV0ID0gY291bnQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJwLVx1MDAzZXRhcF9pMmNfcnNwWzBdICA9IHRhcF9pMmNfZXJybm9fdG9fYnl0ZShyZXQpO1xuJiM0MztcdFx0YnAtXHUwMDNldGFwX2kyY19yc3BfbGVuID0gMTtcbiYjNDM7XHRcdHJldCA9IChyZXQgXHUwMDNjIDApID8gcmV0IDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZXRhcF9pMmNfbG9jayk7XG4mIzQzO1x0a2ZyZWUocmRidWYpO1xuJiM0MztcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3RcbiYjNDM7cHRwX29jcF9jcGxkX2kyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0ICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoa29ial90b19kZXYoa29iaikpO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJwLVx1MDAzZXRhcF9pMmNfbG9jayk7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2U9IGJwLVx1MDAzZXRhcF9pMmNfcnNwX2xlbikge1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gbWluKGNvdW50LCBicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4gLSAoc2l6ZV90KW9mZik7XG4mIzQzO1x0XHRtZW1jcHkoYnVmLCBicC1cdTAwM2V0YXBfaTJjX3JzcCAmIzQzOyBvZmYsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB0YXBfaTJjX2Jpbl9hdHRyID0ge1xuJiM0MztcdC5hdHRyICA9IHsgLm5hbWUgPSBcJiMzNDtjcGxkX2kyY194ZmVyXCYjMzQ7LCAubW9kZSA9IDA2MDAgfSxcbiYjNDM7XHQud3JpdGUgPSBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlLFxuJiM0MztcdC5yZWFkICA9IHB0cF9vY3BfY3BsZF9pMmNfcmVhZCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX3NlcmlhbG51bS5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfZ25zc19zeW5jLmF0dHIsXG5AQCAtNDI3MiwxMSAmIzQzOzQ0NzcsMTggQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX3RzX3dpbmRvd19hZGp1c3QuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3V0Y190YWlfb2Zmc2V0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl90b2RfY29ycmVjdGlvbi5hdHRyLFxuJiM0MztcdFx1MDAyNmRldl9hdHRyX2kyY19idXNfY3RybC5hdHRyLFxuJiM0MztcdE5VTEwsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4mIzQzO1x0XHUwMDI2dGFwX2kyY19iaW5fYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xuLVx0LmF0dHJzID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbiYjNDM7XHQuYXR0cnMgICAgID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbiYjNDM7XHQuYmluX2F0dHJzID0gYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzW10gPSB7XG5AQCAtNDkwMiw2ICYjNDM7NTExNCw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiBcdFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cdTAwM2VpMmNfY2xrKTtcbiBcdGlmIChicC1cdTAwM2VuX2lycXMpXG4gXHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVx1MDAzZXBkZXYpO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbiBcdGRldmljZV91bnJlZ2lzdGVyKFx1MDAyNmJwLVx1MDAzZWRldik7XG4gfVxuIFxuQEAgLTUwNzgsNiAmIzQzOzUyOTEsMTcgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfZGlzYWJsZTtcbiBcbiYjNDM7XHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXG4mIzQzO1x0ICogc28gbXV0ZXhfZGVzdHJveSgpIGFsd2F5cyBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LlxuJiM0MztcdCAqIE11c3QgYWxzbyBiZSBiZWZvcmUgcHRwX29jcF9yZWdpc3Rlcl9yZXNvdXJjZXMoKTogdGhlIEkyQyBidXNcbiYjNDM7XHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxuJiM0MztcdCAqIHJlZ2lzdGVycyBhbmQgc3RvcmVzIHRoZSBhZGFwdGVyIG51bWJlciBpbiB0YXBfaTJjX2FkYXBfbnI7IHRoZVxuJiM0MztcdCAqIC0xIHNlbnRpbmVsIGJlbG93IG11c3QgYWxyZWFkeSBiZSB3cml0dGVuIHNvIHRoYXQgYSBub3RpZmllclxuJiM0MztcdCAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNmJwLVx1MDAzZXRhcF9pMmNfbG9jayk7XG4mIzQzO1x0YnAtXHUwMDNldGFwX2kyY19hZGFwX25yID0gLTE7XG4mIzQzO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MjE3LDExICYjNDM7NTQ0MSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbiYjNDM7XHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBDYWNoZSBhZGFwdGVyIG51bWJlcjsgY3BsZF9pMmNfeGZlciB1c2VzIGkyY19nZXRfYWRhcHRlcigpXG4mIzQzO1x0XHQgKiBmb3IgYSByZWZlcmVuY2UtY291bnRlZCwgdW5iaW5kLXNhZmUgbG9va3VwLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZXRhcF9pMmNfYWRhcF9uciwgaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKS1cdTAwM2Vucik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNldGFwX2kyY19hZGFwX25yLCAtMSk7XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlICovXG4gXHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNmJwLVx1MDAzZWRldi5rb2JqLCBcJiMzNDtpMmNcJiMzNDspO1xuLVxuJiM0MztcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfT0NQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY193cml0ZSYjMzQ7LAogICAgJiMzNDtwdHBfb2NwX2NwbGRfaTJjX3JlYWQmIzM0OywKICAgICYjMzQ7aTJjX2J1c19jdHJsX3N0b3JlJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zaG93JiMzNDssCiAgICAmIzM0O3RhcF9pMmNfZXJybm9fdG9fYnl0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBmZDRkMGJkNWU4ZDI5ZjkzODFmMTBkYTM3ZDk1ODY4OGMwMGYyMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCmluZGV4IDNhZTQxYjc2MzRhYzllLi5jNjI3NjZkZjdhMjAyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCkBAIC0xMSw2ICYjNDM7MTEsNjIgQEAgQ29udGFjdDoJSm9uYXRoYW4gTGVtb24gJmx0O2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbSZndDsKIERlc2NyaXB0aW9uOglUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkCiAJCXJlZ2lzdGVyZWQuCiAKJiM0MztXaGF0OgkJL3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXIKJiM0MztEYXRlOgkJSnVseSAyMDI2CiYjNDM7Q29udGFjdDoJU2FnaSBNYWltb24gJmx0O3NhZ2kubWFpbW9uQGFkdmEuY29tJmd0OwomIzQzO0Rlc2NyaXB0aW9uOgkoUlcpIEJpbmFyeSBzeXNmcyBhdHRyaWJ1dGUgcHJvdmlkaW5nIGEgcmF3IEkyQyBwYXNzdGhyb3VnaCB0bwomIzQzOwkJdGhlIENQTEQgYW5kIEkyQyBtdXggb24gQURWQSB4MSBUQVAgYm9hcmRzLiAgT25seSBwcmVzZW50IG9uCiYjNDM7CQl0aGF0IGJvYXJkIHZhcmlhbnQuCiYjNDM7CiYjNDM7CQlFYWNoIHdyaXRlIGluaXRpYXRlcyBvbmUgSTJDIHRyYW5zYWN0aW9uLiAgVGhlIHdyaXRlIHBheWxvYWQKJiM0MzsJCW11c3QgYmUgZXhhY3RseSBmb3VyIGhlYWRlciBieXRlcyBmb2xsb3dlZCBieSB0aGUgd3JpdGUgZGF0YToKJiM0MzsKJiM0MzsJCSAgQnl0ZSAwOiBzbGF2ZSBhZGRyZXNzIChvbmx5IDB4NDAgYW5kIDB4NzQgYXJlIHBlcm1pdHRlZCkKJiM0MzsJCSAgQnl0ZSAxOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgKDAuLjY3KQomIzQzOwkJICBCeXRlIDI6IG51bWJlciBvZiBieXRlcyB0byByZWFkIGJhY2sgKDAuLjIwKQomIzQzOwkJICBCeXRlIDM6IGZsYWdzCiYjNDM7CQkgICAgICAgICAgICBiaXQgMCAtIHN1cHByZXNzIHRoZSByZXBlYXRlZCBTVEFSVCBiZWZvcmUgdGhlCiYjNDM7CQkgICAgICAgICAgICAgICAgICAgIHJlYWQgc2VnbWVudCAoSTJDX01fTk9TVEFSVCk7IG9ubHkgdmFsaWQKJiM0MzsJCSAgICAgICAgICAgICAgICAgICAgd2hlbiBib3RoIHdyaXRlIGFuZCByZWFkIGxlbmd0aHMgYXJlCiYjNDM7CQkgICAgICAgICAgICAgICAgICAgIG5vbi16ZXJvCiYjNDM7CQkgIEJ5dGVzIDQuLjogd3JpdGUgZGF0YSAod3JpdGVfbGVuIGJ5dGVzKQomIzQzOwomIzQzOwkJQSBzdWJzZXF1ZW50IHJlYWQoKSByZXR1cm5zOgomIzQzOwomIzQzOwkJICBCeXRlIDA6IHN0YXR1cyAoMCA9IHN1Y2Nlc3MsIHBvc2l0aXZlIGVycm5vIG9uIGVycm9yKQomIzQzOwkJICBCeXRlcyAxLi46IHJlYWQgZGF0YSAocmVhZF9sZW4gYnl0ZXMpLCBwcmVzZW50IG9ubHkgd2hlbgomIzQzOwkJICAgICAgICAgICAgIHN0YXR1cyBpcyAwIGFuZCByZWFkX2xlbiAmZ3Q7IDAKJiM0MzsKJiM0MzsJCVRoZSB3cml0ZSBhbmQgcmVhZCBwb3J0aW9ucyBvZiB0aGUgc3lzZnMgZmlsZSBzaGFyZSBhIHNpbmdsZQomIzQzOwkJcGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlCiYjNDM7CQlvcGVuKCkgLyB3cml0ZSgpIC8gcmVhZCgpIHNlcXVlbmNlIG11c3QgYmUgdXNlZCB0byBhdm9pZAomIzQzOwkJZGF0YSByYWNlcyBiZXR3ZWVuIGNvbmN1cnJlbnQgdXNlcnMuCiYjNDM7CiYjNDM7CQlPbmx5IHNsYXZlIGFkZHJlc3NlcyAweDQwIChMYXR0aWNlIENQTEQpIGFuZCAweDc0IChQQ0E5NTQ4CiYjNDM7CQlJMkMgbXV4KSBhcmUgYWNjZXB0ZWQ7IGFsbCBvdGhlcnMgcmV0dXJuIEVQRVJNLgomIzQzOwomIzQzO1doYXQ6CQkvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vaTJjX2J1c19jdHJsCiYjNDM7RGF0ZToJCUp1bHkgMjAyNgomIzQzO0NvbnRhY3Q6CVNhZ2kgTWFpbW9uICZsdDtzYWdpLm1haW1vbkBhZHZhLmNvbSZndDsKJiM0MztEZXNjcmlwdGlvbjoJKFJXKSBFeHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIgZm9yCiYjNDM7CQl0aGUgc2hhcmVkIEkyQyBidXMgb24gQURWQSB4MSBhbmQgeDIgVEFQIGJvYXJkcy4gIE9ubHkKJiM0MzsJCXByZXNlbnQgd2hlbiB0aGUgYm9hcmQgaGFzIGEgcHBzX3NlbGVjdCByZWdpc3RlciBibG9jay4KJiM0MzsKJiM0MzsJCVVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlCiYjNDM7CQlkcml2aW5nIHRoZSBidXM6CiYjNDM7CiYjNDM7CQkgIDEuIFJlYWQgIC0gdmFsdWUgbXVzdCBiZSAweDAwMDAwMDAwIChidXMgaXMgZnJlZSkuCiYjNDM7CQkgIDIuIFdyaXRlIC0gMHgwMDAwZmZmZiAocmVxdWVzdCBvd25lcnNoaXApLgomIzQzOwkJICAzLiBQb2xsICAtIHJlYWQgdW50aWwgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemUKJiM0MzsJCSAgICAgICAgICAgICBoYXMgYWNrbm93bGVkZ2VkIHRoZSBoYW5kb3ZlcikuCiYjNDM7CiYjNDM7CQlBZnRlciBhbGwgSTJDIHRyYWZmaWMgaXMgY29tcGxldGUgdGhlIGJ1cyBtdXN0IGJlIHJlbGVhc2VkCiYjNDM7CQlieSB3cml0aW5nIDB4MDAwMDAwMDAuCiYjNDM7CiYjNDM7CQlUaGUgcG9sbCByZWFkIGlzIGEgUENJZSBub24tcG9zdGVkIHJlYWQgYW5kIHRoZXJlZm9yZSBhbHNvCiYjNDM7CQlmbHVzaGVzIHRoZSBwcmVjZWRpbmcgcG9zdGVkIHdyaXRlIHRvIHRoZSBGUEdBOyBubwomIzQzOwkJYWRkaXRpb25hbCByZWFkLWJhY2sgaXMgcmVxdWlyZWQgZm9yIG9yZGVyaW5nLgomIzQzOwogV2hhdDoJCS9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlcwogRGF0ZToJCVNlcHRlbWJlciAyMDIxCiBDb250YWN0OglKb25hdGhhbiBMZW1vbiAmbHQ7am9uYXRoYW4ubGVtb25AZ21haWwuY29tJmd0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jCmluZGV4IDM1ZTkxMWYxYWQ3OGMwLi43OWZlYzUxNjFjOTk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX29jcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuYwpAQCAtMTYzLDcgJiM0MzsxNjMsOCBAQCBzdHJ1Y3QgZ3Bpb19yZWcgewogCXUzMglncGlvMTsKIAl1MzIJX19wYWQwOwogCXUzMglncGlvMjsKLQl1MzIJX19wYWQxOwomIzQzOwkvKiBhZHZhX3gxOiBJMkMgYnVzIG93bmVyc2hpcCByZWdpc3RlcjsgcmVzZXJ2ZWQgb24gb3RoZXIgdmFyaWFudHMgKi8KJiM0MzsJdTMyCWkyY19idXNfY3RybDsKIH07CiAKIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcgewpAQCAtNDE2LDYgJiM0Mzs0MTcsMTEgQEAgc3RydWN0IHB0cF9vY3AgewogCWRwbGxfdHJhY2tlciB0cmFja2VyOwogCWludCBzaWduYWxzX25yOwogCWludCBmcmVxX2luX25yOwomIzQzOwkvKiBjcGxkX2kyY194ZmVyIHN5c2ZzIChhZHZhX3gxKSAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCXRhcF9pMmNfbG9jazsKJiM0MzsJaW50CQkJdGFwX2kyY19hZGFwX25yOyAvKiBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi8KJiM0MzsJdTgJCQl0YXBfaTJjX3JzcFsyMV07IC8qIFtzdGF0dXMsIHJlYWRfZGF0YS4uLl0gKi8KJiM0MzsJc2l6ZV90CQkJdGFwX2kyY19yc3BfbGVuOwogfTsKIAogI2RlZmluZSBPQ1BfUkVRX1RJTUVTVEFNUAlCSVQoMCkKQEAgLTQyMjQsNiAmIzQzOzQyMzAsMjA1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0gewogCXsgfSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIGkyY19idXNfY3RybCBleHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBUaGUgc2hhcmVkIGJ1cyByZXF1aXJlcyBhIHRocmVlLXN0ZXAgaGFuZHNoYWtlIGJlZm9yZSB1c2U6CiYjNDM7ICogICByZWFkIDB4MDAwMDAwMDAgKGZyZWUpIC0mZ3Q7IHdyaXRlIDB4MDAwMGZmZmYgKHJlcXVlc3QpIC0mZ3Q7CiYjNDM7ICogICBwb2xsIHVudGlsIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemUgY29uZmlybXMgcmVsZWFzZSkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcG9sbCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkLCB3aGljaCBhbHNvIGZsdXNoZXMgdGhlIHByZWNlZGluZwomIzQzOyAqIHBvc3RlZCB3cml0ZSB0byB0aGUgRlBHQSwgc28gbm8gc2VwYXJhdGUga2VybmVsIHJlYWQtYmFjayBpcyBuZWVkZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QKJiM0MztpMmNfYnVzX2N0cmxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFicC0mZ3Q7cHBzX3NlbGVjdCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7MHglMDh4XG4mIzM0OywKJiM0MzsJCQkgIGlvcmVhZDMyKCZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2kyY19idXNfY3RybF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKCFicC0mZ3Q7cHBzX3NlbGVjdCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwlpZiAoa3N0cnRvdTMyKGJ1ZiwgMCwgJmFtcDt2YWwpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlvd3JpdGUzMih2YWwsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JXKGkyY19idXNfY3RybCk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBjcGxkX2kyY194ZmVyIC0gc3lzZnMgYmluYXJ5IEkyQyBwYXNzdGhyb3VnaCBmb3IgYWR2YV94MSBUQVAgQ1BMRC4KJiM0MzsgKgomIzQzOyAqIHdyaXRlOiBbYWRkcl1bd3JpdGVfbGVuXVtyZWFkX2xlbl1bZmxhZ3NdW3dyaXRlX2RhdGEuLi5dCiYjNDM7ICogICBmbGFncyBiaXQgMDogSTJDX01fTk9TVEFSVCBvbiB0aGUgcmVhZCBzZWdtZW50CiYjNDM7ICogcmVhZDogIFtzdGF0dXNdW3JlYWRfZGF0YS4uLl0KJiM0MzsgKiAgIHN0YXR1cyAwID0gc3VjY2VzcywgZWxzZSBwb3NpdGl2ZSBlcnJubwomIzQzOyAqCiYjNDM7ICogT25seSBhZGRyZXNzZXMgMHg0MCAoQ1BMRCkgYW5kIDB4NzQgKG11eCkgYXJlIHBlcm1pdHRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0gIDIKJiM0MztzdGF0aWMgY29uc3QgdTggdGFwX2kyY19hbGxvd2VkX2FkZHJzW1RBUF9JMkNfQUxMT1dFRF9BRERSU19OVU1dID0gewomIzQzOwkweDQwLCAvKiBDUExEICovCiYjNDM7CTB4NzQsIC8qIG11eCAgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLgomIzQzOyAqCiYjNDM7ICogRXJybm9zICZndDsgMjU1IChlLmcuIEVOT1RTVVBQPTUyNCkgb3IgbXVsdGlwbGVzIG9mIDI1NiB3b3VsZCB0cnVuY2F0ZQomIzQzOyAqIHRvIGEgd3Jvbmcgb3IgemVybyB2YWx1ZSB3aXRoIGEgcGxhaW4gKHU4KSBjYXN0LiAgTWFwIHRob3NlIHRvIEVJTy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdTggdGFwX2kyY19lcnJub190b19ieXRlKGludCBlcnIpCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gKGVyciAmbHQ7IDApID8gLWVyciA6IEVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuICh2YWwgJmd0OyAwICZhbXA7JmFtcDsgdmFsICZsdDs9IDB4RkYpID8gKHU4KXZhbCA6IEVJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBUQVBfSTJDX1JFUV9IRFJfTEVOICAgNAomIzQzOyNkZWZpbmUgVEFQX0kyQ19NQVhfV1JJVEVfTEVOIDY3CiYjNDM7I2RlZmluZSBUQVBfSTJDX01BWF9SRUFEX0xFTiAgMjAKJiM0MzsjZGVmaW5lIFRBUF9JMkNfRkxBR19OT1NUQVJUICBCSVQoMCkKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAomIzQzOwkJICAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGtvYmpfdG9fZGV2KGtvYmopKTsKJiM0MzsJY29uc3QgdTggKnJlcSA9IChjb25zdCB1OCAqKWJ1ZjsKJiM0MzsJdTggYWRkciwgd3JpdGVfbGVuLCByZWFkX2xlbiwgZmxhZ3M7CiYjNDM7CXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKJiM0MzsJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKJiM0MzsJdTggKnJkYnVmID0gTlVMTDsKJiM0MzsJaW50IG5tc2dzLCByZXQsIGk7CiYjNDM7CiYjNDM7CS8qIEVhY2ggd3JpdGUgaXMgb25lIGF0b21pYyByZXF1ZXN0OyBub24temVybyBvZmZzZXQgbWVhbnMgYQomIzQzOwkgKiBtaWQtYnVmZmVyIHB3cml0ZSgpIHdoaWNoIHdvdWxkIG1pc3BhcnNlIHRoZSBoZWFkZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAob2ZmICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGNvdW50ICZsdDsgVEFQX0kyQ19SRVFfSERSX0xFTiB8fCBjb3VudCAmZ3Q7IFRBUF9JMkNfUkVRX0hEUl9MRU4gJiM0MzsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWFkZHIgICAgICA9IHJlcVswXTsKJiM0MzsJd3JpdGVfbGVuID0gcmVxWzFdOwomIzQzOwlyZWFkX2xlbiAgPSByZXFbMl07CiYjNDM7CWZsYWdzICAgICA9IHJlcVszXTsKJiM0MzsKJiM0MzsJLyogVmFsaWRhdGUgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGFkZHIgPT0gdGFwX2kyY19hbGxvd2VkX2FkZHJzW2ldKQomIzQzOwkJCWJyZWFrOwomIzQzOwlpZiAoaSA9PSBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJaWYgKHdyaXRlX2xlbiAmZ3Q7IFRBUF9JMkNfTUFYX1dSSVRFX0xFTikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAocmVhZF9sZW4gJmd0OyBUQVBfSTJDX01BWF9SRUFEX0xFTikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAod3JpdGVfbGVuICYjNDM7IFRBUF9JMkNfUkVRX0hEUl9MRU4gJmd0OyBjb3VudCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAod3JpdGVfbGVuID09IDAgJmFtcDsmYW1wOyByZWFkX2xlbiA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CS8qIEkyQ19NX05PU1RBUlQgc3VwcHJlc3NlcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmV0d2VlbiB3cml0ZSBhbmQgcmVhZAomIzQzOwkgKiBzZWdtZW50czsgaXQgaGFzIG5vIG1lYW5pbmcgb24gYSBmaXJzdC1hbmQtb25seSBtZXNzYWdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKChmbGFncyAmYW1wOyBUQVBfSTJDX0ZMQUdfTk9TVEFSVCkgJmFtcDsmYW1wOyB3cml0ZV9sZW4gPT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBpMmNfZ2V0X2FkYXB0ZXIoKSB0YWtlcyBhIHJlZmVyZW5jZSB1bmRlciBjb3JlX2xvY2s7IHNhZmUgYWdhaW5zdAomIzQzOwkgKiBjb25jdXJyZW50IGFkYXB0ZXIgdW5iaW5kLgomIzQzOwkgKi8KJiM0MzsJYWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtJmd0O3RhcF9pMmNfYWRhcF9ucikpOwomIzQzOwlpZiAoIWFkYXApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbm1zZ3MgPSAwOwomIzQzOwlpZiAod3JpdGVfbGVuICZndDsgMCkgewomIzQzOwkJbXNnc1tubXNnc10uYWRkciAgPSBhZGRyOwomIzQzOwkJbXNnc1tubXNnc10uZmxhZ3MgPSAwOwomIzQzOwkJbXNnc1tubXNnc10ubGVuICAgPSB3cml0ZV9sZW47CiYjNDM7CQltc2dzW25tc2dzXS5idWYgICA9ICh1OCAqKXJlcSAmIzQzOyBUQVBfSTJDX1JFUV9IRFJfTEVOOwomIzQzOwkJbm1zZ3MmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CWlmIChyZWFkX2xlbiAmZ3Q7IDApIHsKJiM0MzsJCXUxNiByZF9mbGFncyA9IEkyQ19NX1JEOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IFRBUF9JMkNfRkxBR19OT1NUQVJUKQomIzQzOwkJCXJkX2ZsYWdzIHw9IEkyQ19NX05PU1RBUlQ7CiYjNDM7CQltc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7CiYjNDM7CQltc2dzW25tc2dzXS5mbGFncyA9IHJkX2ZsYWdzIHwgSTJDX01fRE1BX1NBRkU7CiYjNDM7CQltc2dzW25tc2dzXS5sZW4gICA9IHJlYWRfbGVuOwomIzQzOwkJcmRidWYgPSBremFsbG9jKHJlYWRfbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghcmRidWYpIHsKJiM0MzsJCQlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQl9CiYjNDM7CQltc2dzW25tc2dzXS5idWYgPSByZGJ1ZjsKJiM0MzsJCW5tc2dzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXJpYWxpc2UgdHJhbnNmZXImIzQzO3B1Ymxpc2ggc28gY29uY3VycmVudCB3cml0ZXJzIGNhbm5vdCBvdmVyd3JpdGUKJiM0MzsJICogZWFjaCBvdGhlciYjMzk7cyByZXNwb25zZSBpbiB0YXBfaTJjX3JzcC4KJiM0MzsJICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDticC0mZ3Q7dGFwX2kyY19sb2NrKTsKJiM0MzsJcmV0ID0gaTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTsKJiM0MzsJaWYgKHJldCA9PSBubXNncykgewomIzQzOwkJYnAtJmd0O3RhcF9pMmNfcnNwWzBdID0gMDsKJiM0MzsJCWlmIChyZWFkX2xlbiAmZ3Q7IDApCiYjNDM7CQkJbWVtY3B5KCZhbXA7YnAtJmd0O3RhcF9pMmNfcnNwWzFdLCByZGJ1ZiwgcmVhZF9sZW4pOwomIzQzOwkJYnAtJmd0O3RhcF9pMmNfcnNwX2xlbiA9IDEgJiM0MzsgcmVhZF9sZW47CiYjNDM7CQlyZXQgPSBjb3VudDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJwLSZndDt0YXBfaTJjX3JzcFswXSAgPSB0YXBfaTJjX2Vycm5vX3RvX2J5dGUocmV0KTsKJiM0MzsJCWJwLSZndDt0YXBfaTJjX3JzcF9sZW4gPSAxOwomIzQzOwkJcmV0ID0gKHJldCAmbHQ7IDApID8gcmV0IDogLUVJTzsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDticC0mZ3Q7dGFwX2kyY19sb2NrKTsKJiM0MzsJa2ZyZWUocmRidWYpOwomIzQzOwlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90CiYjNDM7cHRwX29jcF9jcGxkX2kyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAomIzQzOwkJICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoa29ial90b19kZXYoa29iaikpOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2JwLSZndDt0YXBfaTJjX2xvY2spOwomIzQzOwlpZiAob2ZmICZndDs9IGJwLSZndDt0YXBfaTJjX3JzcF9sZW4pIHsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBtaW4oY291bnQsIGJwLSZndDt0YXBfaTJjX3JzcF9sZW4gLSAoc2l6ZV90KW9mZik7CiYjNDM7CQltZW1jcHkoYnVmLCBicC0mZ3Q7dGFwX2kyY19yc3AgJiM0Mzsgb2ZmLCByZXQpOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JwLSZndDt0YXBfaTJjX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgdGFwX2kyY19iaW5fYXR0ciA9IHsKJiM0MzsJLmF0dHIgID0geyAubmFtZSA9ICYjMzQ7Y3BsZF9pMmNfeGZlciYjMzQ7LCAubW9kZSA9IDA2MDAgfSwKJiM0MzsJLndyaXRlID0gcHRwX29jcF9jcGxkX2kyY193cml0ZSwKJiM0MzsJLnJlYWQgID0gcHRwX29jcF9jcGxkX2kyY19yZWFkLAomIzQzO307CiYjNDM7CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfc2VyaWFsbnVtLmF0dHIsCiAJJmFtcDtkZXZfYXR0cl9nbnNzX3N5bmMuYXR0ciwKQEAgLTQyNzIsMTEgJiM0Mzs0NDc3LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7CiAJJmFtcDtkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsCiAJJmFtcDtkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLAogCSZhbXA7ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0ciwKJiM0MzsJJmFtcDtkZXZfYXR0cl9pMmNfYnVzX2N0cmwuYXR0ciwKJiM0MzsJTlVMTCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnNbXSA9IHsKJiM0MzsJJmFtcDt0YXBfaTJjX2Jpbl9hdHRyLAogCU5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0gewotCS5hdHRycyA9IGFkdmFfdGltZWNhcmRfeDFfYXR0cnMsCiYjNDM7CS5hdHRycyAgICAgPSBhZHZhX3RpbWVjYXJkX3gxX2F0dHJzLAomIzQzOwkuYmluX2F0dHJzID0gYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzW10gPSB7CkBAIC00OTAyLDYgJiM0Mzs1MTE0LDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKQogCQljbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLSZndDtpMmNfY2xrKTsKIAlpZiAoYnAtJmd0O25faXJxcykKIAkJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtJmd0O3BkZXYpOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7YnAtJmd0O3RhcF9pMmNfbG9jayk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmFtcDticC0mZ3Q7ZGV2KTsKIH0KIApAQCAtNTA3OCw2ICYjNDM7NTI5MSwxNyBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKGVycikKIAkJZ290byBvdXRfZGlzYWJsZTsKIAomIzQzOwkvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksCiYjNDM7CSAqIHNvIG11dGV4X2Rlc3Ryb3koKSBhbHdheXMgcnVucyBvbiBhbiBpbml0aWFsaXNlZCBtdXRleC4KJiM0MzsJICogTXVzdCBhbHNvIGJlIGJlZm9yZSBwdHBfb2NwX3JlZ2lzdGVyX3Jlc291cmNlcygpOiB0aGUgSTJDIGJ1cwomIzQzOwkgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlcgomIzQzOwkgKiByZWdpc3RlcnMgYW5kIHN0b3JlcyB0aGUgYWRhcHRlciBudW1iZXIgaW4gdGFwX2kyY19hZGFwX25yOyB0aGUKJiM0MzsJICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyCiYjNDM7CSAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC4KJiM0MzsJICovCiYjNDM7CW11dGV4X2luaXQoJmFtcDticC0mZ3Q7dGFwX2kyY19sb2NrKTsKJiM0MzsJYnAtJmd0O3RhcF9pMmNfYWRhcF9uciA9IC0xOwomIzQzOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7YnAtJmd0O3N5bmNfd29yaywgcHRwX29jcF9zeW5jX3dvcmspOwogCiAJLyogY29tcGF0IG1vZGUuCkBAIC01MjE3LDExICYjNDM7NTQ0MSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAKIGZvdW5kOgogCWJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGFkZCkKJiM0MzsJaWYgKGFkZCkgewogCQlwdHBfb2NwX3N5bWxpbmsoYnAsIGNoaWxkLCAmIzM0O2kyYyYjMzQ7KTsKLQllbHNlCiYjNDM7CQkvKiBDYWNoZSBhZGFwdGVyIG51bWJlcjsgY3BsZF9pMmNfeGZlciB1c2VzIGkyY19nZXRfYWRhcHRlcigpCiYjNDM7CQkgKiBmb3IgYSByZWZlcmVuY2UtY291bnRlZCwgdW5iaW5kLXNhZmUgbG9va3VwLgomIzQzOwkJICovCiYjNDM7CQlXUklURV9PTkNFKGJwLSZndDt0YXBfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktJmd0O25yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCVdSSVRFX09OQ0UoYnAtJmd0O3RhcF9pMmNfYWRhcF9uciwgLTEpOwkvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlICovCiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZhbXA7YnAtJmd0O2Rldi5rb2JqLCAmIzM0O2kyYyYjMzQ7KTsKLQomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXcgUGF0Y2ggZm9yIHRoZSBQVFAgT0NQIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgaW50cm9kdWNlcyBzb21lIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIHRvIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGFkZGluZyBgaTJjX2J1c19jdHJsYCwgd2hpY2ggaXMgcmVhZC13cml0ZSwgYW5kIHRoZW4gYGNwbGRfaTJjX3hmZXJgLCB3aGljaCBpcyBhIHJlYWQtd3JpdGUgYmluYXJ5IGF0dHJpYnV0ZS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4gU2luY2UgaXQgbW9kaWZpZXMgYSBkcml2ZXIsIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUuCgpUaGlzIHBhdGNoIHRvdWNoZXMgdGhlICYjMzQ7T3BlbiBDb21wdXRlIFByb2plY3QgdGltZSBjYXJkJiMzNDsgZHJpdmVyLiBJIHJlbWVtYmVyIHRoaXMgb25lOyBpdCYjMzk7cyBhIFBDSSBkZXZpY2UgZHJpdmVyLiBUaGUgcHJvYmUgZnVuY3Rpb24gaXMgYHB0cF9vY3BfcHJvYmVgLCBhbmQgdGhlIHBhdGNoIGFkZHMgdGhlc2UgbmV3IHN5c2ZzIGF0dHJpYnV0ZXMuIE5vdywgY2FuIHN5emthbGxlciBoYW5kbGUgdGhlc2Ugc3lzZnMgYXR0cmlidXRlcz8gWWVzLCBpdCBhYnNvbHV0ZWx5IGNhbi4gRWl0aGVyIGlmIHRoZXJlIGFyZSBkaXJlY3QgZGVzY3JpcHRpb25zIG9yIGV2ZW4ganVzdCB0aHJvdWdoIGdlbmVyaWMgc3lzZnMgZnV6emluZy4gQWN0dWFsbHksIEkgc2VlbSB0byByZWNhbGwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHN5c2ZzIGRlc2NyaXB0aW9ucy4gR3JlYXQuIFRoYXQmIzM5O3MgYSBodWdlIHBsdXMuCgpUaGUgbmV4dCBzdGVwLCBhbHdheXMsIGlzIHRvIGNoZWNrIGlmIGBwdHBfb2NwYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZnV6eiBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgYnVpbHQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnPTE5OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMDktXG5kcml2ZXJzL3B0cC9LY29uZmlnOjIxMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O09wZW5Db21wdXRlIFRpbWVDYXJkIGFzIFBUUCBjbG9ja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYWxsIHRoZSBwaWVjZXMgdGhpcyB0aGluZyByZWxpZXMgb24uIEkgY2FuJiMzOTt0IGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGlzc3VlcyB1bnRpbCBJIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgbGlrZSBidWlsZGluZyBhIGhvdXNlIOKAkyB5b3UgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBmb3VuZGF0aW9uLCBmcmFtaW5nLCBhbmQgdXRpbGl0aWVzIGFyZSBjb21pbmcgZnJvbSBiZWZvcmUgeW91IGNhbiBldmVuIHRoaW5rIGFib3V0IHRoZSBpbnRlcmlvciBkZXNpZ24uIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCYjMzk7cyB0aWVkIHRvLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmNvbm5lY3Rpb25zIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qUFRQXzE1ODhfQ0xPQ0tfT0NQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBLY29uZmlnIGVudHJ5OgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRW50cnkgZm9yIFBUUF8xNTg4X0NMT0NLX09DUCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgb3IgcmVjb21tZW5kYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtjb25maWcgb3B0aW9uLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgaW5zaWRlIGFuZCBvdXQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbWV0aWN1bG91c2x5IHJlYWRpbmcgaXQuIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIG9yIGltcGxpY2F0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIG15IGN1cnJlbnQgYXJjaGl0ZWN0dXJlIG9yIHByb2plY3QgZ29hbHM/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGdyYW51bGFyIGRldGFpbHMg4oCTIHRoZSBzdWJ0bGV0aWVzIHRoYXQgd2lsbCBkZWZpbmUgaG93IHRoaXMgY2xvY2sgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbSBhbmQgd2hldGhlciBpdCB0cnVseSBsZXZlcmFnZXMgT0NQIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8ga25vdyBob3cgaXQgbWlnaHQgYWZmZWN0IHRoZSBwcmVjaXNpb24gYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBQVFAgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gb3BlbiBtaW5kIGFzIEkgcmVhZCwgYW5kIG1ha2Ugbm90ZXMgb2YgdGhlIGFzc3VtcHRpb25zIHRoZSBhdXRob3IgbWF5IGhhdmUgbWFkZSBhbmQgd2hhdCBwb3NzaWJsZSBlZGdlLWNhc2VzIG1heSBuZWVkIGF0dGVudGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4gMjExOlx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcJiMzNDtcbiAyMTI6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAyMTM6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBQQ0lcbiAyMTQ6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBNVERcbiAyMTU6XHRcdGRlcGVuZHMgb24gU0VSSUFMXzgyNTBcbiAyMTY6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAyMTc6XHRcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuIDIxODpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gMjE5Olx0XHRzZWxlY3QgQ1JDMTZcbiAyMjA6XHRcdHNlbGVjdCBEUExMXG4gMjIxOlx0XHRoZWxwXG4gMjIyOlx0XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxuIDIyMzpcdFxuIDIyNDpcdFx0ICBUaGUgT3BlbkNvbXB1dGUgdGltZSBjYXJkIGlzIGFuIGF0b21pYyBjbG9jayBhbG9uZyB3aXRoXG4gMjI1Olx0XHQgIGEgR1BTIHJlY2VpdmVyIHRoYXQgcHJvdmlkZXMgYSBHcmFuZG1hc3RlciBjbG9jayBzb3VyY2VcbiAyMjY6XHRcdCAgZm9yIGEgUFRQIGVuYWJsZWQgbmV0d29yay5cbiAyMjc6XHRcbiAyMjg6XHRcdCAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy50aW1pbmdjYXJkLmNvbS9cbiAyMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTEzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgRGVlcCBEaXZlIGludG8gdGhlIFBUUCBPQ1AgQ1BMRCBJMkMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgZGVwZW5kZW5jaWVzOiBQQ0ksIEkyQywgTVRELCBTRVJJQUxfODI1MCwgYW5kIENPTU1PTl9DTEsuIEl0JiMzOTtzIGEgUENJIGRyaXZlciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG1lYW5zIFN5emthbGxlciBjYW4gcHJvYmFibHkgdXNlIHZQQ0kgdG8gZnV6eiBpdC4gTXkga2V5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGF0IHRoaXMgZHJpdmVyIHJlZ2lzdGVycyBzeXNmcyBhdHRyaWJ1dGVzIC0gYWx3YXlzIGEgZ3JlYXQgYXR0YWNrIHN1cmZhY2UuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoZXNlIGZ1bmN0aW9uczogYGkyY19idXNfY3RybF9zaG93YCwgYGkyY19idXNfY3RybF9zdG9yZWAsIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYCwgYW5kIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgLiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWA/IEJpbmdvISBJdCYjMzk7cyBhIHN5c2ZzIGJpbmFyeSBhdHRyaWJ1dGUgd3JpdGUgZnVuY3Rpb24sIGFuZCBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgZnV6emluZyBzeXNmcy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgcHRwX29jcGAgaXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4sIGFuZCBpdCBsb29rcyBsaWtlIGl0IGNhbiBiZSBidWlsdC1pbiBpZiB3ZSBlbmFibGUgYFBUUF8xNTg4X0NMT0NLX09DUGAuIFNvLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBmb3VyOiBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAsIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgLCBgaTJjX2J1c19jdHJsX3N0b3JlYCwgYW5kIGBpMmNfYnVzX2N0cmxfc2hvd2AuCgpJIHNlZSBzb21lIG90aGVyIGZ1bmN0aW9ucywgYnV0IGB0YXBfaTJjX2Vycm5vX3RvX2J5dGVgIGlzIGNsZWFybHkgYSBoZWxwZXIsIGFuZCBgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbGAgc2VlbXMgdG8gaGF2ZSBzb21lIG1vZGlmaWNhdGlvbnMuCgpJcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5ISBJdCYjMzk7cyBhZGRpbmcgbmV3IHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBwYXJzZSB1c2VyIGlucHV0LCBpbnRlcmFjdCB3aXRoIEkyQywgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIGlzIGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBwYXJzZXMgYSBoZWFkZXIsIGNyYWZ0cyBJMkMgbWVzc2FnZXMsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBjYWxscyBgaTJjX3RyYW5zZmVyYCAtIGEgY2xhc3NpYyByZWNpcGUgZm9yIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4KCk5vdywgSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZywgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgbWFpbiBrZXkuIEJ1dCB3YWl0LCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgdXNlcyBgaTJjX2dldF9hZGFwdGVyYCBhbmQgYGkyY190cmFuc2ZlcmAsIGFuZCBJJiMzOTttIGFsd2F5cyB0aGlua2luZyBhYm91dCBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXJlIGFueSBBRFZBIHgxIFRBUCBib2FyZCBzcGVjaWZpYyBjb25maWdzPyBRdWljayBjaGVjayBvZiBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmb3IgYGFkdmFfeDFgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGNvdmVycyBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkdmFfeDEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jPTE2Mj1zdHJ1Y3QgZ3Bpb19yZWcge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNjUtXHR1MzJcdGdwaW8yO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE2NjpcdC8qIGFkdmFfeDE6IEkyQyBidXMgb3duZXJzaGlwIHJlZ2lzdGVyOyByZXNlcnZlZCBvbiBvdGhlciB2YXJpYW50cyAqL1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTE2Ny1cdHUzMlx0aTJjX2J1c19jdHJsO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0zNjA9c3RydWN0IHB0cF9vY3Age1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MTktXHRpbnQgZnJlcV9pbl9ucjtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MjA6XHQvKiBjcGxkX2kyY194ZmVyIHN5c2ZzIChhZHZhX3gxKSAqL1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQyMS1cdHN0cnVjdCBtdXRleFx0XHR0YXBfaTJjX2xvY2s7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTQ1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ1OTpzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ2MC1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9OTE1PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3Jlc291cmNlW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNzktXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA4MDpzdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV94MV9yZXNvdXJjZVtdID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwODEtXHR7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNzctXHRcdFx0LmZsYXNoX3N0YXJ0ICA9IDB4MTAwMDAwMCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjc4Olx0XHRcdC5zbWFfb3AgICAgICAgPSBcdTAwMjZvY3BfYWR2YV94MV9zbWFfb3AsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI3OS1cdFx0XHQuc2lnbmFsc19uciAgID0gNCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTI4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI5MS1cdHsgUENJX0RFVklDRV9EQVRBKEFEVkEsIFRJTUVDQVJELCBcdTAwMjZvY3BfYWR2YV9yZXNvdXJjZSkgfSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjkyOlx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFx1MDAyNm9jcF9hZHZhX3gxX3Jlc291cmNlKSB9LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTMtXHR7IH1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2FkdmFfc21hX291dFtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzg4LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzODk6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9hZHZhX3gxX3NtYV9pbltdID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzOTAtXHR7IC5uYW1lID0gXCYjMzQ7UFBTMVwmIzM0OyxcdC52YWx1ZSA9IDB4MDAwMSwgICAgICAuZnJlcXVlbmN5ID0gMSB9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNDAyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjE0MDM6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9hZHZhX3gxX3NtYV9vdXRbXSA9IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNDA0LVx0eyAubmFtZSA9IFwmIzM0OzEwTWh6XCYjMzQ7LFx0LnZhbHVlID0gMHgwMDAwLCAgLmZyZXF1ZW5jeSA9IDEwMDAwMDAwfSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjkwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTEyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcCA9IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyOTE0Olx0LnRibFx0XHQ9IHsgcHRwX29jcF9hZHZhX3gxX3NtYV9pbiwgcHRwX29jcF9hZHZhX3gxX3NtYV9vdXQgfSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTE1LVx0LmluaXRcdFx0PSBwdHBfb2NwX3NtYV9mYl9pbml0LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00MjY5PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhpMmNfYnVzX2N0cmwpO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjcxLS8qXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDI3MjogKiBjcGxkX2kyY194ZmVyIC0gc3lzZnMgYmluYXJ5IEkyQyBwYXNzdGhyb3VnaCBmb3IgYWR2YV94MSBUQVAgQ1BMRC5cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjczLSAqXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTQ0NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDQ4My1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NDg0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgYmluX2FkdmFfeDFfdGltZWNhcmRfYXR0cnNbXSA9IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NDg1LVx0XHUwMDI2dGFwX2kyY19iaW5fYXR0cixcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDQ4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ0OTAtXHQuYXR0cnMgICAgID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NDkxOlx0LmJpbl9hdHRycyA9IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ0OTItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODgKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogNzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEFEVkEgeDEgVEFQIEJvYXJkIEkyQyBJbnRlcmZhY2UqKgoKT2theSwgc28gdGhlIGBhZHZhX3gxYCBpcyBlc3NlbnRpYWxseSBqdXN0IGFub3RoZXIgUENJIGRldmljZSB2YXJpYW50LiBUaGF0IG1lYW5zIFN5emthbGxlciBjYW4sIGFuZCBzaG91bGQsIGZ1enogaXQuIFRoZSBrZXkgaXMgc2V0dGluZyB1cCB0aGUgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCB2ZW5kb3IvZGV2aWNlIElELiBUaGUgc3lzZnMgYXR0cmlidXRlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGBhZHZhX3gxYCB2YXJpYW50LCBzbyB3ZSYjMzk7cmUgb25seSBmdXp6aW5nIHRoZSByaWdodCB0YXJnZXQuIFN5emthbGxlciYjMzk7cyB2aXJ0dWFsIFBDSSBzdXBwb3J0IHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIGVtdWxhdGlvbi4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgKmFsbCogd2UgbmVlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvcHRwL0tjb25maWdgIGZpbGUuLi4gWWVwLCBpdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIGBIQVNfSU9NRU1gLCBgUENJYCwgYEkyQ2AsIGBNVERgLCBgU0VSSUFMXzgyNTBgLCBhbmQgYENPTU1PTl9DTEtgLCBidXQgd2UgY2FuIGVuYWJsZSB0aG9zZSBmcm9tIHRoZSBiYXNlIGNvbmZpZy4gSnVzdCBlbmFibGluZyBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyBlbm91Z2guCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBJdCYjMzk7czoKKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYAoqICAgYHB0cF9vY3BfY3BsZF9pMmNfcmVhZGAKKiAgIGBpMmNfYnVzX2N0cmxfc3RvcmVgCiogICBgaTJjX2J1c19jdHJsX3Nob3dgCgpJcyBgdGFwX2kyY19lcnJub190b19ieXRlYCB3b3J0aCBpbmNsdWRpbmc/IEl0JiMzOTtzIGEgc21hbGwgaGVscGVyLCBidXQgaXQmIzM5O3MgcGFydCBvZiB0aGlzIG5ldyBsb2dpYywgc28gbGV0JiMzOTtzIGFkZCBpdC4gV2hhdCBhYm91dCBgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbGA/IFRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYnV0IGl0JiMzOTtzIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLCBzbyBub3QgY3JpdGljYWwgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHBhcnQgb2YgdGhlIGJhc2UgZHJpdmVyLgoKUXVpY2sgZG91YmxlLWNoZWNrOiBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBzcGVjaWZpYyBjb25maWcgd2UgbmVlZC4KClJldmlld2luZyB0aGUgcGF0Y2ggYWdhaW4gY29uZmlybXMgdGhlIGtleSBhZGRpdGlvbnM6CiogICBgaTJjX2J1c19jdHJsX3Nob3dgCiogICBgaTJjX2J1c19jdHJsX3N0b3JlYAoqICAgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWAKKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYAoqICAgYHB0cF9vY3BfY3BsZF9pMmNfcmVhZGAKClRoZXNlIGFyZSBhbGwgKm5ldyogZnVuY3Rpb25zIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMuIFRoaXMgbWFrZXMgdGhlbSBpZGVhbCBmdXp6aW5nIHRhcmdldHMgZm9yIFN5emthbGxlci4KClRoZXJlZm9yZSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O2xsIGRvOgoKKiAgIFNldCBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgU2V0IGBGb2N1c1N5bWJvbHM6YCB0bzoKICAgICogICBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAKICAgICogICBgcHRwX29jcF9jcGxkX2kyY19yZWFkYAogICAgKiAgIGBpMmNfYnVzX2N0cmxfc3RvcmVgCiAgICAqICAgYGkyY19idXNfY3RybF9zaG93YAogICAgKiAgIGB0YXBfaTJjX2Vycm5vX3RvX2J5dGVgCiogICBTZXQgYEVuYWJsZUNvbmZpZ3M6YCB0bzoKICAgICogICBgUFRQXzE1ODhfQ0xPQ0tfT0NQYAoKVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSBpbiB0aGUgYHB0cF9vY3BgIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYWxsb3cgdXNlcnNwYWNlIHRvIGluaXRpYXRlIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIEluIHBhcnRpY3VsYXIsIHRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB1c2VyIGlucHV0LCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIEkyQyB0cmFuc2ZlciBpbml0aWF0aW9uOyB0aGlzIGlzIGNvbXBsZXggZnVuY3Rpb25hbCBsb2dpYyBhbmQgdGhlcmVmb3JlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0tfT0NQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY193cml0ZSYjMzQ7LAogICAgJiMzNDtwdHBfb2NwX2NwbGRfaTJjX3JlYWQmIzM0OywKICAgICYjMzQ7aTJjX2J1c19jdHJsX3N0b3JlJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zaG93JiMzNDssCiAgICAmIzM0O3RhcF9pMmNfZXJybm9fdG9fYnl0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX09DUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUmIzM0OywKICAgICYjMzQ7cHRwX29jcF9jcGxkX2kyY19yZWFkJiMzNDssCiAgICAmIzM0O2kyY19idXNfY3RybF9zdG9yZSYjMzQ7LAogICAgJiMzNDtpMmNfYnVzX2N0cmxfc2hvdyYjMzQ7LAogICAgJiMzNDt0YXBfaTJjX2Vycm5vX3RvX2J5dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MTguMTExMDQzOTUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0NjAxMjQ2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHRwX29jcF9jcGxkX2kyY193cml0ZVwiLFxuICAgIFwicHRwX29jcF9jcGxkX2kyY19yZWFkXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc3RvcmVcIixcbiAgICBcImkyY19idXNfY3RybF9zaG93XCIsXG4gICAgXCJ0YXBfaTJjX2Vycm5vX3RvX2J5dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjE4LjExMTA1MTg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3NzE0MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGZkNGQwYmQ1ZThkMjlmOTM4MWYxMGRhMzdkOTU4Njg4YzAwZjIxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAxODo0NjoxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbmluZGV4IDNhZTQxYjc2MzRhYzllLi5jNjI3NjZkZjdhMjAyZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbkBAIC0xMSw2ICsxMSw2MiBAQCBDb250YWN0OlxcdEpvbmF0aGFuIExlbW9uIFxcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cXHUwMDNlXFxuIERlc2NyaXB0aW9uOlxcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcXG4gXFx0XFx0cmVnaXN0ZXJlZC5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXJcXG4rRGF0ZTpcXHRcXHRKdWx5IDIwMjZcXG4rQ29udGFjdDpcXHRTYWdpIE1haW1vbiBcXHUwMDNjc2FnaS5tYWltb25AYWR2YS5jb21cXHUwMDNlXFxuK0Rlc2NyaXB0aW9uOlxcdChSVykgQmluYXJ5IHN5c2ZzIGF0dHJpYnV0ZSBwcm92aWRpbmcgYSByYXcgSTJDIHBhc3N0aHJvdWdoIHRvXFxuK1xcdFxcdHRoZSBDUExEIGFuZCBJMkMgbXV4IG9uIEFEVkEgeDEgVEFQIGJvYXJkcy4gIE9ubHkgcHJlc2VudCBvblxcbitcXHRcXHR0aGF0IGJvYXJkIHZhcmlhbnQuXFxuK1xcbitcXHRcXHRFYWNoIHdyaXRlIGluaXRpYXRlcyBvbmUgSTJDIHRyYW5zYWN0aW9uLiAgVGhlIHdyaXRlIHBheWxvYWRcXG4rXFx0XFx0bXVzdCBiZSBleGFjdGx5IGZvdXIgaGVhZGVyIGJ5dGVzIGZvbGxvd2VkIGJ5IHRoZSB3cml0ZSBkYXRhOlxcbitcXG4rXFx0XFx0ICBCeXRlIDA6IHNsYXZlIGFkZHJlc3MgKG9ubHkgMHg0MCBhbmQgMHg3NCBhcmUgcGVybWl0dGVkKVxcbitcXHRcXHQgIEJ5dGUgMTogbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlICgwLi42NylcXG4rXFx0XFx0ICBCeXRlIDI6IG51bWJlciBvZiBieXRlcyB0byByZWFkIGJhY2sgKDAuLjIwKVxcbitcXHRcXHQgIEJ5dGUgMzogZmxhZ3NcXG4rXFx0XFx0ICAgICAgICAgICAgYml0IDAgLSBzdXBwcmVzcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmVmb3JlIHRoZVxcbitcXHRcXHQgICAgICAgICAgICAgICAgICAgIHJlYWQgc2VnbWVudCAoSTJDX01fTk9TVEFSVCk7IG9ubHkgdmFsaWRcXG4rXFx0XFx0ICAgICAgICAgICAgICAgICAgICB3aGVuIGJvdGggd3JpdGUgYW5kIHJlYWQgbGVuZ3RocyBhcmVcXG4rXFx0XFx0ICAgICAgICAgICAgICAgICAgICBub24temVyb1xcbitcXHRcXHQgIEJ5dGVzIDQuLjogd3JpdGUgZGF0YSAod3JpdGVfbGVuIGJ5dGVzKVxcbitcXG4rXFx0XFx0QSBzdWJzZXF1ZW50IHJlYWQoKSByZXR1cm5zOlxcbitcXG4rXFx0XFx0ICBCeXRlIDA6IHN0YXR1cyAoMCA9IHN1Y2Nlc3MsIHBvc2l0aXZlIGVycm5vIG9uIGVycm9yKVxcbitcXHRcXHQgIEJ5dGVzIDEuLjogcmVhZCBkYXRhIChyZWFkX2xlbiBieXRlcyksIHByZXNlbnQgb25seSB3aGVuXFxuK1xcdFxcdCAgICAgICAgICAgICBzdGF0dXMgaXMgMCBhbmQgcmVhZF9sZW4gXFx1MDAzZSAwXFxuK1xcbitcXHRcXHRUaGUgd3JpdGUgYW5kIHJlYWQgcG9ydGlvbnMgb2YgdGhlIHN5c2ZzIGZpbGUgc2hhcmUgYSBzaW5nbGVcXG4rXFx0XFx0cGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlXFxuK1xcdFxcdG9wZW4oKSAvIHdyaXRlKCkgLyByZWFkKCkgc2VxdWVuY2UgbXVzdCBiZSB1c2VkIHRvIGF2b2lkXFxuK1xcdFxcdGRhdGEgcmFjZXMgYmV0d2VlbiBjb25jdXJyZW50IHVzZXJzLlxcbitcXG4rXFx0XFx0T25seSBzbGF2ZSBhZGRyZXNzZXMgMHg0MCAoTGF0dGljZSBDUExEKSBhbmQgMHg3NCAoUENBOTU0OFxcbitcXHRcXHRJMkMgbXV4KSBhcmUgYWNjZXB0ZWQ7IGFsbCBvdGhlcnMgcmV0dXJuIEVQRVJNLlxcbitcXG4rV2hhdDpcXHRcXHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vaTJjX2J1c19jdHJsXFxuK0RhdGU6XFx0XFx0SnVseSAyMDI2XFxuK0NvbnRhY3Q6XFx0U2FnaSBNYWltb24gXFx1MDAzY3NhZ2kubWFpbW9uQGFkdmEuY29tXFx1MDAzZVxcbitEZXNjcmlwdGlvbjpcXHQoUlcpIEV4cG9zZXMgdGhlIE1pY3JvQmxhemUgSTJDIGJ1cyBhcmJpdHJhdGlvbiByZWdpc3RlciBmb3JcXG4rXFx0XFx0dGhlIHNoYXJlZCBJMkMgYnVzIG9uIEFEVkEgeDEgYW5kIHgyIFRBUCBib2FyZHMuICBPbmx5XFxuK1xcdFxcdHByZXNlbnQgd2hlbiB0aGUgYm9hcmQgaGFzIGEgcHBzX3NlbGVjdCByZWdpc3RlciBibG9jay5cXG4rXFxuK1xcdFxcdFVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlXFxuK1xcdFxcdGRyaXZpbmcgdGhlIGJ1czpcXG4rXFxuK1xcdFxcdCAgMS4gUmVhZCAgLSB2YWx1ZSBtdXN0IGJlIDB4MDAwMDAwMDAgKGJ1cyBpcyBmcmVlKS5cXG4rXFx0XFx0ICAyLiBXcml0ZSAtIDB4MDAwMGZmZmYgKHJlcXVlc3Qgb3duZXJzaGlwKS5cXG4rXFx0XFx0ICAzLiBQb2xsICAtIHJlYWQgdW50aWwgdGhlIHZhbHVlIGlzIDB4ZmZmZmZmZmYgKE1pY3JvQmxhemVcXG4rXFx0XFx0ICAgICAgICAgICAgIGhhcyBhY2tub3dsZWRnZWQgdGhlIGhhbmRvdmVyKS5cXG4rXFxuK1xcdFxcdEFmdGVyIGFsbCBJMkMgdHJhZmZpYyBpcyBjb21wbGV0ZSB0aGUgYnVzIG11c3QgYmUgcmVsZWFzZWRcXG4rXFx0XFx0Ynkgd3JpdGluZyAweDAwMDAwMDAwLlxcbitcXG4rXFx0XFx0VGhlIHBvbGwgcmVhZCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkIGFuZCB0aGVyZWZvcmUgYWxzb1xcbitcXHRcXHRmbHVzaGVzIHRoZSBwcmVjZWRpbmcgcG9zdGVkIHdyaXRlIHRvIHRoZSBGUEdBOyBub1xcbitcXHRcXHRhZGRpdGlvbmFsIHJlYWQtYmFjayBpcyByZXF1aXJlZCBmb3Igb3JkZXJpbmcuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlc1xcbiBEYXRlOlxcdFxcdFNlcHRlbWJlciAyMDIxXFxuIENvbnRhY3Q6XFx0Sm9uYXRoYW4gTGVtb24gXFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuaW5kZXggMzVlOTExZjFhZDc4YzAuLjc5ZmVjNTE2MWM5OTdiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbkBAIC0xNjMsNyArMTYzLDggQEAgc3RydWN0IGdwaW9fcmVnIHtcXG4gXFx0dTMyXFx0Z3BpbzE7XFxuIFxcdHUzMlxcdF9fcGFkMDtcXG4gXFx0dTMyXFx0Z3BpbzI7XFxuLVxcdHUzMlxcdF9fcGFkMTtcXG4rXFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuK1xcdHUzMlxcdGkyY19idXNfY3RybDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xcbkBAIC00MTYsNiArNDE3LDExIEBAIHN0cnVjdCBwdHBfb2NwIHtcXG4gXFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XFxuIFxcdGludCBzaWduYWxzX25yO1xcbiBcXHRpbnQgZnJlcV9pbl9ucjtcXG4rXFx0LyogY3BsZF9pMmNfeGZlciBzeXNmcyAoYWR2YV94MSkgKi9cXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0dGFwX2kyY19sb2NrO1xcbitcXHRpbnRcXHRcXHRcXHR0YXBfaTJjX2FkYXBfbnI7IC8qIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xcbitcXHR1OFxcdFxcdFxcdHRhcF9pMmNfcnNwWzIxXTsgLyogW3N0YXR1cywgcmVhZF9kYXRhLi4uXSAqL1xcbitcXHRzaXplX3RcXHRcXHRcXHR0YXBfaTJjX3JzcF9sZW47XFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXFx0QklUKDApXFxuQEAgLTQyMjQsNiArNDIzMCwyMDUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7XFxuIFxcdHsgfSxcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIGkyY19idXNfY3RybCBleHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFRoZSBzaGFyZWQgYnVzIHJlcXVpcmVzIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlIHVzZTpcXG4rICogICByZWFkIDB4MDAwMDAwMDAgKGZyZWUpIC1cXHUwMDNlIHdyaXRlIDB4MDAwMGZmZmYgKHJlcXVlc3QpIC1cXHUwMDNlXFxuKyAqICAgcG9sbCB1bnRpbCAweGZmZmZmZmZmIChNaWNyb0JsYXplIGNvbmZpcm1zIHJlbGVhc2UpLlxcbisgKlxcbisgKiBUaGUgcG9sbCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkLCB3aGljaCBhbHNvIGZsdXNoZXMgdGhlIHByZWNlZGluZ1xcbisgKiBwb3N0ZWQgd3JpdGUgdG8gdGhlIEZQR0EsIHNvIG5vIHNlcGFyYXRlIGtlcm5lbCByZWFkLWJhY2sgaXMgbmVlZGVkLlxcbisgKi9cXG4rc3RhdGljIHNzaXplX3RcXG4raTJjX2J1c19jdHJsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcHBzX3NlbGVjdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIjB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBpb3JlYWQzMihcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCkpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdFxcbitpMmNfYnVzX2N0cmxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdHUzMiB2YWw7XFxuK1xcbitcXHRpZiAoIWJwLVxcdTAwM2VwcHNfc2VsZWN0KVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0aWYgKGtzdHJ0b3UzMihidWYsIDAsIFxcdTAwMjZ2YWwpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aW93cml0ZTMyKHZhbCwgXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhpMmNfYnVzX2N0cmwpO1xcbitcXG4rLypcXG4rICogY3BsZF9pMmNfeGZlciAtIHN5c2ZzIGJpbmFyeSBJMkMgcGFzc3Rocm91Z2ggZm9yIGFkdmFfeDEgVEFQIENQTEQuXFxuKyAqXFxuKyAqIHdyaXRlOiBbYWRkcl1bd3JpdGVfbGVuXVtyZWFkX2xlbl1bZmxhZ3NdW3dyaXRlX2RhdGEuLi5dXFxuKyAqICAgZmxhZ3MgYml0IDA6IEkyQ19NX05PU1RBUlQgb24gdGhlIHJlYWQgc2VnbWVudFxcbisgKiByZWFkOiAgW3N0YXR1c11bcmVhZF9kYXRhLi4uXVxcbisgKiAgIHN0YXR1cyAwID0gc3VjY2VzcywgZWxzZSBwb3NpdGl2ZSBlcnJub1xcbisgKlxcbisgKiBPbmx5IGFkZHJlc3NlcyAweDQwIChDUExEKSBhbmQgMHg3NCAobXV4KSBhcmUgcGVybWl0dGVkLlxcbisgKi9cXG4rI2RlZmluZSBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNICAyXFxuK3N0YXRpYyBjb25zdCB1OCB0YXBfaTJjX2FsbG93ZWRfYWRkcnNbVEFQX0kyQ19BTExPV0VEX0FERFJTX05VTV0gPSB7XFxuK1xcdDB4NDAsIC8qIENQTEQgKi9cXG4rXFx0MHg3NCwgLyogbXV4ICAqL1xcbit9O1xcbitcXG4rLypcXG4rICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLlxcbisgKlxcbisgKiBFcnJub3MgXFx1MDAzZSAyNTUgKGUuZy4gRU5PVFNVUFA9NTI0KSBvciBtdWx0aXBsZXMgb2YgMjU2IHdvdWxkIHRydW5jYXRlXFxuKyAqIHRvIGEgd3Jvbmcgb3IgemVybyB2YWx1ZSB3aXRoIGEgcGxhaW4gKHU4KSBjYXN0LiAgTWFwIHRob3NlIHRvIEVJTy5cXG4rICovXFxuK3N0YXRpYyB1OCB0YXBfaTJjX2Vycm5vX3RvX2J5dGUoaW50IGVycilcXG4re1xcbitcXHRpbnQgdmFsID0gKGVyciBcXHUwMDNjIDApID8gLWVyciA6IEVJTztcXG4rXFxuK1xcdHJldHVybiAodmFsIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiB2YWwgXFx1MDAzYz0gMHhGRikgPyAodTgpdmFsIDogRUlPO1xcbit9XFxuK1xcbisjZGVmaW5lIFRBUF9JMkNfUkVRX0hEUl9MRU4gICA0XFxuKyNkZWZpbmUgVEFQX0kyQ19NQVhfV1JJVEVfTEVOIDY3XFxuKyNkZWZpbmUgVEFQX0kyQ19NQVhfUkVBRF9MRU4gIDIwXFxuKyNkZWZpbmUgVEFQX0kyQ19GTEFHX05PU1RBUlQgIEJJVCgwKVxcbitcXG4rc3RhdGljIHNzaXplX3RcXG4rcHRwX29jcF9jcGxkX2kyY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0ICAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShrb2JqX3RvX2Rldihrb2JqKSk7XFxuK1xcdGNvbnN0IHU4ICpyZXEgPSAoY29uc3QgdTggKilidWY7XFxuK1xcdHU4IGFkZHIsIHdyaXRlX2xlbiwgcmVhZF9sZW4sIGZsYWdzO1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XFxuK1xcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XFxuK1xcdHU4ICpyZGJ1ZiA9IE5VTEw7XFxuK1xcdGludCBubXNncywgcmV0LCBpO1xcbitcXG4rXFx0LyogRWFjaCB3cml0ZSBpcyBvbmUgYXRvbWljIHJlcXVlc3Q7IG5vbi16ZXJvIG9mZnNldCBtZWFucyBhXFxuK1xcdCAqIG1pZC1idWZmZXIgcHdyaXRlKCkgd2hpY2ggd291bGQgbWlzcGFyc2UgdGhlIGhlYWRlci5cXG4rXFx0ICovXFxuK1xcdGlmIChvZmYgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChjb3VudCBcXHUwMDNjIFRBUF9JMkNfUkVRX0hEUl9MRU4gfHwgY291bnQgXFx1MDAzZSBUQVBfSTJDX1JFUV9IRFJfTEVOICsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGFkZHIgICAgICA9IHJlcVswXTtcXG4rXFx0d3JpdGVfbGVuID0gcmVxWzFdO1xcbitcXHRyZWFkX2xlbiAgPSByZXFbMl07XFxuK1xcdGZsYWdzICAgICA9IHJlcVszXTtcXG4rXFxuK1xcdC8qIFZhbGlkYXRlICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNOyBpKyspXFxuK1xcdFxcdGlmIChhZGRyID09IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tpXSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdGlmIChpID09IFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0pXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRpZiAod3JpdGVfbGVuIFxcdTAwM2UgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJlYWRfbGVuIFxcdTAwM2UgVEFQX0kyQ19NQVhfUkVBRF9MRU4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAod3JpdGVfbGVuICsgVEFQX0kyQ19SRVFfSERSX0xFTiBcXHUwMDNlIGNvdW50KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHdyaXRlX2xlbiA9PSAwIFxcdTAwMjZcXHUwMDI2IHJlYWRfbGVuID09IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHQvKiBJMkNfTV9OT1NUQVJUIHN1cHByZXNzZXMgdGhlIHJlcGVhdGVkIFNUQVJUIGJldHdlZW4gd3JpdGUgYW5kIHJlYWRcXG4rXFx0ICogc2VnbWVudHM7IGl0IGhhcyBubyBtZWFuaW5nIG9uIGEgZmlyc3QtYW5kLW9ubHkgbWVzc2FnZS5cXG4rXFx0ICovXFxuK1xcdGlmICgoZmxhZ3MgXFx1MDAyNiBUQVBfSTJDX0ZMQUdfTk9TVEFSVCkgXFx1MDAyNlxcdTAwMjYgd3JpdGVfbGVuID09IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogaTJjX2dldF9hZGFwdGVyKCkgdGFrZXMgYSByZWZlcmVuY2UgdW5kZXIgY29yZV9sb2NrOyBzYWZlIGFnYWluc3RcXG4rXFx0ICogY29uY3VycmVudCBhZGFwdGVyIHVuYmluZC5cXG4rXFx0ICovXFxuK1xcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVxcdTAwM2V0YXBfaTJjX2FkYXBfbnIpKTtcXG4rXFx0aWYgKCFhZGFwKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdG5tc2dzID0gMDtcXG4rXFx0aWYgKHdyaXRlX2xlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0bXNnc1tubXNnc10uYWRkciAgPSBhZGRyO1xcbitcXHRcXHRtc2dzW25tc2dzXS5mbGFncyA9IDA7XFxuK1xcdFxcdG1zZ3Nbbm1zZ3NdLmxlbiAgID0gd3JpdGVfbGVuO1xcbitcXHRcXHRtc2dzW25tc2dzXS5idWYgICA9ICh1OCAqKXJlcSArIFRBUF9JMkNfUkVRX0hEUl9MRU47XFxuK1xcdFxcdG5tc2dzKys7XFxuK1xcdH1cXG4rXFx0aWYgKHJlYWRfbGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHR1MTYgcmRfZmxhZ3MgPSBJMkNfTV9SRDtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRBUF9JMkNfRkxBR19OT1NUQVJUKVxcbitcXHRcXHRcXHRyZF9mbGFncyB8PSBJMkNfTV9OT1NUQVJUO1xcbitcXHRcXHRtc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7XFxuK1xcdFxcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gcmRfZmxhZ3MgfCBJMkNfTV9ETUFfU0FGRTtcXG4rXFx0XFx0bXNnc1tubXNnc10ubGVuICAgPSByZWFkX2xlbjtcXG4rXFx0XFx0cmRidWYgPSBremFsbG9jKHJlYWRfbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFyZGJ1Zikge1xcbitcXHRcXHRcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1zZ3Nbbm1zZ3NdLmJ1ZiA9IHJkYnVmO1xcbitcXHRcXHRubXNncysrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZXJpYWxpc2UgdHJhbnNmZXIrcHVibGlzaCBzbyBjb25jdXJyZW50IHdyaXRlcnMgY2Fubm90IG92ZXJ3cml0ZVxcbitcXHQgKiBlYWNoIG90aGVyJ3MgcmVzcG9uc2UgaW4gdGFwX2kyY19yc3AuXFxuK1xcdCAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZicC1cXHUwMDNldGFwX2kyY19sb2NrKTtcXG4rXFx0cmV0ID0gaTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcXG4rXFx0aWYgKHJldCA9PSBubXNncykge1xcbitcXHRcXHRicC1cXHUwMDNldGFwX2kyY19yc3BbMF0gPSAwO1xcbitcXHRcXHRpZiAocmVhZF9sZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNmJwLVxcdTAwM2V0YXBfaTJjX3JzcFsxXSwgcmRidWYsIHJlYWRfbGVuKTtcXG4rXFx0XFx0YnAtXFx1MDAzZXRhcF9pMmNfcnNwX2xlbiA9IDEgKyByZWFkX2xlbjtcXG4rXFx0XFx0cmV0ID0gY291bnQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJwLVxcdTAwM2V0YXBfaTJjX3JzcFswXSAgPSB0YXBfaTJjX2Vycm5vX3RvX2J5dGUocmV0KTtcXG4rXFx0XFx0YnAtXFx1MDAzZXRhcF9pMmNfcnNwX2xlbiA9IDE7XFxuK1xcdFxcdHJldCA9IChyZXQgXFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicC1cXHUwMDNldGFwX2kyY19sb2NrKTtcXG4rXFx0a2ZyZWUocmRidWYpO1xcbitcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdFxcbitwdHBfb2NwX2NwbGRfaTJjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbitcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0ICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGtvYmpfdG9fZGV2KGtvYmopKTtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZicC1cXHUwMDNldGFwX2kyY19sb2NrKTtcXG4rXFx0aWYgKG9mZiBcXHUwMDNlPSBicC1cXHUwMDNldGFwX2kyY19yc3BfbGVuKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IG1pbihjb3VudCwgYnAtXFx1MDAzZXRhcF9pMmNfcnNwX2xlbiAtIChzaXplX3Qpb2ZmKTtcXG4rXFx0XFx0bWVtY3B5KGJ1ZiwgYnAtXFx1MDAzZXRhcF9pMmNfcnNwICsgb2ZmLCByZXQpO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZXRhcF9pMmNfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB0YXBfaTJjX2Jpbl9hdHRyID0ge1xcbitcXHQuYXR0ciAgPSB7IC5uYW1lID0gXFxcImNwbGRfaTJjX3hmZXJcXFwiLCAubW9kZSA9IDA2MDAgfSxcXG4rXFx0LndyaXRlID0gcHRwX29jcF9jcGxkX2kyY193cml0ZSxcXG4rXFx0LnJlYWQgID0gcHRwX29jcF9jcGxkX2kyY19yZWFkLFxcbit9O1xcbitcXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfYXR0cnNbXSA9IHtcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3NlcmlhbG51bS5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfZ25zc19zeW5jLmF0dHIsXFxuQEAgLTQyNzIsMTEgKzQ0NzcsMTggQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3RzX3dpbmRvd19hZGp1c3QuYXR0cixcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3V0Y190YWlfb2Zmc2V0LmF0dHIsXFxuIFxcdFxcdTAwMjZkZXZfYXR0cl90b2RfY29ycmVjdGlvbi5hdHRyLFxcbitcXHRcXHUwMDI2ZGV2X2F0dHJfaTJjX2J1c19jdHJsLmF0dHIsXFxuK1xcdE5VTEwsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzW10gPSB7XFxuK1xcdFxcdTAwMjZ0YXBfaTJjX2Jpbl9hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWR2YV90aW1lY2FyZF94MV9ncm91cCA9IHtcXG4tXFx0LmF0dHJzID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcXG4rXFx0LmF0dHJzICAgICA9IGFkdmFfdGltZWNhcmRfeDFfYXR0cnMsXFxuK1xcdC5iaW5fYXR0cnMgPSBiaW5fYWR2YV94MV90aW1lY2FyZF9hdHRycyxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYWR2YV90aW1lY2FyZF94MV9ncm91cHNbXSA9IHtcXG5AQCAtNDkwMiw2ICs1MTE0LDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKVxcbiBcXHRcXHRjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLVxcdTAwM2VpMmNfY2xrKTtcXG4gXFx0aWYgKGJwLVxcdTAwM2VuX2lycXMpXFxuIFxcdFxcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVxcdTAwM2VwZGV2KTtcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2YnAtXFx1MDAzZXRhcF9pMmNfbG9jayk7XFxuIFxcdGRldmljZV91bnJlZ2lzdGVyKFxcdTAwMjZicC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG5AQCAtNTA3OCw2ICs1MjkxLDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZTtcXG4gXFxuK1xcdC8qIE11c3QgYmUgYmVmb3JlIHRoZSBmaXJzdCBlcnJvciBwYXRoIHRoYXQgY2FsbHMgcHRwX29jcF9kZXRhY2goKSxcXG4rXFx0ICogc28gbXV0ZXhfZGVzdHJveSgpIGFsd2F5cyBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LlxcbitcXHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXFxuK1xcdCAqIG5vdGlmaWVyIChwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKSBmaXJlcyB3aGVuIHRoZSBhZGFwdGVyXFxuK1xcdCAqIHJlZ2lzdGVycyBhbmQgc3RvcmVzIHRoZSBhZGFwdGVyIG51bWJlciBpbiB0YXBfaTJjX2FkYXBfbnI7IHRoZVxcbitcXHQgKiAtMSBzZW50aW5lbCBiZWxvdyBtdXN0IGFscmVhZHkgYmUgd3JpdHRlbiBzbyB0aGF0IGEgbm90aWZpZXJcXG4rXFx0ICogZmlyaW5nIGR1cmluZyByZWdpc3RyYXRpb24gaXMgbmV2ZXIgb3ZlcndyaXR0ZW4gYnkgdGhpcyBpbml0LlxcbitcXHQgKi9cXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2YnAtXFx1MDAzZXRhcF9pMmNfbG9jayk7XFxuK1xcdGJwLVxcdTAwM2V0YXBfaTJjX2FkYXBfbnIgPSAtMTtcXG4rXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XFxuIFxcbiBcXHQvKiBjb21wYXQgbW9kZS5cXG5AQCAtNTIxNywxMSArNTQ0MSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIFxcbiBmb3VuZDpcXG4gXFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4tXFx0aWYgKGFkZClcXG4rXFx0aWYgKGFkZCkge1xcbiBcXHRcXHRwdHBfb2NwX3N5bWxpbmsoYnAsIGNoaWxkLCBcXFwiaTJjXFxcIik7XFxuLVxcdGVsc2VcXG4rXFx0XFx0LyogQ2FjaGUgYWRhcHRlciBudW1iZXI7IGNwbGRfaTJjX3hmZXIgdXNlcyBpMmNfZ2V0X2FkYXB0ZXIoKVxcbitcXHRcXHQgKiBmb3IgYSByZWZlcmVuY2UtY291bnRlZCwgdW5iaW5kLXNhZmUgbG9va3VwLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNldGFwX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLVxcdTAwM2Vucik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZXRhcF9pMmNfYWRhcF9uciwgLTEpO1xcdC8qIGludmFsaWRhdGUgYmVmb3JlIGZyZWUgKi9cXG4gXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmJwLVxcdTAwM2VkZXYua29iaiwgXFxcImkyY1xcXCIpO1xcbi1cXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MTguNzQ5NjMxNzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDA4MjE1MjgwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHRwX29jcF9jcGxkX2kyY193cml0ZVwiLFxuICAgIFwicHRwX29jcF9jcGxkX2kyY19yZWFkXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc3RvcmVcIixcbiAgICBcImkyY19idXNfY3RybF9zaG93XCIsXG4gICAgXCJ0YXBfaTJjX2Vycm5vX3RvX2J5dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSB0byB0aGUgYHB0cF9vY3BgIGRyaXZlciBmb3IgdGhlIEFEVkEgeDEgVEFQIGJvYXJkLiBUaGVzZSBhdHRyaWJ1dGVzIGFsbG93IHVzZXJzcGFjZSB0byBwZXJmb3JtIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIFRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gcGFyc2VzIHVzZXIgaW5wdXQsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBpbml0aWF0ZXMgSTJDIHRyYW5zZmVycywgd2hpY2ggaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGZkNGQwYmQ1ZThkMjlmOTM4MWYxMGRhMzdkOTU4Njg4YzAwZjIxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDE4OjQ2OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbmluZGV4IDNhZTQxYjc2MzRhYzllLi5jNjI3NjZkZjdhMjAyZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbkBAIC0xMSw2ICsxMSw2MiBAQCBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG4gRGVzY3JpcHRpb246XHRUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkXG4gXHRcdHJlZ2lzdGVyZWQuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfaTJjX3hmZXJcbitEYXRlOlx0XHRKdWx5IDIwMjZcbitDb250YWN0Olx0U2FnaSBNYWltb24gXHUwMDNjc2FnaS5tYWltb25AYWR2YS5jb21cdTAwM2VcbitEZXNjcmlwdGlvbjpcdChSVykgQmluYXJ5IHN5c2ZzIGF0dHJpYnV0ZSBwcm92aWRpbmcgYSByYXcgSTJDIHBhc3N0aHJvdWdoIHRvXG4rXHRcdHRoZSBDUExEIGFuZCBJMkMgbXV4IG9uIEFEVkEgeDEgVEFQIGJvYXJkcy4gIE9ubHkgcHJlc2VudCBvblxuK1x0XHR0aGF0IGJvYXJkIHZhcmlhbnQuXG4rXG4rXHRcdEVhY2ggd3JpdGUgaW5pdGlhdGVzIG9uZSBJMkMgdHJhbnNhY3Rpb24uICBUaGUgd3JpdGUgcGF5bG9hZFxuK1x0XHRtdXN0IGJlIGV4YWN0bHkgZm91ciBoZWFkZXIgYnl0ZXMgZm9sbG93ZWQgYnkgdGhlIHdyaXRlIGRhdGE6XG4rXG4rXHRcdCAgQnl0ZSAwOiBzbGF2ZSBhZGRyZXNzIChvbmx5IDB4NDAgYW5kIDB4NzQgYXJlIHBlcm1pdHRlZClcbitcdFx0ICBCeXRlIDE6IG51bWJlciBvZiBieXRlcyB0byB3cml0ZSAoMC4uNjcpXG4rXHRcdCAgQnl0ZSAyOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBiYWNrICgwLi4yMClcbitcdFx0ICBCeXRlIDM6IGZsYWdzXG4rXHRcdCAgICAgICAgICAgIGJpdCAwIC0gc3VwcHJlc3MgdGhlIHJlcGVhdGVkIFNUQVJUIGJlZm9yZSB0aGVcbitcdFx0ICAgICAgICAgICAgICAgICAgICByZWFkIHNlZ21lbnQgKEkyQ19NX05PU1RBUlQpOyBvbmx5IHZhbGlkXG4rXHRcdCAgICAgICAgICAgICAgICAgICAgd2hlbiBib3RoIHdyaXRlIGFuZCByZWFkIGxlbmd0aHMgYXJlXG4rXHRcdCAgICAgICAgICAgICAgICAgICAgbm9uLXplcm9cbitcdFx0ICBCeXRlcyA0Li46IHdyaXRlIGRhdGEgKHdyaXRlX2xlbiBieXRlcylcbitcbitcdFx0QSBzdWJzZXF1ZW50IHJlYWQoKSByZXR1cm5zOlxuK1xuK1x0XHQgIEJ5dGUgMDogc3RhdHVzICgwID0gc3VjY2VzcywgcG9zaXRpdmUgZXJybm8gb24gZXJyb3IpXG4rXHRcdCAgQnl0ZXMgMS4uOiByZWFkIGRhdGEgKHJlYWRfbGVuIGJ5dGVzKSwgcHJlc2VudCBvbmx5IHdoZW5cbitcdFx0ICAgICAgICAgICAgIHN0YXR1cyBpcyAwIGFuZCByZWFkX2xlbiBcdTAwM2UgMFxuK1xuK1x0XHRUaGUgd3JpdGUgYW5kIHJlYWQgcG9ydGlvbnMgb2YgdGhlIHN5c2ZzIGZpbGUgc2hhcmUgYSBzaW5nbGVcbitcdFx0cGVyLWRldmljZSByZXNwb25zZSBidWZmZXIgcHJvdGVjdGVkIGJ5IGEgbXV0ZXg7IGEgc2luZ2xlXG4rXHRcdG9wZW4oKSAvIHdyaXRlKCkgLyByZWFkKCkgc2VxdWVuY2UgbXVzdCBiZSB1c2VkIHRvIGF2b2lkXG4rXHRcdGRhdGEgcmFjZXMgYmV0d2VlbiBjb25jdXJyZW50IHVzZXJzLlxuK1xuK1x0XHRPbmx5IHNsYXZlIGFkZHJlc3NlcyAweDQwIChMYXR0aWNlIENQTEQpIGFuZCAweDc0IChQQ0E5NTQ4XG4rXHRcdEkyQyBtdXgpIGFyZSBhY2NlcHRlZDsgYWxsIG90aGVycyByZXR1cm4gRVBFUk0uXG4rXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2kyY19idXNfY3RybFxuK0RhdGU6XHRcdEp1bHkgMjAyNlxuK0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NzYWdpLm1haW1vbkBhZHZhLmNvbVx1MDAzZVxuK0Rlc2NyaXB0aW9uOlx0KFJXKSBFeHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIgZm9yXG4rXHRcdHRoZSBzaGFyZWQgSTJDIGJ1cyBvbiBBRFZBIHgxIGFuZCB4MiBUQVAgYm9hcmRzLiAgT25seVxuK1x0XHRwcmVzZW50IHdoZW4gdGhlIGJvYXJkIGhhcyBhIHBwc19zZWxlY3QgcmVnaXN0ZXIgYmxvY2suXG4rXG4rXHRcdFVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIGEgdGhyZWUtc3RlcCBoYW5kc2hha2UgYmVmb3JlXG4rXHRcdGRyaXZpbmcgdGhlIGJ1czpcbitcbitcdFx0ICAxLiBSZWFkICAtIHZhbHVlIG11c3QgYmUgMHgwMDAwMDAwMCAoYnVzIGlzIGZyZWUpLlxuK1x0XHQgIDIuIFdyaXRlIC0gMHgwMDAwZmZmZiAocmVxdWVzdCBvd25lcnNoaXApLlxuK1x0XHQgIDMuIFBvbGwgIC0gcmVhZCB1bnRpbCB0aGUgdmFsdWUgaXMgMHhmZmZmZmZmZiAoTWljcm9CbGF6ZVxuK1x0XHQgICAgICAgICAgICAgaGFzIGFja25vd2xlZGdlZCB0aGUgaGFuZG92ZXIpLlxuK1xuK1x0XHRBZnRlciBhbGwgSTJDIHRyYWZmaWMgaXMgY29tcGxldGUgdGhlIGJ1cyBtdXN0IGJlIHJlbGVhc2VkXG4rXHRcdGJ5IHdyaXRpbmcgMHgwMDAwMDAwMC5cbitcbitcdFx0VGhlIHBvbGwgcmVhZCBpcyBhIFBDSWUgbm9uLXBvc3RlZCByZWFkIGFuZCB0aGVyZWZvcmUgYWxzb1xuK1x0XHRmbHVzaGVzIHRoZSBwcmVjZWRpbmcgcG9zdGVkIHdyaXRlIHRvIHRoZSBGUEdBOyBub1xuK1x0XHRhZGRpdGlvbmFsIHJlYWQtYmFjayBpcyByZXF1aXJlZCBmb3Igb3JkZXJpbmcuXG4rXG4gV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXG4gRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjFcbiBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXG5pbmRleCAzNWU5MTFmMWFkNzhjMC4uNzlmZWM1MTYxYzk5N2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuQEAgLTE2Myw3ICsxNjMsOCBAQCBzdHJ1Y3QgZ3Bpb19yZWcge1xuIFx0dTMyXHRncGlvMTtcbiBcdHUzMlx0X19wYWQwO1xuIFx0dTMyXHRncGlvMjtcbi1cdHUzMlx0X19wYWQxO1xuK1x0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXG4rXHR1MzJcdGkyY19idXNfY3RybDtcbiB9O1xuIFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xuQEAgLTQxNiw2ICs0MTcsMTEgQEAgc3RydWN0IHB0cF9vY3Age1xuIFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XG4gXHRpbnQgc2lnbmFsc19ucjtcbiBcdGludCBmcmVxX2luX25yO1xuK1x0LyogY3BsZF9pMmNfeGZlciBzeXNmcyAoYWR2YV94MSkgKi9cbitcdHN0cnVjdCBtdXRleFx0XHR0YXBfaTJjX2xvY2s7XG4rXHRpbnRcdFx0XHR0YXBfaTJjX2FkYXBfbnI7IC8qIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xuK1x0dThcdFx0XHR0YXBfaTJjX3JzcFsyMV07IC8qIFtzdGF0dXMsIHJlYWRfZGF0YS4uLl0gKi9cbitcdHNpemVfdFx0XHRcdHRhcF9pMmNfcnNwX2xlbjtcbiB9O1xuIFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcdEJJVCgwKVxuQEAgLTQyMjQsNiArNDIzMCwyMDUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7XG4gXHR7IH0sXG4gfTtcbiBcbisvKlxuKyAqIGkyY19idXNfY3RybCBleHBvc2VzIHRoZSBNaWNyb0JsYXplIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuXG4rICpcbisgKiBUaGUgc2hhcmVkIGJ1cyByZXF1aXJlcyBhIHRocmVlLXN0ZXAgaGFuZHNoYWtlIGJlZm9yZSB1c2U6XG4rICogICByZWFkIDB4MDAwMDAwMDAgKGZyZWUpIC1cdTAwM2Ugd3JpdGUgMHgwMDAwZmZmZiAocmVxdWVzdCkgLVx1MDAzZVxuKyAqICAgcG9sbCB1bnRpbCAweGZmZmZmZmZmIChNaWNyb0JsYXplIGNvbmZpcm1zIHJlbGVhc2UpLlxuKyAqXG4rICogVGhlIHBvbGwgaXMgYSBQQ0llIG5vbi1wb3N0ZWQgcmVhZCwgd2hpY2ggYWxzbyBmbHVzaGVzIHRoZSBwcmVjZWRpbmdcbisgKiBwb3N0ZWQgd3JpdGUgdG8gdGhlIEZQR0EsIHNvIG5vIHNlcGFyYXRlIGtlcm5lbCByZWFkLWJhY2sgaXMgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90XG4raTJjX2J1c19jdHJsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0aWYgKCFicC1cdTAwM2VwcHNfc2VsZWN0KVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIweCUwOHhcXG5cIixcbitcdFx0XHQgIGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKSk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90XG4raTJjX2J1c19jdHJsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0dTMyIHZhbDtcbitcbitcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRpZiAoa3N0cnRvdTMyKGJ1ZiwgMCwgXHUwMDI2dmFsKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpb3dyaXRlMzIodmFsLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhpMmNfYnVzX2N0cmwpO1xuK1xuKy8qXG4rICogY3BsZF9pMmNfeGZlciAtIHN5c2ZzIGJpbmFyeSBJMkMgcGFzc3Rocm91Z2ggZm9yIGFkdmFfeDEgVEFQIENQTEQuXG4rICpcbisgKiB3cml0ZTogW2FkZHJdW3dyaXRlX2xlbl1bcmVhZF9sZW5dW2ZsYWdzXVt3cml0ZV9kYXRhLi4uXVxuKyAqICAgZmxhZ3MgYml0IDA6IEkyQ19NX05PU1RBUlQgb24gdGhlIHJlYWQgc2VnbWVudFxuKyAqIHJlYWQ6ICBbc3RhdHVzXVtyZWFkX2RhdGEuLi5dXG4rICogICBzdGF0dXMgMCA9IHN1Y2Nlc3MsIGVsc2UgcG9zaXRpdmUgZXJybm9cbisgKlxuKyAqIE9ubHkgYWRkcmVzc2VzIDB4NDAgKENQTEQpIGFuZCAweDc0IChtdXgpIGFyZSBwZXJtaXR0ZWQuXG4rICovXG4rI2RlZmluZSBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNICAyXG4rc3RhdGljIGNvbnN0IHU4IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNXSA9IHtcbitcdDB4NDAsIC8qIENQTEQgKi9cbitcdDB4NzQsIC8qIG11eCAgKi9cbit9O1xuK1xuKy8qXG4rICogdGFwX2kyY19lcnJub190b19ieXRlIC0gZW5jb2RlIGEga2VybmVsIGVycm5vIGFzIGEgb25lLWJ5dGUgc3RhdHVzLlxuKyAqXG4rICogRXJybm9zIFx1MDAzZSAyNTUgKGUuZy4gRU5PVFNVUFA9NTI0KSBvciBtdWx0aXBsZXMgb2YgMjU2IHdvdWxkIHRydW5jYXRlXG4rICogdG8gYSB3cm9uZyBvciB6ZXJvIHZhbHVlIHdpdGggYSBwbGFpbiAodTgpIGNhc3QuICBNYXAgdGhvc2UgdG8gRUlPLlxuKyAqL1xuK3N0YXRpYyB1OCB0YXBfaTJjX2Vycm5vX3RvX2J5dGUoaW50IGVycilcbit7XG4rXHRpbnQgdmFsID0gKGVyciBcdTAwM2MgMCkgPyAtZXJyIDogRUlPO1xuK1xuK1x0cmV0dXJuICh2YWwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHZhbCBcdTAwM2M9IDB4RkYpID8gKHU4KXZhbCA6IEVJTztcbit9XG4rXG4rI2RlZmluZSBUQVBfSTJDX1JFUV9IRFJfTEVOICAgNFxuKyNkZWZpbmUgVEFQX0kyQ19NQVhfV1JJVEVfTEVOIDY3XG4rI2RlZmluZSBUQVBfSTJDX01BWF9SRUFEX0xFTiAgMjBcbisjZGVmaW5lIFRBUF9JMkNfRkxBR19OT1NUQVJUICBCSVQoMClcbitcbitzdGF0aWMgc3NpemVfdFxuK3B0cF9vY3BfY3BsZF9pMmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHQgICAgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdCAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoa29ial90b19kZXYoa29iaikpO1xuK1x0Y29uc3QgdTggKnJlcSA9IChjb25zdCB1OCAqKWJ1ZjtcbitcdHU4IGFkZHIsIHdyaXRlX2xlbiwgcmVhZF9sZW4sIGZsYWdzO1xuK1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuK1x0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcbitcdHU4ICpyZGJ1ZiA9IE5VTEw7XG4rXHRpbnQgbm1zZ3MsIHJldCwgaTtcbitcbitcdC8qIEVhY2ggd3JpdGUgaXMgb25lIGF0b21pYyByZXF1ZXN0OyBub24temVybyBvZmZzZXQgbWVhbnMgYVxuK1x0ICogbWlkLWJ1ZmZlciBwd3JpdGUoKSB3aGljaCB3b3VsZCBtaXNwYXJzZSB0aGUgaGVhZGVyLlxuK1x0ICovXG4rXHRpZiAob2ZmICE9IDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGNvdW50IFx1MDAzYyBUQVBfSTJDX1JFUV9IRFJfTEVOIHx8IGNvdW50IFx1MDAzZSBUQVBfSTJDX1JFUV9IRFJfTEVOICsgVEFQX0kyQ19NQVhfV1JJVEVfTEVOKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGFkZHIgICAgICA9IHJlcVswXTtcbitcdHdyaXRlX2xlbiA9IHJlcVsxXTtcbitcdHJlYWRfbGVuICA9IHJlcVsyXTtcbitcdGZsYWdzICAgICA9IHJlcVszXTtcbitcbitcdC8qIFZhbGlkYXRlICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUQVBfSTJDX0FMTE9XRURfQUREUlNfTlVNOyBpKyspXG4rXHRcdGlmIChhZGRyID09IHRhcF9pMmNfYWxsb3dlZF9hZGRyc1tpXSlcbitcdFx0XHRicmVhaztcbitcdGlmIChpID09IFRBUF9JMkNfQUxMT1dFRF9BRERSU19OVU0pXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRpZiAod3JpdGVfbGVuIFx1MDAzZSBUQVBfSTJDX01BWF9XUklURV9MRU4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHJlYWRfbGVuIFx1MDAzZSBUQVBfSTJDX01BWF9SRUFEX0xFTilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAod3JpdGVfbGVuICsgVEFQX0kyQ19SRVFfSERSX0xFTiBcdTAwM2UgY291bnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHdyaXRlX2xlbiA9PSAwIFx1MDAyNlx1MDAyNiByZWFkX2xlbiA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdC8qIEkyQ19NX05PU1RBUlQgc3VwcHJlc3NlcyB0aGUgcmVwZWF0ZWQgU1RBUlQgYmV0d2VlbiB3cml0ZSBhbmQgcmVhZFxuK1x0ICogc2VnbWVudHM7IGl0IGhhcyBubyBtZWFuaW5nIG9uIGEgZmlyc3QtYW5kLW9ubHkgbWVzc2FnZS5cbitcdCAqL1xuK1x0aWYgKChmbGFncyBcdTAwMjYgVEFQX0kyQ19GTEFHX05PU1RBUlQpIFx1MDAyNlx1MDAyNiB3cml0ZV9sZW4gPT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBpMmNfZ2V0X2FkYXB0ZXIoKSB0YWtlcyBhIHJlZmVyZW5jZSB1bmRlciBjb3JlX2xvY2s7IHNhZmUgYWdhaW5zdFxuK1x0ICogY29uY3VycmVudCBhZGFwdGVyIHVuYmluZC5cbitcdCAqL1xuK1x0YWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtXHUwMDNldGFwX2kyY19hZGFwX25yKSk7XG4rXHRpZiAoIWFkYXApXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0bm1zZ3MgPSAwO1xuK1x0aWYgKHdyaXRlX2xlbiBcdTAwM2UgMCkge1xuK1x0XHRtc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7XG4rXHRcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gMDtcbitcdFx0bXNnc1tubXNnc10ubGVuICAgPSB3cml0ZV9sZW47XG4rXHRcdG1zZ3Nbbm1zZ3NdLmJ1ZiAgID0gKHU4ICopcmVxICsgVEFQX0kyQ19SRVFfSERSX0xFTjtcbitcdFx0bm1zZ3MrKztcbitcdH1cbitcdGlmIChyZWFkX2xlbiBcdTAwM2UgMCkge1xuK1x0XHR1MTYgcmRfZmxhZ3MgPSBJMkNfTV9SRDtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBUQVBfSTJDX0ZMQUdfTk9TVEFSVClcbitcdFx0XHRyZF9mbGFncyB8PSBJMkNfTV9OT1NUQVJUO1xuK1x0XHRtc2dzW25tc2dzXS5hZGRyICA9IGFkZHI7XG4rXHRcdG1zZ3Nbbm1zZ3NdLmZsYWdzID0gcmRfZmxhZ3MgfCBJMkNfTV9ETUFfU0FGRTtcbitcdFx0bXNnc1tubXNnc10ubGVuICAgPSByZWFkX2xlbjtcbitcdFx0cmRidWYgPSBremFsbG9jKHJlYWRfbGVuLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFyZGJ1Zikge1xuK1x0XHRcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuK1x0XHRtc2dzW25tc2dzXS5idWYgPSByZGJ1ZjtcbitcdFx0bm1zZ3MrKztcbitcdH1cbitcbitcdC8qIFNlcmlhbGlzZSB0cmFuc2ZlcitwdWJsaXNoIHNvIGNvbmN1cnJlbnQgd3JpdGVycyBjYW5ub3Qgb3ZlcndyaXRlXG4rXHQgKiBlYWNoIG90aGVyJ3MgcmVzcG9uc2UgaW4gdGFwX2kyY19yc3AuXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbitcdHJldCA9IGkyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4rXHRpZiAocmV0ID09IG5tc2dzKSB7XG4rXHRcdGJwLVx1MDAzZXRhcF9pMmNfcnNwWzBdID0gMDtcbitcdFx0aWYgKHJlYWRfbGVuIFx1MDAzZSAwKVxuK1x0XHRcdG1lbWNweShcdTAwMjZicC1cdTAwM2V0YXBfaTJjX3JzcFsxXSwgcmRidWYsIHJlYWRfbGVuKTtcbitcdFx0YnAtXHUwMDNldGFwX2kyY19yc3BfbGVuID0gMSArIHJlYWRfbGVuO1xuK1x0XHRyZXQgPSBjb3VudDtcbitcdH0gZWxzZSB7XG4rXHRcdGJwLVx1MDAzZXRhcF9pMmNfcnNwWzBdICA9IHRhcF9pMmNfZXJybm9fdG9fYnl0ZShyZXQpO1xuK1x0XHRicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4gPSAxO1xuK1x0XHRyZXQgPSAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbitcdGtmcmVlKHJkYnVmKTtcbitcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90XG4rcHRwX29jcF9jcGxkX2kyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdCAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShrb2JqX3RvX2Rldihrb2JqKSk7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNldGFwX2kyY19sb2NrKTtcbitcdGlmIChvZmYgXHUwMDNlPSBicC1cdTAwM2V0YXBfaTJjX3JzcF9sZW4pIHtcbitcdFx0cmV0ID0gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IG1pbihjb3VudCwgYnAtXHUwMDNldGFwX2kyY19yc3BfbGVuIC0gKHNpemVfdClvZmYpO1xuK1x0XHRtZW1jcHkoYnVmLCBicC1cdTAwM2V0YXBfaTJjX3JzcCArIG9mZiwgcmV0KTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlIHRhcF9pMmNfYmluX2F0dHIgPSB7XG4rXHQuYXR0ciAgPSB7IC5uYW1lID0gXCJjcGxkX2kyY194ZmVyXCIsIC5tb2RlID0gMDYwMCB9LFxuK1x0LndyaXRlID0gcHRwX29jcF9jcGxkX2kyY193cml0ZSxcbitcdC5yZWFkICA9IHB0cF9vY3BfY3BsZF9pMmNfcmVhZCxcbit9O1xuK1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzIsMTEgKzQ0NzcsMTggQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfeDFfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX3RzX3dpbmRvd19hZGp1c3QuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3V0Y190YWlfb2Zmc2V0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl90b2RfY29ycmVjdGlvbi5hdHRyLFxuK1x0XHUwMDI2ZGV2X2F0dHJfaTJjX2J1c19jdHJsLmF0dHIsXG4rXHROVUxMLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBiaW5fYWR2YV94MV90aW1lY2FyZF9hdHRyc1tdID0ge1xuK1x0XHUwMDI2dGFwX2kyY19iaW5fYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xuLVx0LmF0dHJzID0gYWR2YV90aW1lY2FyZF94MV9hdHRycyxcbitcdC5hdHRycyAgICAgPSBhZHZhX3RpbWVjYXJkX3gxX2F0dHJzLFxuK1x0LmJpbl9hdHRycyA9IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3Vwc1tdID0ge1xuQEAgLTQ5MDIsNiArNTExNCw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiBcdFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cdTAwM2VpMmNfY2xrKTtcbiBcdGlmIChicC1cdTAwM2VuX2lycXMpXG4gXHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVx1MDAzZXBkZXYpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuIFx0ZGV2aWNlX3VucmVnaXN0ZXIoXHUwMDI2YnAtXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtNTA3OCw2ICs1MjkxLDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4rXHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXG4rXHQgKiBzbyBtdXRleF9kZXN0cm95KCkgYWx3YXlzIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXguXG4rXHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXG4rXHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxuK1x0ICogcmVnaXN0ZXJzIGFuZCBzdG9yZXMgdGhlIGFkYXB0ZXIgbnVtYmVyIGluIHRhcF9pMmNfYWRhcF9ucjsgdGhlXG4rXHQgKiAtMSBzZW50aW5lbCBiZWxvdyBtdXN0IGFscmVhZHkgYmUgd3JpdHRlbiBzbyB0aGF0IGEgbm90aWZpZXJcbitcdCAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC5cbitcdCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZicC1cdTAwM2V0YXBfaTJjX2xvY2spO1xuK1x0YnAtXHUwMDNldGFwX2kyY19hZGFwX25yID0gLTE7XG4rXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZicC1cdTAwM2VzeW5jX3dvcmssIHB0cF9vY3Bfc3luY193b3JrKTtcbiBcbiBcdC8qIGNvbXBhdCBtb2RlLlxuQEAgLTUyMTcsMTEgKzU0NDEsMTYgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIGZvdW5kOlxuIFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbi1cdGlmIChhZGQpXG4rXHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwiaTJjXCIpO1xuLVx0ZWxzZVxuK1x0XHQvKiBDYWNoZSBhZGFwdGVyIG51bWJlcjsgY3BsZF9pMmNfeGZlciB1c2VzIGkyY19nZXRfYWRhcHRlcigpXG4rXHRcdCAqIGZvciBhIHJlZmVyZW5jZS1jb3VudGVkLCB1bmJpbmQtc2FmZSBsb29rdXAuXG4rXHRcdCAqL1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZXRhcF9pMmNfYWRhcF9uciwgaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKS1cdTAwM2Vucik7XG4rXHR9IGVsc2Uge1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZXRhcF9pMmNfYWRhcF9uciwgLTEpO1x0LyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSAqL1xuIFx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZicC1cdTAwM2VkZXYua29iaiwgXCJpMmNcIik7XG4tXG4rXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjoxOC43NDk2MzM2NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjAyODM5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldyBQYXRjaCBmb3IgdGhlIFBUUCBPQ1AgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgaW50cm9kdWNlcyBzb21lIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIHRvIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgYWRkaW5nIGBpMmNfYnVzX2N0cmxgLCB3aGljaCBpcyByZWFkLXdyaXRlLCBhbmQgdGhlbiBgY3BsZF9pMmNfeGZlcmAsIHdoaWNoIGlzIGEgcmVhZC13cml0ZSBiaW5hcnkgYXR0cmlidXRlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLiBTaW5jZSBpdCBtb2RpZmllcyBhIGRyaXZlciwgaXQncyBhIGdvb2QgY2FuZGlkYXRlLlxuXG5UaGlzIHBhdGNoIHRvdWNoZXMgdGhlIFwiT3BlbiBDb21wdXRlIFByb2plY3QgdGltZSBjYXJkXCIgZHJpdmVyLiBJIHJlbWVtYmVyIHRoaXMgb25lOyBpdCdzIGEgUENJIGRldmljZSBkcml2ZXIuIFRoZSBwcm9iZSBmdW5jdGlvbiBpcyBgcHRwX29jcF9wcm9iZWAsIGFuZCB0aGUgcGF0Y2ggYWRkcyB0aGVzZSBuZXcgc3lzZnMgYXR0cmlidXRlcy4gTm93LCBjYW4gc3l6a2FsbGVyIGhhbmRsZSB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzPyBZZXMsIGl0IGFic29sdXRlbHkgY2FuLiBFaXRoZXIgaWYgdGhlcmUgYXJlIGRpcmVjdCBkZXNjcmlwdGlvbnMgb3IgZXZlbiBqdXN0IHRocm91Z2ggZ2VuZXJpYyBzeXNmcyBmdXp6aW5nLiBBY3R1YWxseSwgSSBzZWVtIHRvIHJlY2FsbCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgc3lzZnMgZGVzY3JpcHRpb25zLiBHcmVhdC4gVGhhdCdzIGEgaHVnZSBwbHVzLlxuXG5UaGUgbmV4dCBzdGVwLCBhbHdheXMsIGlzIHRvIGNoZWNrIGlmIGBwdHBfb2NwYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0J3MgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IG5vIHBvaW50IGluIHRyeWluZyB0byBmdXp6IHNvbWV0aGluZyB0aGF0IGlzbid0IGJ1aWx0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTYwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MjMuOTUyNDc1NTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjY5ODQyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9LY29uZmlnPTE5OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1XXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIwOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjIxMDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIk9wZW5Db21wdXRlIFRpbWVDYXJkIGFzIFBUUCBjbG9ja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MjYuMzE5NDY0OTU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1Njc0NzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCB0aGUgcGllY2VzIHRoaXMgdGhpbmcgcmVsaWVzIG9uLiBJIGNhbid0IGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGlzc3VlcyB1bnRpbCBJIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBsaWtlIGJ1aWxkaW5nIGEgaG91c2Ug4oCTIHlvdSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIGZvdW5kYXRpb24sIGZyYW1pbmcsIGFuZCB1dGlsaXRpZXMgYXJlIGNvbWluZyBmcm9tIGJlZm9yZSB5b3UgY2FuIGV2ZW4gdGhpbmsgYWJvdXQgdGhlIGludGVyaW9yIGRlc2lnbi4gSSBuZWVkIHRvIGtub3cgKmV2ZXJ5dGhpbmcqIGl0J3MgdGllZCB0by4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJjb25uZWN0aW9ucyBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MjkuMjc2MjE0NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwMTU0OTM3OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0NjozMi4yNzc3NzU2NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2MjIwOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIEtjb25maWcgZW50cnk6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEVudHJ5IGZvciBQVFBfMTU4OF9DTE9DS19PQ1AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgb3IgcmVjb21tZW5kYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtjb25maWcgb3B0aW9uLCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCwgaW5zaWRlIGFuZCBvdXQuIEknbSBnb2luZyB0byBzdGFydCBieSBtZXRpY3Vsb3VzbHkgcmVhZGluZyBpdC4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgaW1wbGljYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgbXkgY3VycmVudCBhcmNoaXRlY3R1cmUgb3IgcHJvamVjdCBnb2Fscz8gSSdtIGxvb2tpbmcgZm9yIHRoZSBncmFudWxhciBkZXRhaWxzIOKAkyB0aGUgc3VidGxldGllcyB0aGF0IHdpbGwgZGVmaW5lIGhvdyB0aGlzIGNsb2NrIGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0gYW5kIHdoZXRoZXIgaXQgdHJ1bHkgbGV2ZXJhZ2VzIE9DUCBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIGtub3cgaG93IGl0IG1pZ2h0IGFmZmVjdCB0aGUgcHJlY2lzaW9uIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgUFRQIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGtlZXBpbmcgYW4gb3BlbiBtaW5kIGFzIEkgcmVhZCwgYW5kIG1ha2Ugbm90ZXMgb2YgdGhlIGFzc3VtcHRpb25zIHRoZSBhdXRob3IgbWF5IGhhdmUgbWFkZSBhbmQgd2hhdCBwb3NzaWJsZSBlZGdlLWNhc2VzIG1heSBuZWVkIGF0dGVudGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6MzUuODgzOTk4ODAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxcbiAyMTE6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW5Db21wdXRlIFRpbWVDYXJkIGFzIFBUUCBjbG9ja1xcXCJcXG4gMjEyOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gMjEzOlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTVREXFxuIDIxNTpcXHRcXHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXFxuIDIxNjpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuIDIxNzpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gMjE4OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAyMTk6XFx0XFx0c2VsZWN0IENSQzE2XFxuIDIyMDpcXHRcXHRzZWxlY3QgRFBMTFxcbiAyMjE6XFx0XFx0aGVscFxcbiAyMjI6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ICBUaGUgT3BlbkNvbXB1dGUgdGltZSBjYXJkIGlzIGFuIGF0b21pYyBjbG9jayBhbG9uZyB3aXRoXFxuIDIyNTpcXHRcXHQgIGEgR1BTIHJlY2VpdmVyIHRoYXQgcHJvdmlkZXMgYSBHcmFuZG1hc3RlciBjbG9jayBzb3VyY2VcXG4gMjI2OlxcdFxcdCAgZm9yIGEgUFRQIGVuYWJsZWQgbmV0d29yay5cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnRpbWluZ2NhcmQuY29tL1xcbiAyMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjM1Ljg4NDA2OTA1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNzE2NzUzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQSBEZWVwIERpdmUgaW50byB0aGUgUFRQIE9DUCBDUExEIEkyQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgZGVwZW5kZW5jaWVzOiBQQ0ksIEkyQywgTVRELCBTRVJJQUxfODI1MCwgYW5kIENPTU1PTl9DTEsuIEl0J3MgYSBQQ0kgZHJpdmVyLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbWVhbnMgU3l6a2FsbGVyIGNhbiBwcm9iYWJseSB1c2UgdlBDSSB0byBmdXp6IGl0LiBNeSBrZXkgZm9jdXMgcmlnaHQgbm93IGlzIHRoYXQgdGhpcyBkcml2ZXIgcmVnaXN0ZXJzIHN5c2ZzIGF0dHJpYnV0ZXMgLSBhbHdheXMgYSBncmVhdCBhdHRhY2sgc3VyZmFjZS5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGVzZSBmdW5jdGlvbnM6IGBpMmNfYnVzX2N0cmxfc2hvd2AsIGBpMmNfYnVzX2N0cmxfc3RvcmVgLCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAsIGFuZCBgcHRwX29jcF9jcGxkX2kyY19yZWFkYC4gVGhlIGJpZyBxdWVzdGlvbiBpcywgY2FuIEkgcmVhY2ggYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgPyBCaW5nbyEgSXQncyBhIHN5c2ZzIGJpbmFyeSBhdHRyaWJ1dGUgd3JpdGUgZnVuY3Rpb24sIGFuZCBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgZnV6emluZyBzeXNmcy5cblxuTm93LCBsZXQncyBzZWUgaWYgYHB0cF9vY3BgIGlzIGEgbW9kdWxlIG9yIGJ1aWx0LWluLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBjYW4gYmUgYnVpbHQtaW4gaWYgd2UgZW5hYmxlIGBQVFBfMTU4OF9DTE9DS19PQ1BgLiBTbywgSSdsbCBmb2N1cyBvbiB0aGVzZSBmb3VyOiBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAsIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgLCBgaTJjX2J1c19jdHJsX3N0b3JlYCwgYW5kIGBpMmNfYnVzX2N0cmxfc2hvd2AuXG5cbkkgc2VlIHNvbWUgb3RoZXIgZnVuY3Rpb25zLCBidXQgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWAgaXMgY2xlYXJseSBhIGhlbHBlciwgYW5kIGBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsYCBzZWVtcyB0byBoYXZlIHNvbWUgbW9kaWZpY2F0aW9ucy5cblxuSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSEgSXQncyBhZGRpbmcgbmV3IHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBwYXJzZSB1c2VyIGlucHV0LCBpbnRlcmFjdCB3aXRoIEkyQywgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIGlzIGVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBwYXJzZXMgYSBoZWFkZXIsIGNyYWZ0cyBJMkMgbWVzc2FnZXMsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBjYWxscyBgaTJjX3RyYW5zZmVyYCAtIGEgY2xhc3NpYyByZWNpcGUgZm9yIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy5cblxuTm93LCBJJ20gdmVyaWZ5aW5nIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWcsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQncyB0aGUgbWFpbiBrZXkuIEJ1dCB3YWl0LCBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgdXNlcyBgaTJjX2dldF9hZGFwdGVyYCBhbmQgYGkyY190cmFuc2ZlcmAsIGFuZCBJJ20gYWx3YXlzIHRoaW5raW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IEFEVkEgeDEgVEFQIGJvYXJkIHNwZWNpZmljIGNvbmZpZ3M/IFF1aWNrIGNoZWNrIG9mIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGZvciBgYWR2YV94MWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgY292ZXJzIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjQ2OjQ0LjE1NTc0NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTk4ODk3NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWR2YV94MVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTYyPXN0cnVjdCBncGlvX3JlZyB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTY1LVxcdHUzMlxcdGdwaW8yO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxNjY6XFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTE2Ny1cXHR1MzJcXHRpMmNfYnVzX2N0cmw7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzYwPXN0cnVjdCBwdHBfb2NwIHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MTktXFx0aW50IGZyZXFfaW5fbnI7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQyMDpcXHQvKiBjcGxkX2kyY194ZmVyIHN5c2ZzIChhZHZhX3gxKSAqL1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjEtXFx0c3RydWN0IG11dGV4XFx0XFx0dGFwX2kyY19sb2NrO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTQ1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NTk6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcDtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDYwLVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTkxNT1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV9yZXNvdXJjZVtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNzktXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwODA6c3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA4MS1cXHR7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI3Ny1cXHRcXHRcXHQuZmxhc2hfc3RhcnQgID0gMHgxMDAwMDAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjc4OlxcdFxcdFxcdC5zbWFfb3AgICAgICAgPSBcXHUwMDI2b2NwX2FkdmFfeDFfc21hX29wLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjc5LVxcdFxcdFxcdC5zaWduYWxzX25yICAgPSA0LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTEyODc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI5MS1cXHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjkyOlxcdHsgUENJX0RFVklDRV9EQVRBKEFEVkEsIFRJTUVDQVJEX1gxLCBcXHUwMDI2b2NwX2FkdmFfeDFfcmVzb3VyY2UpIH0sXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTMtXFx0eyB9XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTM3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2FkdmFfc21hX291dFtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzODgtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzODk6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9hZHZhX3gxX3NtYV9pbltdID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzkwLVxcdHsgLm5hbWUgPSBcXFwiUFBTMVxcXCIsXFx0LnZhbHVlID0gMHgwMDAxLCAgICAgIC5mcmVxdWVuY3kgPSAxIH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTQwMi1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTQwMzpzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2FkdmFfeDFfc21hX291dFtdID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xNDA0LVxcdHsgLm5hbWUgPSBcXFwiMTBNaHpcXFwiLFxcdC52YWx1ZSA9IDB4MDAwMCwgIC5mcmVxdWVuY3kgPSAxMDAwMDAwMH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjkwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI5MTItXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcCA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MjkxNDpcXHQudGJsXFx0XFx0PSB7IHB0cF9vY3BfYWR2YV94MV9zbWFfaW4sIHB0cF9vY3BfYWR2YV94MV9zbWFfb3V0IH0sXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI5MTUtXFx0LmluaXRcXHRcXHQ9IHB0cF9vY3Bfc21hX2ZiX2luaXQsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDI2OT1zdGF0aWMgREVWSUNFX0FUVFJfUlcoaTJjX2J1c19jdHJsKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjcxLS8qXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQyNzI6ICogY3BsZF9pMmNfeGZlciAtIHN5c2ZzIGJpbmFyeSBJMkMgcGFzc3Rocm91Z2ggZm9yIGFkdmFfeDEgVEFQIENQTEQuXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQyNzMtICpcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00NDY0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDQ4My1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDQ4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGJpbl9hZHZhX3gxX3RpbWVjYXJkX2F0dHJzW10gPSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ0ODUtXFx0XFx1MDAyNnRhcF9pMmNfYmluX2F0dHIsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDQ4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NDkwLVxcdC5hdHRycyAgICAgPSBhZHZhX3RpbWVjYXJkX3gxX2F0dHJzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NDkxOlxcdC5iaW5fYXR0cnMgPSBiaW5fYWR2YV94MV90aW1lY2FyZF9hdHRycyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDQ5Mi19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODo0Njo0Ny43NTU2NDI5NDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MzgzMDQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQURWQSB4MSBUQVAgQm9hcmQgSTJDIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIHRoZSBgYWR2YV94MWAgaXMgZXNzZW50aWFsbHkganVzdCBhbm90aGVyIFBDSSBkZXZpY2UgdmFyaWFudC4gVGhhdCBtZWFucyBTeXprYWxsZXIgY2FuLCBhbmQgc2hvdWxkLCBmdXp6IGl0LiBUaGUga2V5IGlzIHNldHRpbmcgdXAgdGhlIFBDSSBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgdmVuZG9yL2RldmljZSBJRC4gVGhlIHN5c2ZzIGF0dHJpYnV0ZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBgYWR2YV94MWAgdmFyaWFudCwgc28gd2UncmUgb25seSBmdXp6aW5nIHRoZSByaWdodCB0YXJnZXQuIFN5emthbGxlcidzIHZpcnR1YWwgUENJIHN1cHBvcnQgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMgZW11bGF0aW9uLiBUaGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBQVFBfMTU4OF9DTE9DS19PQ1BgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBQVFBfMTU4OF9DTE9DS19PQ1BgIGlzICphbGwqIHdlIG5lZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3B0cC9LY29uZmlnYCBmaWxlLi4uIFllcCwgaXQgZGVwZW5kcyBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCBgSEFTX0lPTUVNYCwgYFBDSWAsIGBJMkNgLCBgTVREYCwgYFNFUklBTF84MjUwYCwgYW5kIGBDT01NT05fQ0xLYCwgYnV0IHdlIGNhbiBlbmFibGUgdGhvc2UgZnJvbSB0aGUgYmFzZSBjb25maWcuIEp1c3QgZW5hYmxpbmcgYFBUUF8xNTg4X0NMT0NLX09DUGAgaXMgZW5vdWdoLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEl0J3M6XG4qICAgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgXG4qICAgYHB0cF9vY3BfY3BsZF9pMmNfcmVhZGBcbiogICBgaTJjX2J1c19jdHJsX3N0b3JlYFxuKiAgIGBpMmNfYnVzX2N0cmxfc2hvd2BcblxuSXMgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWAgd29ydGggaW5jbHVkaW5nPyBJdCdzIGEgc21hbGwgaGVscGVyLCBidXQgaXQncyBwYXJ0IG9mIHRoaXMgbmV3IGxvZ2ljLCBzbyBsZXQncyBhZGQgaXQuIFdoYXQgYWJvdXQgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgPyBUaGF0J3MgYmVlbiBtb2RpZmllZCwgYnV0IGl0J3MgYW4gZXhpc3RpbmcgZnVuY3Rpb24sIHNvIG5vdCBjcml0aWNhbCBmb3IgZnV6emluZy4gSXQncyBwYXJ0IG9mIHRoZSBiYXNlIGRyaXZlci5cblxuUXVpY2sgZG91YmxlLWNoZWNrOiBgUFRQXzE1ODhfQ0xPQ0tfT0NQYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBzcGVjaWZpYyBjb25maWcgd2UgbmVlZC5cblxuUmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbiBjb25maXJtcyB0aGUga2V5IGFkZGl0aW9uczpcbiogICBgaTJjX2J1c19jdHJsX3Nob3dgXG4qICAgYGkyY19idXNfY3RybF9zdG9yZWBcbiogICBgdGFwX2kyY19lcnJub190b19ieXRlYFxuKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3dyaXRlYFxuKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgXG5cblRoZXNlIGFyZSBhbGwgKm5ldyogZnVuY3Rpb25zIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMuIFRoaXMgbWFrZXMgdGhlbSBpZGVhbCBmdXp6aW5nIHRhcmdldHMgZm9yIFN5emthbGxlci5cblxuVGhlcmVmb3JlLCBoZXJlJ3Mgd2hhdCBJJ2xsIGRvOlxuXG4qICAgU2V0IGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgU2V0IGBGb2N1c1N5bWJvbHM6YCB0bzpcbiAgICAqICAgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgXG4gICAgKiAgIGBwdHBfb2NwX2NwbGRfaTJjX3JlYWRgXG4gICAgKiAgIGBpMmNfYnVzX2N0cmxfc3RvcmVgXG4gICAgKiAgIGBpMmNfYnVzX2N0cmxfc2hvd2BcbiAgICAqICAgYHRhcF9pMmNfZXJybm9fdG9fYnl0ZWBcbiogICBTZXQgYEVuYWJsZUNvbmZpZ3M6YCB0bzpcbiAgICAqICAgYFBUUF8xNTg4X0NMT0NLX09DUGBcblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyBhdHRyaWJ1dGVzIChgY3BsZF9pMmNfeGZlcmAgYW5kIGBpMmNfYnVzX2N0cmxgKSBpbiB0aGUgYHB0cF9vY3BgIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYWxsb3cgdXNlcnNwYWNlIHRvIGluaXRpYXRlIEkyQyB0cmFuc2ZlcnMgYW5kIGNvbnRyb2wgdGhlIEkyQyBidXMgYXJiaXRyYXRpb24gcmVnaXN0ZXIuIEluIHBhcnRpY3VsYXIsIHRoZSBgcHRwX29jcF9jcGxkX2kyY193cml0ZWAgZnVuY3Rpb24gaGFuZGxlcyB1c2VyIGlucHV0LCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIEkyQyB0cmFuc2ZlciBpbml0aWF0aW9uOyB0aGlzIGlzIGNvbXBsZXggZnVuY3Rpb25hbCBsb2dpYyBhbmQgdGhlcmVmb3JlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4OCwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6NDY6NTkuNDkzOTUxNzA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyMDQzMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBUUF8xNTg4X0NMT0NLX09DUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfd3JpdGVcIixcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfcmVhZFwiLFxuICAgIFwiaTJjX2J1c19jdHJsX3N0b3JlXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc2hvd1wiLFxuICAgIFwidGFwX2kyY19lcnJub190b19ieXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBUUF8xNTg4X0NMT0NLX09DUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfd3JpdGVcIixcbiAgICBcInB0cF9vY3BfY3BsZF9pMmNfcmVhZFwiLFxuICAgIFwiaTJjX2J1c19jdHJsX3N0b3JlXCIsXG4gICAgXCJpMmNfYnVzX2N0cmxfc2hvd1wiLFxuICAgIFwidGFwX2kyY19lcnJub190b19ieXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgc3lzZnMgYXR0cmlidXRlcyAoYGNwbGRfaTJjX3hmZXJgIGFuZCBgaTJjX2J1c19jdHJsYCkgdG8gdGhlIGBwdHBfb2NwYCBkcml2ZXIgZm9yIHRoZSBBRFZBIHgxIFRBUCBib2FyZC4gVGhlc2UgYXR0cmlidXRlcyBhbGxvdyB1c2Vyc3BhY2UgdG8gcGVyZm9ybSBJMkMgdHJhbnNmZXJzIGFuZCBjb250cm9sIHRoZSBJMkMgYnVzIGFyYml0cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYHB0cF9vY3BfY3BsZF9pMmNfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyB1c2VyIGlucHV0LCBhbGxvY2F0ZXMgbWVtb3J5LCBhbmQgaW5pdGlhdGVzIEkyQyB0cmFuc2ZlcnMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[1] Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2] Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 21:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 21:14:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 18:48:39 +0000 UTC FinishedAt: 2026-07-24 18:48:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowppvx6/series-workflowppvx6-convert-artifact-246776455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 18:48:59 +0000 UTC FinishedAt: 2026-07-24 19:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 18:48:59 +0000 UTC FinishedAt: 2026-07-24 19:36:48 +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:*73a3ddbf-b71d-4113-be1f-ee06411906c3,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-workflowppvx6/series-workflowppvx6-convert-artifact-246776455/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": "dc040a25-2c16-4c86-852b-2ddc2e9d2458", "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-workflowppvx6/series-workflowppvx6-build-action-3601256733/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 18:48:59 +0000 UTC FinishedAt: 2026-07-24 19:36:38 +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:*73a3ddbf-b71d-4113-be1f-ee06411906c3,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-workflowppvx6/series-workflowppvx6-convert-artifact-246776455/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": "dc040a25-2c16-4c86-852b-2ddc2e9d2458", "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-workflowppvx6/series-workflowppvx6-build-action-3601256733/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 19:36:48 +0000 UTC FinishedAt: 2026-07-24 19:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 19:36:48 +0000 UTC FinishedAt: 2026-07-24 19:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 19:36:48 +0000 UTC FinishedAt: 2026-07-24 19:36:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 19:36:48 +0000 UTC FinishedAt: 2026-07-24 19:36:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowppvx6/series-workflowppvx6-convert-artifact-1117098422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 19:36:59 +0000 UTC FinishedAt: 2026-07-24 19:39:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 19:36:59 +0000 UTC FinishedAt: 2026-07-24 19:39:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc040a25-2c16-4c86-852b-2ddc2e9d2458,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-workflowppvx6/series-workflowppvx6-build-action-3601256733/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-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 19:39:12 +0000 UTC FinishedAt: 2026-07-24 19:39:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 19:39:12 +0000 UTC FinishedAt: 2026-07-24 19:39:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 19:39:12 +0000 UTC FinishedAt: 2026-07-24 20:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 19:39:12 +0000 UTC FinishedAt: 2026-07-24 20:20:58 +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:*73a3ddbf-b71d-4113-be1f-ee06411906c3,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-workflowppvx6/series-workflowppvx6-convert-artifact-1117098422/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": "f10b2ac8-2f16-43ff-bf2a-d4d585304e4b", "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-workflowppvx6/series-workflowppvx6-build-action-2760758970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 19:39:12 +0000 UTC FinishedAt: 2026-07-24 20:20:48 +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:*73a3ddbf-b71d-4113-be1f-ee06411906c3,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-workflowppvx6/series-workflowppvx6-convert-artifact-1117098422/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": "f10b2ac8-2f16-43ff-bf2a-d4d585304e4b", "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-workflowppvx6/series-workflowppvx6-build-action-2760758970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 20:20:58 +0000 UTC FinishedAt: 2026-07-24 20:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 20:20:58 +0000 UTC FinishedAt: 2026-07-24 20:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 20:20:58 +0000 UTC FinishedAt: 2026-07-24 20:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 20:20:58 +0000 UTC FinishedAt: 2026-07-24 20:22:54 +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:*f10b2ac8-2f16-43ff-bf2a-d4d585304e4b,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-workflowppvx6/series-workflowppvx6-build-action-2760758970/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-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 20:23:04 +0000 UTC FinishedAt: 2026-07-24 21:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 20:23:04 +0000 UTC FinishedAt: 2026-07-24 21:14:43 +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":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"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:*dc040a25-2c16-4c86-852b-2ddc2e9d2458,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f10b2ac8-2f16-43ff-bf2a-d4d585304e4b,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-workflowppvx6/series-workflowppvx6-build-action-3601256733/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-workflowppvx6/series-workflowppvx6-build-action-2760758970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 20:23:04 +0000 UTC FinishedAt: 2026-07-24 20:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 20:23:04 +0000 UTC FinishedAt: 2026-07-24 20:23:08 +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":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"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-workflowppvx6/series-workflowppvx6-convert-artifact-187696347/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 20:23:04 +0000 UTC FinishedAt: 2026-07-24 20:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 20:23:04 +0000 UTC FinishedAt: 2026-07-24 20:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 20:23:04 +0000 UTC FinishedAt: 2026-07-24 20:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 20:23:14 +0000 UTC FinishedAt: 2026-07-24 21:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppvx6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ptp_ocp_cpld_i2c_write","ptp_ocp_cpld_i2c_read","i2c_bus_ctrl_store","i2c_bus_ctrl_show","tap_i2c_errno_to_byte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_OCP"],"series_id":"33a9d490-d982-47ae-a45b-bdf633c3edfc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 20:23:14 +0000 UTC FinishedAt: 2026-07-24 21:14:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc040a25-2c16-4c86-852b-2ddc2e9d2458,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f10b2ac8-2f16-43ff-bf2a-d4d585304e4b,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-workflowppvx6/series-workflowppvx6-build-action-3601256733/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-workflowppvx6/series-workflowppvx6-build-action-2760758970/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-workflowppvx6/series-workflowppvx6-convert-artifact-187696347/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,}