Name: series-workflowkghrh Phase: Succeeded StartedAt: 2026-07-22 15:05:47 +0000 UTC FinishedAt: 2026-07-22 17:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[0] Phase: Succeeded StartedAt: 2026-07-22 15:05:47 +0000 UTC FinishedAt: 2026-07-22 15:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 15:05:47 +0000 UTC FinishedAt: 2026-07-22 15:28:04 +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": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_META", "FBNIC", "HWMON" ], "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": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_META", "FBNIC", "HWMON" ], "series_id": "972d099c-6103-4f01-b52e-6cccfb31210d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fbnic_fw_parse_threshold_exceeded_resp", "fbnic_fw_parse_cap_resp", "fbnic_hwmon_temp_read", "fbnic_hwmon_in_read", "fbnic_hwmon_sensor_read", "fbnic_hwmon_notify_event", "fbnic_hwmon_read", "fbnic_hwmon_read_threshold", "fbnic_hwmon_read_alarm" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfTUVUQSYjMzQ7LAogICAgJiMzNDtGQk5JQyYjMzQ7LAogICAgJiMzNDtIV01PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwJiMzNDssCiAgICAmIzM0O2ZibmljX2Z3X3BhcnNlX2NhcF9yZXNwJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3RlbXBfcmVhZCYjMzQ7LAogICAgJiMzNDtmYm5pY19od21vbl9pbl9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3NlbnNvcl9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX25vdGlmeV9ldmVudCYjMzQ7LAogICAgJiMzNDtmYm5pY19od21vbl9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWRfYWxhcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBtb25pdG9yaW5nIHRocmVzaG9sZCBhbmQgYWxhcm0gc3VwcG9ydCB0byB0aGUgZmJuaWMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyByZWFkIGhhbmRsZXJzIGZvciB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3JzLCBhbmQgYWRkcyBhIGZpcm13YXJlIG1lc3NhZ2UgcGFyc2VyIGZvciB0aHJlc2hvbGQgZXhjZWVkZWQgZXZlbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXImIzM5O3MgaHdtb24gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBtYWlsYm94IHByb2Nlc3NpbmcsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBlbXVsYXRlZCBQQ0kvbWFpbGJveCBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNmY4MWE2MjA4MDIyOTE4OWRhMTA5MDJiZGI4MjIzNjA5MmJmYjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTU6MjY6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG5pbmRleCBkMDcxNTY5NWM0M2U3NS4uNGE0OWMyMGU0YTAxNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICYjNDM7MjIsMTggQEAgc3RydWN0IGZibmljX25hcGlfdmVjdG9yO1xuICNkZWZpbmUgRkJOSUNfTUFYX05BUElfVkVDVE9SU1x0XHQxMjh1XG4gI2RlZmluZSBGQk5JQ19NQlhfQ01QTF9TTE9UU1x0XHQ0XG4gXG4mIzQzO3N0cnVjdCBmYm5pY19od21vbl9jYWNoZSB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4mIzQzO1x0czMyIHRlbXBfbWRlZztcbiYjNDM7XHRzMzIgdm9sdF9tdjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGZibmljX2RldiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcbiBcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcbiBcdHN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqZndfcmVwb3J0ZXI7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKm90cF9yZXBvcnRlcjtcbiBcbkBAIC0xODUsNiAmIzQzOzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4mIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCk7XG4gXG4gaW50IGZibmljX21hY19yZXF1ZXN0X2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIHZvaWQgZmJuaWNfbWFjX2ZyZWVfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3OC4uNmRjYTM4MDc2ZDdiOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuQEAgLTU3NSw2ICYjNDM7NTc1LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX2Z3X2NhcF9yZXNwX2luZGV4W10gPSB7XG4gXHRGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLFxuIFx0XHRcdCAgICAgIEZCTklDX0ZXX0NBUF9SRVNQX0NPTU1JVF9NQVhfU0laRSksXG4gXHRGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWCksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgpLFxuIFx0RkJOSUNfVExWX0FUVFJfTEFTVFxuIH07XG4gXG5AQCAtNzAyLDYgJiM0Mzs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiBcdC8qIEFsd2F5cyBhc3N1bWUgd2UgbmVlZCBhIEJNQyByZWluaXQgKi9cbiBcdGZiZC1cdTAwM2Vmd19jYXAubmVlZF9ibWNfdGNhbV9yZWluaXQgPSB0cnVlO1xuIFxuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4gPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXggPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0ID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbiA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE2MTgsNiAmIzQzOzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXhbXSA9IHtcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4mIzQzO3tcbiYjNDM7XHRib29sIHRoZXJtX2V4Y2VlZGVkLCB2b2x0X2V4Y2VlZGVkO1xuJiM0MztcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTtcbiYjNDM7XHRzMzIgdmFsdWU7XG4mIzQzO1xuJiM0MztcdHRoZXJtX2V4Y2VlZGVkID1cbiYjNDM7XHRcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTtcbiYjNDM7XHR2b2x0X2V4Y2VlZGVkID1cbiYjNDM7XHRcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRoZXJtX2V4Y2VlZGVkIFx1MDAyNlx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtUaHJlc2hvbGQgZXhjZWVkZWQgbWVzc2FnZSB3aXRoIG5vIGZsYWcgc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7XG4mIzQzO1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcblwmIzM0OywgdmFsdWUpO1xuJiM0MztcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2b2x0X2V4Y2VlZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVEFHRSk7XG4mIzQzO1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcblwmIzM0OywgdmFsdWUpO1xuJiM0MztcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbHVlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCxcbkBAIC0xNjQ2LDYgJiM0MzsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVFNFTkVfUkVBRF9SRVNQLFxuIFx0XHRcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX3RzZW5lX3JlYWRfcmVzcCksXG4mIzQzO1x0RkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsXG4mIzQzO1x0XHRcdCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleCxcbiYjNDM7XHRcdFx0IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXG4gXHRcdFx0IGZibmljX2Z3X2xvZ19yZXFfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuaW5kZXggZDg0NzIzZTRjZmEzNjIuLjg3MzAxZTYwODI1NTVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiAmIzQzOzQ1LDE4IEBAIHN0cnVjdCBmYm5pY19md192ZXIge1xuIFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcbiB9O1xuIFxuJiM0MzsvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGVcbiYjNDM7ICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4mIzQzOyAqIHJlZnJlc2hlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHtcbiYjNDM7XHRzMzIgbWluO1xuJiM0MztcdHMzMiBtYXg7XG4mIzQzO1x0czMyIGNyaXQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xuQEAgLTYwLDYgJiM0Mzs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0dThcdGxpbmtfc3BlZWQ7XG4gXHR1OFx0bGlua19mZWM7XG4gXHR1MzJcdGFudGlfcm9sbGJhY2tfdmVyc2lvbjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4mIzQzO1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB2b2x0O1xuIH07XG4gXG4gc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24ge1xuQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7XG4gXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXHRcdFx0PSAweDM5LFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUVx0XHRcdD0gMHgzQyxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQXHRcdD0gMHgzRCxcbiYjNDM7XHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiAmIzQzOzI1OCwxMiBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlx0XHRcdD0gMHgxMSxcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUlx0XHQ9IDB4MTIsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cdFx0PSAweDE1LFxuJiM0MztcdC8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhcdFx0XHQ9IDB4MTksXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXHRcdFx0PSAweDFhLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXHRcdFx0PSAweDFjLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxuIH07XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTcsMTQgQEAgZW51bSB7XG4gXHRGQk5JQ19GV19UU0VORV9NU0dfTUFYXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBR1x0PSAweDAsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXHQ9IDB4MSxcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVx0XHRcdD0gMHgzLFxuJiM0MztcdEZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RkJOSUNfRldfT1dORVJTSElQX0ZMQUdcdFx0XHQ9IDB4MCxcbiBcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXHRcdFx0PSAweDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG5pbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgJiM0MzsyLDE4NCBAQFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHdtb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtmYm5pYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZmJuaWNfbWFjLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuJiM0MztzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbiYjNDM7XHRyZXR1cm4gMDQ0NDtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXHUwMDI2ZmJkLVx1MDAzZWh3bW9uX2NhY2hlO1xuJiM0MztcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHMzMiAqY2FjaGVkO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XG4mIzQzO1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhjYWNoZS1cdTAwM2VsYXN0X3JlYWQpKSB7XG4mIzQzO1x0XHQqdmFsID0gKmNhY2hlZDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuJiM0MztcdGlmICghZndfY21wbClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXhpdF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZndfY21wbC1cdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbiYjNDM7XHRpZiAoZndfY21wbC1cdTAwM2VyZXN1bHQpIHtcbiYjNDM7XHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCBlcnIpO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBGVyByZXR1cm5zIGJvdGggcmVhZGluZ3MgaW4gb25lIHJlc3BvbnNlLCBjYWNoZSBib3RoLiAqL1xuJiM0MztcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4mIzQzO1x0Y2FjaGUtXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaXZvbHRzO1xuJiM0MztcdGNhY2hlLVx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSAqY2FjaGVkO1xuJiM0MztleGl0X2NsZWFudXA6XG4mIzQzO1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbiYjNDM7ZXhpdF9mcmVlOlxuJiM0MztcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4tXHRcdFx0XHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxuLVx0XHRcdFx0ICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKVxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHQqdmFsID0gdGhyO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfYWxhcm0obG9uZyBhLCBsb25nIGIsIGxvbmcgKnZhbClcbiB7XG4tXHRpZiAodHlwZSA9PSBod21vbl90ZW1wIFx1MDAyNlx1MDAyNiBhdHRyID09IGh3bW9uX3RlbXBfaW5wdXQpXG4tXHRcdHJldHVybiAwNDQ0O1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4gXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25faW5faW5wdXQpXG4tXHRcdHJldHVybiAwNDQ0O1xuJiM0MztcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4mIzQzO1x0KnZhbCA9IGEgXHUwMDNlPSBiO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhdHRyKSB7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXg6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX2lucHV0OlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4gXHRcdFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxuIHtcbiBcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0Y29uc3Qgc3RydWN0IGZibmljX21hYyAqbWFjID0gZmJkLVx1MDAzZW1hYztcbi1cdGludCBpZDtcbiBcbi1cdGlkID0gZmJuaWNfaHdtb25fc2Vuc29yX2lkKHR5cGUpO1xuLVx0cmV0dXJuIGlkIFx1MDAzYyAwID8gaWQgOiBtYWMtXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl90ZW1wX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW46XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICYjNDM7MTg4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpmYm5pY19od21vbl9pbmZvW10gPSB7XG4tXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCwgSFdNT05fVF9JTlBVVCksXG4tXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9NSU4gfCBIV01PTl9UX01JTl9BTEFSTSB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX1RfTUFYIHwgSFdNT05fVF9NQVhfQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyhpbixcbiYjNDM7XHRcdFx0ICAgSFdNT05fSV9JTlBVVCB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUFYX0FMQVJNKSxcbiBcdE5VTExcbiB9O1xuIFxuQEAgLTU3LDI1ICYjNDM7MjA3LDgxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZmJkLVx1MDAzZWh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcJiMzNDtmYm5pY1wmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbiYjNDM7XHQvKiBTZWVkIGNhY2hlIHdpdGggc2VudGluZWwgc28gdGhlIGZpcnN0IHJlYWQgYWx3YXlzIHJlZnJlc2hlcy4gKi9cbiYjNDM7XHRmYmQtXHUwMDNlaHdtb25fY2FjaGUudGVtcF9tZGVnID0gRkJOSUNfU0VOU09SX05PX0RBVEE7XG4mIzQzO1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbiYjNDM7XG4mIzQzO1x0aHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwmIzM0O2ZibmljXCYjMzQ7LCBmYmQsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmZibmljX2NoaXBfaW5mbywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgIGZiZC1cdTAwM2Vod21vbik7XG4tXHRcdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4mIzQzO1x0XHRcdCAgIGh3bW9uKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSB8fCAhZmJkLVx1MDAzZWh3bW9uKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRod21vbl9kZXZpY2VfdW5yZWdpc3RlcihmYmQtXHUwMDNlaHdtb24pO1xuLVx0ZmJkLVx1MDAzZWh3bW9uID0gTlVMTDtcbiYjNDM7XHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbiYjNDM7XHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxuJiM0MztcdCAqIGFuZCB3YWl0IGZvciBhbnkgaW4tZmxpZ2h0IEZXIG1haWxib3ggSVJRIGhhbmRsZXIgdG8gZmluaXNoIHNvIGl0XG4mIzQzO1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGZiZC1cdTAwM2Vod21vbiwgTlVMTCk7XG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4mIzQzO1xuJiM0MztcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbiYjNDM7XHRzMzIgYXR0ciA9IC0xO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdHR5cGUgPSBod21vbl90ZW1wO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9taW5fYWxhcm07XG4mIzQzO1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbiYjNDM7XHRcdGVsc2UgaWYgKHZhbCBcdTAwM2U9IGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuJiM0MztcdFx0dHlwZSA9IGh3bW9uX2luO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX2luX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4mIzQzO1x0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cbiYjNDM7XHQgKiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cdTAwM2Vod21vbik7XG4mIzQzO1x0aWYgKGF0dHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBod21vbilcbiYjNDM7XHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Ny4uZmJhMmUyZWZhZWI4YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5AQCAtODk5LDYwICYjNDM7ODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcbiBcdFx0XHQgICAgVE1JX1NUQVRfVFhfUEFDS0VUXzkyMTdfTUFYX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIGludCBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLFxuLVx0XHRcdFx0ICAgICBsb25nICp2YWwpXG4te1xuLVx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XG4tXHRpbnQgZXJyID0gMDtcbi1cdHMzMiAqc2Vuc29yO1xuLVxuLVx0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuLVx0aWYgKCFmd19jbXBsKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHN3aXRjaCAoaWQpIHtcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbi1cdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRlcnIpO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwmIzM0Oyk7XG4tXHRcdGVyciA9IC1FVElNRURPVVQ7XG4tXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuLVx0fVxuLVxuLVx0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXG4tXHRpZiAoZndfY21wbC1cdTAwM2VyZXN1bHQpIHtcbi1cdFx0ZXJyID0gZndfY21wbC1cdTAwM2VyZXN1bHQ7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCYjMzQ7LFxuLVx0XHRcdF9fZnVuY19fLCBlcnIpO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdCp2YWwgPSAqc2Vuc29yO1xuLWV4aXRfY2xlYW51cDpcbi1cdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4tZXhpdF9mcmVlOlxuLVx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLFxuIFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxuQEAgLTk2Niw3ICYjNDM7OTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7XG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsXG4gXHQubGlua19kb3duID0gZmJuaWNfbWFjX2xpbmtfZG93bl9hc2ljLFxuIFx0LmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLFxuLVx0LmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbmluZGV4IDEwZjMwZTBlOGY2OTE2Li5iZGUyZGFhNjU2NDU3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCAmIzQzOzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xuIFxuIFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcdHZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpO1xuLVxuLVx0aW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7XG4gfTtcbiBcbiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgICAmIzM0O0ZCTklDJiMzNDssCiAgICAmIzM0O0hXTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fdGVtcF9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX2luX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50JiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF9hbGFybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG1vbml0b3JpbmcgdGhyZXNob2xkIGFuZCBhbGFybSBzdXBwb3J0IHRvIHRoZSBmYm5pYyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IHN5c2ZzIHJlYWQgaGFuZGxlcnMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvcnMsIGFuZCBhZGRzIGEgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgZm9yIHRocmVzaG9sZCBleGNlZWRlZCBldmVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZmODFhNjIwODAyMjkxODlkYTEwOTAyYmRiODIyMzYwOTJiZmI2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCmluZGV4IGQwNzE1Njk1YzQzZTc1Li40YTQ5YzIwZTRhMDE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaApAQCAtMjIsMTEgJiM0MzsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7CiAjZGVmaW5lIEZCTklDX01BWF9OQVBJX1ZFQ1RPUlMJCTEyOHUKICNkZWZpbmUgRkJOSUNfTUJYX0NNUExfU0xPVFMJCTQKIAomIzQzO3N0cnVjdCBmYm5pY19od21vbl9jYWNoZSB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbGFzdF9yZWFkOwomIzQzOwlzMzIgdGVtcF9tZGVnOwomIzQzOwlzMzIgdm9sdF9tdjsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGZibmljX2RldiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGRlbnRyeSAqZGJnX2ZiZDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsJc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIGh3bW9uX2NhY2hlOwogCXN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqZndfcmVwb3J0ZXI7CiAJc3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7CiAKQEAgLTE4NSw2ICYjNDM7MTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogCiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTsKJiM0Mzt2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpOwogCiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiB2b2lkIGZibmljX21hY19mcmVlX2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCmluZGV4IDI4M2QyNWZhZTc5ZTc4Li42ZGNhMzgwNzZkN2I5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwpAQCAtNTc1LDYgJiM0Mzs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHsKIAlGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLAogCQkJICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSwKIAlGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksCiAJRkJOSUNfVExWX0FUVFJfTEFTVAogfTsKIApAQCAtNzAyLDYgJiM0Mzs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKIAkvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovCiAJZmJkLSZndDtmd19jYXAubmVlZF9ibWNfdGNhbV9yZWluaXQgPSB0cnVlOwogCiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluID0KJiM0MzsJCWZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudGVtcC5tYXggPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQgPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudm9sdC5taW4gPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MTgsNiAmIzQzOzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7CiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9MQVNUCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSwKJiM0MzsJCQkJCQkgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKJiM0Mzt7CiYjNDM7CWJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7CiYjNDM7CXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTsKJiM0MzsJczMyIHZhbHVlOwomIzQzOwomIzQzOwl0aGVybV9leGNlZWRlZCA9CiYjNDM7CQlmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7CiYjNDM7CXZvbHRfZXhjZWVkZWQgPQomIzQzOwkJZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7CiYjNDM7CiYjNDM7CWlmICghdGhlcm1fZXhjZWVkZWQgJmFtcDsmYW1wOyAhdm9sdF9leGNlZWRlZCkgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkmIzM0O1RocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0aGVybV9leGNlZWRlZCkgewomIzQzOwkJaWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7CiYjNDM7CQkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCXZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpOwomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcbiYjMzQ7LCB2YWx1ZSk7CiYjNDM7CQlmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2b2x0X2V4Y2VlZGVkKSB7CiYjNDM7CQlpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHsKJiM0MzsJCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJdmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVEFHRSk7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxuJiMzNDssIHZhbHVlKTsKJiM0MzsJCWZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksCiAJRkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsCkBAIC0xNjQ2LDYgJiM0MzsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCwKIAkJCSBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsCiAJCQkgZmJuaWNfZndfcGFyc2VfdHNlbmVfcmVhZF9yZXNwKSwKJiM0MzsJRkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsCiYjNDM7CQkJIGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LAomIzQzOwkJCSBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksCiAJRkJOSUNfVExWX1BBUlNFUihMT0dfTVNHX1JFUSwKIAkJCSBmYm5pY19md19sb2dfcmVxX2luZGV4LAogCQkJIGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCmluZGV4IGQ4NDcyM2U0Y2ZhMzYyLi44NzMwMWU2MDgyNTU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogc3RydWN0IGZibmljX2RldjsKQEAgLTQ0LDYgJiM0Mzs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHsKIAljaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdOwogfTsKIAomIzQzOy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZQomIzQzOyAqIGZpcm13YXJlIG5ldmVyIHBvcHVsYXRlZCAob2xkZXIgZmlybXdhcmUpIG9yIGEgY2FjaGUgZW50cnkgbm90IHlldAomIzQzOyAqIHJlZnJlc2hlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZCTklDX1NFTlNPUl9OT19EQVRBCQkJUzMyX01JTgomIzQzOwomIzQzO3N0cnVjdCBmYm5pY190aHJlc2hvbGQgewomIzQzOwlzMzIgbWluOwomIzQzOwlzMzIgbWF4OwomIzQzOwlzMzIgY3JpdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyOwpAQCAtNjAsNiAmIzQzOzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJdTgJbGlua19zcGVlZDsKIAl1OAlsaW5rX2ZlYzsKIAl1MzIJYW50aV9yb2xsYmFja192ZXJzaW9uOwomIzQzOwlzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7CiYjNDM7CXN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDsKIH07CiAKIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHsKQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7CiAJRkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUAkJCT0gMHgzOSwKIAlGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRCQkJPSAweDNDLAogCUZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQCQk9IDB4M0QsCiYjNDM7CUZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRCQk9IDB4NDMsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUQkJCT0gMHg0NCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUAkJCT0gMHg0NSwKQEAgLTI0Miw2ICYjNDM7MjU4LDEyIEBAIGVudW0gewogCUZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTgkJCT0gMHgxMSwKIAlGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIJCT0gMHgxMiwKIAlGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04JCT0gMHgxNSwKJiM0MzsJLyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4JCQk9IDB4MTgsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYCQkJPSAweDE5LAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQJCQk9IDB4MWEsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOCQkJPSAweDFiLAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWAkJCT0gMHgxYywKIAlGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYCiB9OwogCkBAIC0yNzUsNiAmIzQzOzI5NywxNCBAQCBlbnVtIHsKIAlGQk5JQ19GV19UU0VORV9NU0dfTUFYCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcJPSAweDAsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRwk9IDB4MSwKJiM0MzsJRkJOSUNfRldfVFNFTkVfVEhFUk1BTAkJCT0gMHgyLAomIzQzOwlGQk5JQ19GV19UU0VORV9WT0xUQUdFCQkJPSAweDMsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCUZCTklDX0ZXX09XTkVSU0hJUF9GTEFHCQkJPSAweDAsCiAJRkJOSUNfRldfT1dORVJTSElQX1RJTUUJCQk9IDB4MSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwppbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMKQEAgLTIsNDEgJiM0MzsyLDE4NCBAQAogLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2h3bW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtmYm5pYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZmJuaWNfbWFjLmgmIzM0OwogCi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKQomIzQzO3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSwKJiM0MzsJCQkJICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKJiM0MzsJCQkJICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKQogewotCWlmICh0eXBlID09IGh3bW9uX3RlbXApCi0JCXJldHVybiBGQk5JQ19TRU5TT1JfVEVNUDsKLQlpZiAodHlwZSA9PSBod21vbl9pbikKLQkJcmV0dXJuIEZCTklDX1NFTlNPUl9WT0xUQUdFOwomIzQzOwlyZXR1cm4gMDQ0NDsKJiM0Mzt9CiAKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9ICZhbXA7ZmJkLSZndDtod21vbl9jYWNoZTsKJiM0MzsJc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwlzMzIgKmNhY2hlZDsKJiM0MzsKJiM0MzsJc3dpdGNoIChpZCkgewomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9URU1QOgomIzQzOwkJY2FjaGVkID0gJmFtcDtjYWNoZS0mZ3Q7dGVtcF9tZGVnOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6CiYjNDM7CQljYWNoZWQgPSAmYW1wO2NhY2hlLSZndDt2b2x0X212OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoKmNhY2hlZCAhPSBGQk5JQ19TRU5TT1JfTk9fREFUQSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtJmd0O2xhc3RfcmVhZCkpIHsKJiM0MzsJCSp2YWwgPSAqY2FjaGVkOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApOwomIzQzOwlpZiAoIWZ3X2NtcGwpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCWVycik7CiYjNDM7CQlnb3RvIGV4aXRfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2Z3X2NtcGwtJmd0O2RvbmUsIDEwICogSFopKSB7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXG4mIzM0Oyk7CiYjNDM7CQllcnIgPSAtRVRJTUVET1VUOwomIzQzOwkJZ290byBleGl0X2NsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovCiYjNDM7CWlmIChmd19jbXBsLSZndDtyZXN1bHQpIHsKJiM0MzsJCWVyciA9IGZ3X2NtcGwtJmd0O3Jlc3VsdDsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXG4mIzM0OywKJiM0MzsJCQlfX2Z1bmNfXywgZXJyKTsKJiM0MzsJCWdvdG8gZXhpdF9jbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEZXIHJldHVybnMgYm90aCByZWFkaW5ncyBpbiBvbmUgcmVzcG9uc2UsIGNhY2hlIGJvdGguICovCiYjNDM7CWNhY2hlLSZndDt0ZW1wX21kZWcgPSBmd19jbXBsLSZndDt1LnRzZW5lLm1pbGxpZGVncmVlczsKJiM0MzsJY2FjaGUtJmd0O3ZvbHRfbXYgPSBmd19jbXBsLSZndDt1LnRzZW5lLm1pbGxpdm9sdHM7CiYjNDM7CWNhY2hlLSZndDtsYXN0X3JlYWQgPSBqaWZmaWVzOwomIzQzOwomIzQzOwkqdmFsID0gKmNhY2hlZDsKJiM0MztleGl0X2NsZWFudXA6CiYjNDM7CWZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7CiYjNDM7ZXhpdF9mcmVlOgomIzQzOwlmYm5pY19md19wdXRfY21wbChmd19jbXBsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLAotCQkJCSAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCi0JCQkJICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKQomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CWlmICh0aHIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CiYjNDM7CSp2YWwgPSB0aHI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfYWxhcm0obG9uZyBhLCBsb25nIGIsIGxvbmcgKnZhbCkKIHsKLQlpZiAodHlwZSA9PSBod21vbl90ZW1wICZhbXA7JmFtcDsgYXR0ciA9PSBod21vbl90ZW1wX2lucHV0KQotCQlyZXR1cm4gMDQ0NDsKLQlpZiAodHlwZSA9PSBod21vbl9pbiAmYW1wOyZhbXA7IGF0dHIgPT0gaHdtb25faW5faW5wdXQpCi0JCXJldHVybiAwNDQ0OwomIzQzOwlpZiAoYSA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSB8fCBiID09IEZCTklDX1NFTlNPUl9OT19EQVRBKQomIzQzOwkJcmV0dXJuIC1FTk9EQVRBOwogCiYjNDM7CSp2YWwgPSBhICZndDs9IGI7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21pbjoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC50ZW1wLm1pbiwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21heDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2NyaXQ6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudGVtcC5jcml0LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfaW5wdXQ6CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9taW5fYWxhcm06CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX3RlbXBfaW5wdXQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21pbl9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluLCAqdmFsLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLSZndDtmd19jYXAudGVtcC5tYXgsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLSZndDtmd19jYXAudGVtcC5jcml0LCB2YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX2luX21pbjoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbiwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbl9tYXg6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudm9sdC5tYXgsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW5faW5wdXQ6CiYjNDM7CWNhc2UgaHdtb25faW5fbWluX2FsYXJtOgomIzQzOwljYXNlIGh3bW9uX2luX21heF9hbGFybToKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl9pbl9pbnB1dDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIGh3bW9uX2luX21pbl9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luX21heF9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4LCB2YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAogCQkJICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKQogewogCXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWNvbnN0IHN0cnVjdCBmYm5pY19tYWMgKm1hYyA9IGZiZC0mZ3Q7bWFjOwotCWludCBpZDsKIAotCWlkID0gZmJuaWNfaHdtb25fc2Vuc29yX2lkKHR5cGUpOwotCXJldHVybiBpZCAmbHQ7IDAgPyBpZCA6IG1hYy0mZ3Q7Z2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBod21vbl90ZW1wOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW46CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0gewpAQCAtNDUsOCAmIzQzOzE4OCwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyAqZmJuaWNfaHdtb25faW5mb1tdID0gewotCUhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSwKLQlIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLAomIzQzOwlIV01PTl9DSEFOTkVMX0lORk8odGVtcCwKJiM0MzsJCQkgICBIV01PTl9UX0lOUFVUIHwKJiM0MzsJCQkgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHwKJiM0MzsJCQkgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHwKJiM0MzsJCQkgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLAomIzQzOwlIV01PTl9DSEFOTkVMX0lORk8oaW4sCiYjNDM7CQkJICAgSFdNT05fSV9JTlBVVCB8CiYjNDM7CQkJICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8CiYjNDM7CQkJICAgSFdNT05fSV9NQVggfCBIV01PTl9JX01BWF9BTEFSTSksCiAJTlVMTAogfTsKIApAQCAtNTcsMjUgJiM0MzsyMDcsODEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGlwX2luZm8gZmJuaWNfY2hpcF9pbmZvID0gewogCiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIHsKJiM0MzsJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CiAJaWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSkKIAkJcmV0dXJuOwogCi0JZmJkLSZndDtod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLSZndDtkZXYsICYjMzQ7ZmJuaWMmIzM0OywKLQkJCQkJCSAgICAgZmJkLCAmYW1wO2ZibmljX2NoaXBfaW5mbywKLQkJCQkJCSAgICAgTlVMTCk7Ci0JaWYgKElTX0VSUihmYmQtJmd0O2h3bW9uKSkgewomIzQzOwkvKiBTZWVkIGNhY2hlIHdpdGggc2VudGluZWwgc28gdGhlIGZpcnN0IHJlYWQgYWx3YXlzIHJlZnJlc2hlcy4gKi8KJiM0MzsJZmJkLSZndDtod21vbl9jYWNoZS50ZW1wX21kZWcgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTsKJiM0MzsJZmJkLSZndDtod21vbl9jYWNoZS52b2x0X212ID0gRkJOSUNfU0VOU09SX05PX0RBVEE7CiYjNDM7CiYjNDM7CWh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtJmd0O2RldiwgJiMzNDtmYm5pYyYjMzQ7LCBmYmQsCiYjNDM7CQkJCQkJJmFtcDtmYm5pY19jaGlwX2luZm8sIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKGh3bW9uKSkgewogCQlkZXZfbm90aWNlKGZiZC0mZ3Q7ZGV2LAogCQkJICAgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgaHdtb24gZGV2aWNlICVwZVxuJiMzNDssCi0JCQkgICBmYmQtJmd0O2h3bW9uKTsKLQkJZmJkLSZndDtod21vbiA9IE5VTEw7CiYjNDM7CQkJICAgaHdtb24pOwomIzQzOwkJcmV0dXJuOwogCX0KJiM0MzsKJiM0MzsJV1JJVEVfT05DRShmYmQtJmd0O2h3bW9uLCBod21vbik7CiB9CiAKIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwogCWlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC0mZ3Q7aHdtb24pCiAJCXJldHVybjsKIAotCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC0mZ3Q7aHdtb24pOwotCWZiZC0mZ3Q7aHdtb24gPSBOVUxMOwomIzQzOwlod21vbiA9IGZiZC0mZ3Q7aHdtb247CiYjNDM7CS8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMCiYjNDM7CSAqIGFuZCB3YWl0IGZvciBhbnkgaW4tZmxpZ2h0IEZXIG1haWxib3ggSVJRIGhhbmRsZXIgdG8gZmluaXNoIHNvIGl0CiYjNDM7CSAqIGNhbm5vdCBkZXJlZmVyZW5jZSB0aGUgaHdtb24gZGV2aWNlIGFmdGVyIHdlIHVucmVnaXN0ZXIgaXQuCiYjNDM7CSAqLwomIzQzOwlXUklURV9PTkNFKGZiZC0mZ3Q7aHdtb24sIE5VTEwpOwomIzQzOwlzeW5jaHJvbml6ZV9pcnEoZmJkLSZndDtmd19tc2l4X3ZlY3Rvcik7CiYjNDM7CiYjNDM7CWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKQomIzQzO3sKJiM0MzsJZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTsKJiM0MzsJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CXMzMiBhdHRyID0gLTE7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaWQpIHsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVEVNUDoKJiM0MzsJCXR5cGUgPSBod21vbl90ZW1wOwomIzQzOwomIzQzOwkJaWYgKHZhbCAmbHQ7PSBmYmQtJmd0O2Z3X2NhcC50ZW1wLm1pbikKJiM0MzsJCQlhdHRyID0gaHdtb25fdGVtcF9taW5fYWxhcm07CiYjNDM7CQllbHNlIGlmICh2YWwgJmd0Oz0gZmJkLSZndDtmd19jYXAudGVtcC5jcml0KQomIzQzOwkJCWF0dHIgPSBod21vbl90ZW1wX2NyaXRfYWxhcm07CiYjNDM7CQllbHNlIGlmICh2YWwgJmd0Oz0gZmJkLSZndDtmd19jYXAudGVtcC5tYXgpCiYjNDM7CQkJYXR0ciA9IGh3bW9uX3RlbXBfbWF4X2FsYXJtOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6CiYjNDM7CQl0eXBlID0gaHdtb25faW47CiYjNDM7CiYjNDM7CQlpZiAodmFsICZsdDs9IGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWluKQomIzQzOwkJCWF0dHIgPSBod21vbl9pbl9taW5fYWxhcm07CiYjNDM7CQllbHNlIGlmICh2YWwgJmd0Oz0gZmJkLSZndDtmd19jYXAudm9sdC5tYXgpCiYjNDM7CQkJYXR0ciA9IGh3bW9uX2luX21heF9hbGFybTsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBhaXIgd2l0aCBXUklURV9PTkNFKCkgaW4gZmJuaWNfaHdtb25fdW5yZWdpc3RlcigpLiBTa2lwIHRoZQomIzQzOwkgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9ybgomIzQzOwkgKiBkb3duLgomIzQzOwkgKi8KJiM0MzsJaHdtb24gPSBSRUFEX09OQ0UoZmJkLSZndDtod21vbik7CiYjNDM7CWlmIChhdHRyICZndDs9IDAgJmFtcDsmYW1wOyBod21vbikKJiM0MzsJCWh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwppbmRleCA1M2I3YTkzOGI0YzI3Ny4uZmJhMmUyZWZhZWI4YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwpAQCAtODk5LDYwICYjNDM7ODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCwKIAkJCSAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpOwogfQogCi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsCi0JCQkJICAgICBsb25nICp2YWwpCi17Ci0Jc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7Ci0JaW50IGVyciA9IDA7Ci0JczMyICpzZW5zb3I7Ci0KLQlmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7Ci0JaWYgKCFmd19jbXBsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN3aXRjaCAoaWQpIHsKLQljYXNlIEZCTklDX1NFTlNPUl9URU1QOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGlkZWdyZWVzOwotCQlicmVhazsKLQljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGl2b2x0czsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihmYmQtJmd0O2RldiwKLQkJCSYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcbiYjMzQ7LAotCQkJZXJyKTsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtmd19jbXBsLSZndDtkb25lLCAxMCAqIEhaKSkgewotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXG4mIzM0Oyk7Ci0JCWVyciA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gZXhpdF9jbGVhbnVwOwotCX0KLQotCS8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqLwotCWlmIChmd19jbXBsLSZndDtyZXN1bHQpIHsKLQkJZXJyID0gZndfY21wbC0mZ3Q7cmVzdWx0OwotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxuJiMzNDssCi0JCQlfX2Z1bmNfXywgZXJyKTsKLQkJZ290byBleGl0X2NsZWFudXA7Ci0JfQotCi0JKnZhbCA9ICpzZW5zb3I7Ci1leGl0X2NsZWFudXA6Ci0JZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTsKLWV4aXRfZnJlZToKLQlmYm5pY19md19wdXRfY21wbChmd19jbXBsKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0gewogCS5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLAogCS5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluaywKQEAgLTk2Niw3ICYjNDM7OTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7CiAJLmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLAogCS5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsCiAJLmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLAotCS5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYywKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKaW5kZXggMTBmMzBlMGU4ZjY5MTYuLmJkZTJkYWE2NTY0NTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKQEAgLTEzNyw4ICYjNDM7MTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7CiAKIAl2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogCXZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpOwotCi0JaW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7CiB9OwogCiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIE5ldyBIYXJkd2FyZSBNb25pdG9yaW5nIFBhdGNoIGZvciBgZmJuaWNgKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBuZXcgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyBoYXJkd2FyZSBtb25pdG9yaW5nIGZlYXR1cmVzIHRvIHRoZSBgZmJuaWNgIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBncmVhdC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGZibmljX2h3bW9uLmNgLCB3aGVyZSB0aGV5JiMzOTt2ZSBhZGRlZCB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQsIGFuZCBhcmUgY2FjaGluZyB2YWx1ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBlZmZpY2llbnQuIFRoZXkmIzM5O3ZlIGFsc28gaW1wbGVtZW50ZWQgYSBuZXcgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgc3BlY2lmaWNhbGx5IGZvciAmIzM0O3RocmVzaG9sZCBleGNlZWRlZCYjMzQ7IGV2ZW50cyDigJMgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQ7IGVycm9yIGhhbmRsaW5nIGFuZCByZWNvdmVyeSBpbiB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGNhbiBiZSB0cmlja3kuIEFuZCB0aGUgZHJpdmVyIGl0c2VsZiBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljYCwgY29uZmlybWluZyBteSBtZW1vcnkgb2YgaXRzIGxvY2F0aW9uLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZTogY2FuIHdlICphY3R1YWxseSogcmVhY2ggYW5kIHZhbGlkYXRlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHk/IFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgd2UgaW50ZXJwcmV0IGZpcm13YXJlIG1lc3NhZ2VzIGFuZCBpbnRyb2R1Y2VzIG5ldyByZWFkIGZ1bmN0aW9uczogYGZibmljX2h3bW9uX3JlYWRgLCBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLiBQbHVzLCB0aGVyZeKAmXMgdGhpcyBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YCB3aGljaCBpcyBjYWxsZWQgZnJvbSB0aGUgdGhyZXNob2xkIHBhcnNlci4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgdHJpZ2dlcmluZyBhbGFybXMsIG9yIGF0IGxlYXN0IHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2suCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBmYm5pY2AgZXZlbiAqYWNjZXNzaWJsZSogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgTWV0YSYjMzk7cyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLiBTbywgaXQmIzM5O3MgYSBQQ0kgZGV2aWNlLiBJIHdvbmRlciBpZiB3ZSBjYW4gZnV6eiB0aGlzIGVhc2lseS4gU3l6a2FsbGVyIGlzIGEgcG93ZXJmdWwgdG9vbCwgYnV0IG5ldHdvcmsgZHJpdmVycyBhcmUgdXN1YWxseSB0ZXN0ZWQgdmlhIG5ldGxpbmsgb3Igc29ja2V0IGludGVyZmFjZXMuIFRoZSBpZGVhbCBzY2VuYXJpbyB3b3VsZCBiZSBhIGRlZGljYXRlZCBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIGBmYm5pY2AsIGJ1dCwgaXMgdGhlcmUgYSB3YXkgdG8gZnV6eiBQQ0kgZGV2aWNlcyB0aHJvdWdoIHN5emthbGxlciBpZiB0aGV5IGFyZSBlbXVsYXRlZCBvciB3aXRoIHZoY2kvUENJIGZ1enppbmc/IFdhaXQsIHN5emthbGxlciBoYXMgYSBQQ0kgZnV6emVyISBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQuCgpGaW5hbGx5LCBiZWZvcmUgSSBnZXQgbG9zdCBpbiB0aGUgd2VlZHMgb2YgZnV6emluZywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCBmb3IgYENPTkZJR19GQk5JQ2AgYW5kIGRldGVybWluZSBpZiBpdCYjMzk7cyBhbHJlYWR5IHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGRzIG9yIGlmIHdlJiMzOTtsbCBoYXZlIHRvIGVuYWJsZSBpdCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkJOSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBFdGhlcm5ldCBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBicm9hZCwgdG9wLWxldmVsIHNldHRpbmdzLCBwZXJoYXBzIG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgZW50aXJlIHN1YnN5c3RlbSwgYW5kIHByb2JhYmx5IHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIsIG1vcmUgc3BlY2lmaWMgS2NvbmZpZyBmaWxlcyBmb3IgaW5kaXZpZHVhbCBFdGhlcm5ldCBjb250cm9sbGVycyBvciBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoaWVyYXJjaHkgYW5kIGRlcGVuZGVuY2llcyBsYWlkIG91dCBoZXJlIOKAkyBob3cgZGlmZmVyZW50IGNvbnRyb2xsZXIgdHlwZXMgYXJlIHNlbGVjdGVkLCBob3cgY29tbW9uIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIEV0aGVybmV0IGNvbmZpZ3VyYXRpb24gc3BhY2UgbG9va3MgbGlrZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIHJlZHVuZGFuY2llcywgb3IgYXJlYXMgd2hlcmUgSSBjYW4gcG90ZW50aWFsbHkgc3RyZWFtbGluZSB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgd2hvbGUgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsgaXMgcHV0IHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkJOSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfTUVUQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTI5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgZmJuaWMgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfRkJOSUNgLCB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgbmV3IHBhdGNoIGludHJvZHVjZXMgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAsIGFuZCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLiBSaWdodCwgdGhhdCBwYXJzZXIgaXMgZGVmaW5pdGVseSB0cmlnZ2VyZWQgYnkgZmlybXdhcmUgbWVzc2FnZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgdGhvc2UgZmlybXdhcmUgbWVzc2FnZXM/IElmIFN5emthbGxlciBpcyBmdXp6aW5nIFBDSSwgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW5qZWN0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gRE1BL01NSU8gcmVhZHMsIHdoaWNoIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIHZhbGlkIGZpcm13YXJlIG1lc3NhZ2VzLiBJdCYjMzk7cyBwbGF1c2libGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aCB0byBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgIGl0c2VsZiBhbmQgY29uZmlybSB0aGF0IFN5emthbGxlciBjYW4sIGluIGZhY3QsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbnB1dHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBpbnZva2VkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2NTA6c3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY1MS1cdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTY5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzIyLVx0XHRcdCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYzoxNzIzOlx0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTcyNC1cdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGZibmljX2Z3X3Rsdl9wYXJzZXJgIFVzYWdlKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBmYm5pY19md190bHZfcGFyc2VyYCBtb2R1bGUsIHJlY29nbml6aW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGEgc3BlY2lmaWMgZGF0YSBmb3JtYXQuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aGVyZSogdGhpcyBwYXJzZXIgaXMgYmVpbmcgdXRpbGl6ZWQuIEVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGggYW5kIGRlcGVuZGVuY3kgdHJlZS4gVW5kZXJzdGFuZGluZyBpdHMgY29uc3VtZXJzIGlzIGNydWNpYWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY2VudHJhbCBjb21wb25lbnQsIG9yIHNvbWV0aGluZyBtb3JlIGxvY2FsaXplZD8gSWRlbnRpZnlpbmcgZXZlcnkgaW5zdGFuY2Ugb2YgYGZibmljX2Z3X3Rsdl9wYXJzZXJgIGluIHVzZSBpcyB0aGUgZmlyc3QsIGVzc2VudGlhbCBzdGVwLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgY3Jvc3MtcmVmZXJlbmNpbmcsIHByb2JhYmx5IGEgZ3JlcCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gY2FsbC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgd2hhdGV2ZXIgdGhleSBtYXkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX2Z3X3Rsdl9wYXJzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xNjUwPXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTM6c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjk0LVx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xNzMwPXN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3J4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzY2LVx0XHQvKiBJZiBwYXJzaW5nIGZhaWxzIGR1bXAgY29udGVudHMgb2YgbWVzc2FnZSB0byBkbWVzZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE3Njc6XHRcdGVyciA9IGZibmljX3Rsdl9tc2dfcGFyc2UoZmJkLCBtc2csIGZibmljX2Z3X3Rsdl9wYXJzZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE3NjgtXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0OTIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZCTklDIFBhdGNoJiMzOTtzIEZ1enppbmcgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgdnVsbmVyYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGZ1enphYmxlLiBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGBmYm5pY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG1haWxib3gsIGFuZCB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZyAoaHdtb24pIGFzcGVjdHMuCgpGaXJzdCwgSSBzZWUgdGhpcyBpcyB1c2VkIGluIGBmYm5pY19tYnhfcHJvY2Vzc19yeF9tc2dzYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgcHJvY2Vzc2VzIG1lc3NhZ2VzIGNvbWluZyAqZnJvbSogdGhlIGhhcmR3YXJlLiBUaGUgbWFpbGJveCBpdHNlbGYgaXMgbGlrZWx5IHBvcHVsYXRlZCB0aHJvdWdoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIG9yIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKSwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZGF0YSBmbG93aW5nIGZyb20gdGhlIGRldmljZSB0byB0aGUga2VybmVsLiBUaGlzIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBJIGtub3cgU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgaXMgcGFydGljdWxhcmx5IHdlbGwtc3VpdGVkIHRvIHBva2luZyBhdCB0aGVzZSBraW5kcyBvZiBpbnRlcmZhY2VzLgoKVGhlbiBJIG5vdGUgdGhlIGNoYW5nZXMgdG8gdGhlIGh3bW9uIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBmYm5pY19od21vbl9yZWFkYCBhbmQgKmFkZHMqIGBmYm5pY19od21vbl90ZW1wX3JlYWRgIGFuZCBgZmJuaWNfaHdtb25faW5fcmVhZGAuIFRob3NlIGFyZSBhbGwgYWNjZXNzZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIGtub3cgU3l6a2FsbGVyIGlzIHF1aXRlIGFkZXB0IGF0IGludGVyYWN0aW5nIHdpdGggc3lzZnMgZmlsZXMsIHNvIGl0IGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zIGVhc2lseS4gVGhhdCBgZmJuaWNfaHdtb25fcmVhZGAgZnVuY3Rpb24gY291bGQgYmUgdGhlIGVudHJ5IHBvaW50IHRvIGEgbG90IG9mIGludGVyZXN0aW5nIGxvZ2ljLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRvIGVuYWJsZSB0aGlzIGFyZWEsIEkgbmVlZCBgQ09ORklHX0ZCTklDYCwgb2J2aW91c2x5LiBBbHNvLCBgQ09ORklHX0hXTU9OYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgZmJuaWNfaHdtb25fcmVnaXN0ZXJgIGNoZWNrcyBgSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTilgLiBJbnRlcmVzdGluZ2x5LCBldmVuIHRob3VnaCBgZmJuaWNfaHdtb25fcmVnaXN0ZXJgIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgaXQgKmNoZWNrcyogYEhXTU9OYCB2aWEgYSBjb25kaXRpb25hbCByZXR1cm4hIFNvLCBJIG5lZWQgYEhXTU9OYCBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIGlzIGFjdGl2ZS4KCk5vdyB0byBkZWZpbmUgdGhlIGF0dGFjayBzdXJmYWNlLiBGcm9tIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBwdXJwb3NlcyBhcmU6CiogICBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgIChsaWtlbHkgZmlybXdhcmUgcGFyc2luZywgaW50ZXJlc3RpbmcgZm9yIGNyYWZ0ZWQgbWVzc2FnZXMpCiogICBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgLCBhbmQgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgKHRoZXNlIHNlZW0gbGlrZSBsb3ctaGFuZ2luZyBmcnVpdCwgdGhleSByZWFkIHZhbHVlcyBmcm9tIGh3bW9uIGludGVyZmFjZSkKKiAgIGBmYm5pY19od21vbl9yZWFkYCAodGhlIHBvdGVudGlhbGx5IGltcG9ydGFudCBmdW5jdGlvbiwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgd2hpY2ggZmlsZSBpdCYjMzk7cyBpbiB0byBlbnN1cmUgaXQgYWxpZ25zIHdpdGggbXkgYXNzZXNzbWVudCkKCkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIGBmYm5pY19od21vbl9yZWFkYCBpcyBpbmRlZWQgaW4gYGZibmljX2h3bW9uLmNgIHNvIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pY19od21vbl9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz0xNz1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjgxOnN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy04Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjkwOnN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTkxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM9OTk9c3RhdGljIGludCBmYm5pY19od21vbl90ZW1wX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMDQtXHRjYXNlIGh3bW9uX3RlbXBfbWluOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwNTpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTA2LVx0Y2FzZSBod21vbl90ZW1wX21heDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMDc6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEwOC1cdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwOTpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTExMC1cdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTI2LVx0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjc6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTI4LVx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjk6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTMwLVx0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTMxOlx0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMzItXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jPTEzNz1zdGF0aWMgaW50IGZibmljX2h3bW9uX2luX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNDItXHRjYXNlIGh3bW9uX2luX21pbjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxNDM6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE0NC1cdGNhc2UgaHdtb25faW5fbWF4OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjE0NTpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTQ2LVx0Y2FzZSBod21vbl9pbl9pbnB1dDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTYxLVx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTYyOlx0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2My1cdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjE2NDpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNjUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxNzA6c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNzEtXHRcdFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz0xODU9c3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE4Ni1cdC5pc192aXNpYmxlID0gZmJuaWNfaHdtb25faXNfdmlzaWJsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxODc6XHQucmVhZCA9IGZibmljX2h3bW9uX3JlYWQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTg4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRkJOSUMgSGFyZHdhcmUgTW9uaXRvcmluZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcGAsIGBmYm5pY19od21vbl90ZW1wX3JlYWRgLCBgZmJuaWNfaHdtb25faW5fcmVhZGAsIGBmYm5pY19od21vbl9zZW5zb3JfcmVhZGAsIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgLCBhbmQgYGZibmljX2h3bW9uX3JlYWRgLiBUaGVzZSBhcmUgY2xlYXJseSBwYXJ0IG9mIHRoZSBGQk5JQyBoYXJkd2FyZSBtb25pdG9yaW5nIGluZnJhc3RydWN0dXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIHRlbXBlcmF0dXJlLCB2b2x0YWdlLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgc2Vuc29yIGRhdGEgcmVsYXRlZCB0byB0aGUgRkJOSUMgbmV0d29yayBpbnRlcmZhY2UgY2FyZC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8ga25vdyBpZiBgQ09ORklHX0ZCTklDYCBpcyBkZWZpbmVkLiBBaCwgeWVzLCBpdCYjMzk7cyBhIHRyaXN0YXRlLCBzbyBgRkJOSUNgIGlzIHRoZSBzeW1ib2wgdXNlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KClJpZ2h0LCBzbyBgZmJuaWNfaHdtb25fcmVnaXN0ZXJgIGlzIGRlZmluZWQgaW4gYGZibmljX2h3bW9uLmNgLiBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGQk5JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MTg9aWYgTkVUX1ZFTkRPUl9NRVRBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6MjA6Y29uZmlnIEZCTklDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkNoZWNraW5nIG9uIE5ldHdvcmsgVmVuZG9yIE1ldGFkYXRhKioKCk9rYXksIHNvIEkmIzM5O20gcHV0dGluZyB0b2dldGhlciB0aGlzIG92ZXJ2aWV3IGFuZCByZWFsaXplZCBJIGdsb3NzZWQgb3ZlciBzb21ldGhpbmcgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBJJiMzOTt2ZSBnb3QgYE5FVF9WRU5ET1JfTUVUQWAgaW4gbXkgbm90ZXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQmIzM5O3MgaGFuZGxlZCBjb3JyZWN0bHkuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIG1pc3MgdGhlc2UgbGl0dGxlIGRlcGVuZGVuY2llcy4gUmlnaHQgbm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE5FVF9WRU5ET1JfTUVUQWAgaXMgZWl0aGVyIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIG9yIGVsc2UgY2xlYXJseSBub3RlIHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gZW5hYmxlIGl0IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIHByb2plY3QuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgc2VlIHdoYXQgdGhlIHN0YXR1cyBpcy4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTctXHRib29sIFwmIzM0O01ldGEgUGxhdGZvcm1zIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRkJOSUMgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBoZXJlLiBJdCBsb29rcyBsaWtlIGBORVRfVkVORE9SX01FVEFgLCBgRkJOSUNgLCBhbmQgYEhXTU9OYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUuIFNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGJ1aWxkIGEgY29uZmlndXJhdGlvbiBhcnJheSBsaWtlOiBgWyYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssICYjMzQ7RkJOSUMmIzM0OywgJiMzNDtIV01PTiYjMzQ7XWAuIFRoYXQgc2V0cyB0aGUgc3RhZ2UuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGZibmljX2h3bW9uYCBpbnRlcmFjdGlvbnMgYmVjYXVzZSBvZiB0aGVpciBwb3RlbnRpYWwgZm9yIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MuIEkmIzM5O20gemVyb2luZyBpbiBvbiBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgIHRvIHNlZSBpZiBpdCYjMzk7cyByZWFjaGFibGUuIEl0IGFwcGVhcnMgaXQgaXMsIGluZGlyZWN0bHksIHRocm91Z2ggYSBjaGFpbjogYGZibmljX2h3bW9uX3RlbXBfcmVhZGAsIGBmYm5pY19od21vbl9pbl9yZWFkYCwgYW5kIGBmYm5pY19od21vbl9yZWFkYCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyB0aGUgYGh3bW9uX29wcy5yZWFkYCBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBzeXNmcyByZWFkcyBvbiB0aGUgaHdtb24gZGV2aWNlLiBUaGlzIGlzIGEgZ29vZCBzaWduIGZvciBmdXp6aW5nLCBhbmQgYSBsaWtlbHkgYXZlbnVlIGZvciBleHBsb2l0YXRpb24uCgpPbiBhIGRpZmZlcmVudCB2ZWN0b3IsIEkgaGF2ZSB0aGUgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaXJtd2FyZSBtZXNzYWdlcywgb3IgbWFpbGJveC4gVGhpcyBhbHNvIHNlZW1zIHRvIGJlIGEgc29saWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBjbGVhcmx5IGZ1bmN0aW9uYWwuCgpNeSBjdXJyZW50IGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCAoZmlybXdhcmUgbWFpbGJveCkKKiAgIGBmYm5pY19od21vbl90ZW1wX3JlYWRgCiogICBgZmJuaWNfaHdtb25faW5fcmVhZGAKKiAgIGBmYm5pY19od21vbl9zZW5zb3JfcmVhZGAgKHJlYWNoYWJsZSB2aWEgYGh3bW9uYCBkZXZpY2UpCiogICBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YAoqICAgYGZibmljX2h3bW9uX3JlYWRgCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCB0byBzZWUgaWYgaXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgaXQgaXMuIFRoZW4gbGV0JiMzOTtzIHZlcmlmeSBpZiBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YCBpcyBleHBvcnRlZCBvciBqdXN0IGdsb2JhbC4gSXQgaXMgZ2xvYmFsIGluIGBmYm5pY19od21vbi5jYCBhbmQgY2FsbGVkIGZyb20gYGZibmljX2Z3LmNgLCB3aGljaCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgYGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwYCB3YXMgbW9kaWZpZWQgdG8gcGFyc2UgdGhyZXNob2xkIHZhbHVlcy4gVGhpcyBub3cgYXBwZWFycyB0byBiZSBhbm90aGVyIHNvbGlkIGZvY3VzIHN5bWJvbCBhbmQgYW4gZXh0ZW5zaW9uIG9mIHRoZSBmaXJtd2FyZSBtZXNzYWdpbmcgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pY19md19wYXJzZV9jYXBfcmVzcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9NTg2PXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfYm1jX2FkZHJzKHU4IGJtY19tYWNfYWRkcltdW0VUSF9BTEVOXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtNjE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjYxNTpzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTYxNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTE2OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY5NS1cdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTY6XHRcdFx0IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjk3LVx0RkJOSUNfVExWX1BBUlNFUihPV05FUlNISVBfUkVTUCwgZmJuaWNfb3duZXJzaGlwX3Jlc3BfaW5kZXgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjc0CgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBmYm5pYyBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2hhbmdlIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCk5leHQsIEkgbmVlZCB0byBsb29rIGludG8gYGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkYCBhbmQgYGZibmljX2h3bW9uX3JlYWRfYWxhcm1gLiBUaGV5JiMzOTtyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYGZibmljX2h3bW9uLmNgLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBteSBGb2N1c1N5bWJvbHMgbGlzdC4gVGhleSB3b3VsZCBiZSBwZXJmZWN0IHRvIGZ1enouCgpMZXQgbWUgc3VtbWFyaXplIHRoZSBzY29wZTogbXkgRm9jdXNTeW1ib2xzIHdpbGwgYmU6CgoqICAgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCAodGhlIGZpcm13YXJlIHJlc3BvbnNlIHBhcnNlcikKKiAgIGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgKHRoZSBtb2RpZmllZCBjYXBhYmlsaXR5IHJlc3BvbnNlKQoqICAgYGZibmljX2h3bW9uX3RlbXBfcmVhZGAgKHRlbXBlcmF0dXJlIHNlbnNvciByZWFkaW5nKQoqICAgYGZibmljX2h3bW9uX2luX3JlYWRgICh2b2x0YWdlIHNlbnNvciByZWFkaW5nKQoqICAgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCAoZ2VuZXJpYyBzZW5zb3IgcmVhZCkKKiAgIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgIChldmVudCBub3RpZmljYXRpb24pCiogICBgZmJuaWNfaHdtb25fcmVhZGAgKGdlbmVyYWwgaHdtb24gcmVhZCkKKiAgIGBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZGAgKHRocmVzaG9sZCByZWFkaW5nIC0gYSBzdGF0aWMgaGVscGVyKQoqICAgYGZibmljX2h3bW9uX3JlYWRfYWxhcm1gIChhbGFybSByZWFkaW5nIC0gYWxzbyBhIHN0YXRpYyBoZWxwZXIpCgpUaGUgdW5kZXJseWluZyByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBmYm5pYyBkcml2ZXImIzM5O3MgaGFyZHdhcmUgbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMsIGluY2x1ZGluZyByZWFkaW5nIGZyb20gbmV3IHN5c2ZzIGludGVyZmFjZXMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlLCBhbmQgcGFyc2luZyBmaXJtd2FyZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRocmVzaG9sZCBleGNlZWRhbmNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByaW1lIHRhcmdldHMuIEkgY2FuIGZ1enogdGhpcyBieSB3cml0aW5nIHRvIHN5c2ZzIGFuZCBlbXVsYXRpbmcgUENJL21haWxib3ggaW50ZXJhY3Rpb25zLiBUaG9zZSBGb2N1c1N5bWJvbHMgYXJlIG15IGF0dGFjayBzdXJmYWNlLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgICAmIzM0O0ZCTklDJiMzNDssCiAgICAmIzM0O0hXTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fdGVtcF9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX2luX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50JiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF9hbGFybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG1vbml0b3JpbmcgdGhyZXNob2xkIGFuZCBhbGFybSBzdXBwb3J0IHRvIHRoZSBmYm5pYyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IHN5c2ZzIHJlYWQgaGFuZGxlcnMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvcnMsIGFuZCBhZGRzIGEgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgZm9yIHRocmVzaG9sZCBleGNlZWRlZCBldmVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgICAmIzM0O0ZCTklDJiMzNDssCiAgICAmIzM0O0hXTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fdGVtcF9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX2luX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50JiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF9hbGFybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG1vbml0b3JpbmcgdGhyZXNob2xkIGFuZCBhbGFybSBzdXBwb3J0IHRvIHRoZSBmYm5pYyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IHN5c2ZzIHJlYWQgaGFuZGxlcnMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvcnMsIGFuZCBhZGRzIGEgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgZm9yIHRocmVzaG9sZCBleGNlZWRlZCBldmVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjUzLjUyMzIwNzE0NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTM1NTQ1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfTUVUQVwiLFxuICAgIFwiRkJOSUNcIixcbiAgICBcIkhXTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BcIixcbiAgICBcImZibmljX2Z3X3BhcnNlX2NhcF9yZXNwXCIsXG4gICAgXCJmYm5pY19od21vbl90ZW1wX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX2luX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3NlbnNvcl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9ub3RpZnlfZXZlbnRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX2FsYXJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBtb25pdG9yaW5nIHRocmVzaG9sZCBhbmQgYWxhcm0gc3VwcG9ydCB0byB0aGUgZmJuaWMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyByZWFkIGhhbmRsZXJzIGZvciB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3JzLCBhbmQgYWRkcyBhIGZpcm13YXJlIG1lc3NhZ2UgcGFyc2VyIGZvciB0aHJlc2hvbGQgZXhjZWVkZWQgZXZlbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXIncyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6NTMuNTIzMjEzMDc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg0MDgwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNmY4MWE2MjA4MDIyOTE4OWRhMTA5MDJiZGI4MjIzNjA5MmJmYjY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxcbmluZGV4IGQwNzE1Njk1YzQzZTc1Li40YTQ5YzIwZTRhMDE0YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG5AQCAtMjIsMTEgKzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcXG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXFx0XFx0MTI4dVxcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXFx0XFx0NFxcbiBcXG4rc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XFxuK1xcdHMzMiB0ZW1wX21kZWc7XFxuK1xcdHMzMiB2b2x0X212O1xcbit9O1xcbitcXG4gc3RydWN0IGZibmljX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcXG4gXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XFxuIFxcbkBAIC0xODUsNiArMTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcXG4gXFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNzguLjZkY2EzODA3NmQ3YjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xcbkBAIC01NzUsNiArNTc1LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX2Z3X2NhcF9yZXNwX2luZGV4W10gPSB7XFxuIFxcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXFxuIFxcdFxcdFxcdCAgICAgIEZCTklDX0ZXX0NBUF9SRVNQX0NPTU1JVF9NQVhfU0laRSksXFxuIFxcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVgpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYKSxcXG4gXFx0RkJOSUNfVExWX0FUVFJfTEFTVFxcbiB9O1xcbiBcXG5AQCAtNzAyLDYgKzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbiBcXHQvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovXFxuIFxcdGZiZC1cXHUwMDNlZndfY2FwLm5lZWRfYm1jX3RjYW1fcmVpbml0ID0gdHJ1ZTtcXG4gXFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWluID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxcbitcXHRcXHRcXHRcXHRcXHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcXG4rXFx0ZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4gPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxcbitcXHRcXHRcXHRcXHRcXHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcXG4rXFx0ZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXggPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxcbitcXHRcXHRcXHRcXHRcXHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xNjE4LDYgKzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7XFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9MQVNUXFxuK307XFxuK1xcbitzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXFxuK3tcXG4rXFx0Ym9vbCB0aGVybV9leGNlZWRlZCwgdm9sdF9leGNlZWRlZDtcXG4rXFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xcbitcXHRzMzIgdmFsdWU7XFxuK1xcbitcXHR0aGVybV9leGNlZWRlZCA9XFxuK1xcdFxcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTtcXG4rXFx0dm9sdF9leGNlZWRlZCA9XFxuK1xcdFxcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpO1xcbitcXG4rXFx0aWYgKCF0aGVybV9leGNlZWRlZCBcXHUwMDI2XFx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xcbitcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiVGhyZXNob2xkIGV4Y2VlZGVkIG1lc3NhZ2Ugd2l0aCBubyBmbGFnIHNldFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGhlcm1fZXhjZWVkZWQpIHtcXG4rXFx0XFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldiwgXFxcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcXFxuXFxcIiwgdmFsdWUpO1xcbitcXHRcXHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodm9sdF9leGNlZWRlZCkge1xcbitcXHRcXHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpO1xcbitcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiVm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXFxcXG5cXFwiLCB2YWx1ZSk7XFxuK1xcdFxcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksXFxuIFxcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxcbkBAIC0xNjQ2LDYgKzE3MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcXG4gXFx0XFx0XFx0IGZibmljX3RzZW5lX3JlYWRfcmVzcF9pbmRleCxcXG4gXFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX3RzZW5lX3JlYWRfcmVzcCksXFxuK1xcdEZCTklDX1RMVl9QQVJTRVIoU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQLFxcbitcXHRcXHRcXHQgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsXFxuK1xcdFxcdFxcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXFxuIFxcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXFxuIFxcdFxcdFxcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxcbiBcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfbG9nX3JlcSksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYyLi44NzMwMWU2MDgyNTU1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5AQCAtNiw2ICs2LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGltaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IGZibmljX2RldjtcXG5AQCAtNDQsNiArNDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XFxuIFxcdGNoYXIgY29tbWl0W0ZCTklDX0ZXX0NBUF9SRVNQX0NPTU1JVF9NQVhfU0laRV07XFxuIH07XFxuIFxcbisvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGVcXG4rICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XFxuKyAqIHJlZnJlc2hlZC5cXG4rICovXFxuKyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcXHRcXHRcXHRTMzJfTUlOXFxuK1xcbitzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHtcXG4rXFx0czMyIG1pbjtcXG4rXFx0czMyIG1heDtcXG4rXFx0czMyIGNyaXQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgZmJuaWNfZndfY2FwIHtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xcbkBAIC02MCw2ICs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAge1xcbiBcXHR1OFxcdGxpbmtfc3BlZWQ7XFxuIFxcdHU4XFx0bGlua19mZWM7XFxuIFxcdHUzMlxcdGFudGlfcm9sbGJhY2tfdmVyc2lvbjtcXG4rXFx0c3RydWN0IGZibmljX3RocmVzaG9sZCB0ZW1wO1xcbitcXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XFxuQEAgLTIxMiw2ICsyMjcsNyBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUFxcdFxcdFxcdD0gMHgzOSxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUVxcdFxcdFxcdD0gMHgzQyxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1BcXHRcXHQ9IDB4M0QsXFxuK1xcdEZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9MT0dfU0VORF9MT0dTX1JFUVxcdFxcdD0gMHg0MyxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUVxcdFxcdFxcdD0gMHg0NCxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFU1BcXHRcXHRcXHQ9IDB4NDUsXFxuQEAgLTI0Miw2ICsyNTgsMTIgQEAgZW51bSB7XFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlxcdFxcdFxcdD0gMHgxMSxcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXFx0XFx0PSAweDEyLFxcbiBcXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cXHRcXHQ9IDB4MTUsXFxuK1xcdC8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXFx0XFx0XFx0PSAweDE4LFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFxcdFxcdFxcdD0gMHgxOSxcXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXFx0XFx0XFx0PSAweDFhLFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTlxcdFxcdFxcdD0gMHgxYixcXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcXHRcXHRcXHQ9IDB4MWMsXFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX01TR19NQVhcXG4gfTtcXG4gXFxuQEAgLTI3NSw2ICsyOTcsMTQgQEAgZW51bSB7XFxuIFxcdEZCTklDX0ZXX1RTRU5FX01TR19NQVhcXG4gfTtcXG4gXFxuK2VudW0ge1xcbitcXHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXFx0PSAweDAsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBR1xcdD0gMHgxLFxcbitcXHRGQk5JQ19GV19UU0VORV9USEVSTUFMXFx0XFx0XFx0PSAweDIsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VcXHRcXHRcXHQ9IDB4MyxcXG4rXFx0RkJOSUNfRldfVFNFTkVfRVhDRUVERURfTVNHX01BWCxcXG4rfTtcXG4rXFxuIGVudW0ge1xcbiBcXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1xcdFxcdFxcdD0gMHgwLFxcbiBcXHRGQk5JQ19GV19PV05FUlNISVBfVElNRVxcdFxcdFxcdD0gMHgxLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcXG5pbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuQEAgLTIsNDEgKzIsMTg0IEBAXFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHdtb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJmYm5pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZmJuaWNfbWFjLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxcbitzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XFxuK1xcdHJldHVybiAwNDQ0O1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXFx1MDAyNmZiZC1cXHUwMDNlaHdtb25fY2FjaGU7XFxuK1xcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0czMyICpjYWNoZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdGNhY2hlZCA9IFxcdTAwMjZjYWNoZS1cXHUwMDNldGVtcF9tZGVnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4rXFx0XFx0Y2FjaGVkID0gXFx1MDAyNmNhY2hlLVxcdTAwM2V2b2x0X212O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXFx1MDAzZWxhc3RfcmVhZCkpIHtcXG4rXFx0XFx0KnZhbCA9ICpjYWNoZWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuK1xcdGlmICghZndfY21wbClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4rXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbitcXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cXG4rXFx0Y2FjaGUtXFx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbitcXHRjYWNoZS1cXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4rXFx0Y2FjaGUtXFx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XFxuK1xcbitcXHQqdmFsID0gKmNhY2hlZDtcXG4rZXhpdF9jbGVhbnVwOlxcbitcXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xcbitleGl0X2ZyZWU6XFxuK1xcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuK1xcbitcXHQqdmFsID0gdGhyO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuIHtcXG4tXFx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcCBcXHUwMDI2XFx1MDAyNiBhdHRyID09IGh3bW9uX3RlbXBfaW5wdXQpXFxuLVxcdFxcdHJldHVybiAwNDQ0O1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl9pbiBcXHUwMDI2XFx1MDAyNiBhdHRyID09IGh3bW9uX2luX2lucHV0KVxcbi1cXHRcXHRyZXR1cm4gMDQ0NDtcXG4rXFx0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbiBcXG4rXFx0KnZhbCA9IGEgXFx1MDAzZT0gYjtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25faW5fbWluOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5fbWF4OlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuK1xcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX2luX2lucHV0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXFx1MDAzZW1hYztcXG4tXFx0aW50IGlkO1xcbiBcXG4tXFx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XFxuLVxcdHJldHVybiBpZCBcXHUwMDNjIDAgPyBpZCA6IG1hYy1cXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBod21vbl90ZW1wOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl9pbjpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcXG4tXFx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxcbi1cXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxcbitcXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9JTlBVVCB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxcbitcXHRcXHRcXHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcXG4rXFx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxcbitcXHRcXHRcXHQgICBIV01PTl9JX0lOUFVUIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxcbiBcXHROVUxMXFxuIH07XFxuIFxcbkBAIC01NywyNSArMjA3LDgxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcXG4gXFxuIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xcbitcXG4gXFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZmJkLVxcdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVxcdTAwM2VkZXYsIFxcXCJmYm5pY1xcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmJkLCBcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbi1cXHRpZiAoSVNfRVJSKGZiZC1cXHUwMDNlaHdtb24pKSB7XFxuK1xcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcXG4rXFxuK1xcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXFx1MDAzZWRldiwgXFxcImZibmljXFxcIiwgZmJkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihod21vbikpIHtcXG4gXFx0XFx0ZGV2X25vdGljZShmYmQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICBmYmQtXFx1MDAzZWh3bW9uKTtcXG4tXFx0XFx0ZmJkLVxcdTAwM2Vod21vbiA9IE5VTEw7XFxuK1xcdFxcdFxcdCAgIGh3bW9uKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGZiZC1cXHUwMDNlaHdtb24sIGh3bW9uKTtcXG4gfVxcbiBcXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcXG4rXFxuIFxcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cXHUwMDNlaHdtb24pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC1cXHUwMDNlaHdtb24pO1xcbi1cXHRmYmQtXFx1MDAzZWh3bW9uID0gTlVMTDtcXG4rXFx0aHdtb24gPSBmYmQtXFx1MDAzZWh3bW9uO1xcbitcXHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxcbitcXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxcbitcXHQgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LlxcbitcXHQgKi9cXG4rXFx0V1JJVEVfT05DRShmYmQtXFx1MDAzZWh3bW9uLCBOVUxMKTtcXG4rXFx0c3luY2hyb25pemVfaXJxKGZiZC1cXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xcbitcXG4rXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pO1xcbit9XFxuK1xcbit2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpXFxuK3tcXG4rXFx0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcXG4rXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHMzMiBhdHRyID0gLTE7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdHR5cGUgPSBod21vbl90ZW1wO1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDNjPSBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcXG4rXFx0XFx0XFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0KVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxcbitcXHRcXHR0eXBlID0gaHdtb25faW47XFxuK1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2M9IGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluKVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGVcXG4rXFx0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cXG4rXFx0ICogZG93bi5cXG4rXFx0ICovXFxuK1xcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cXHUwMDNlaHdtb24pO1xcbitcXHRpZiAoYXR0ciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGh3bW9uKVxcbitcXHRcXHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuaW5kZXggNTNiN2E5MzhiNGMyNzcuLmZiYTJlMmVmYWViOGM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuQEAgLTg5OSw2MCArODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcXG4gXFx0XFx0XFx0ICAgIFRNSV9TVEFUX1RYX1BBQ0tFVF85MjE3X01BWF9CWVRFUyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCxcXG4tXFx0XFx0XFx0XFx0ICAgICBsb25nICp2YWwpXFxuLXtcXG4tXFx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XFxuLVxcdGludCBlcnIgPSAwO1xcbi1cXHRzMzIgKnNlbnNvcjtcXG4tXFxuLVxcdGZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTtcXG4tXFx0aWYgKCFmd19jbXBsKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdHN3aXRjaCAoaWQpIHtcXG4tXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcXG4tXFx0XFx0c2Vuc29yID0gXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4tXFx0XFx0c2Vuc29yID0gXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gZXhpdF9mcmVlO1xcbi1cXHR9XFxuLVxcbi1cXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRlcnIpO1xcbi1cXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuLVxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuLVxcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4tXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbi1cXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbi1cXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4tXFx0fVxcbi1cXG4tXFx0KnZhbCA9ICpzZW5zb3I7XFxuLWV4aXRfY2xlYW51cDpcXG4tXFx0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcXG4tZXhpdF9mcmVlOlxcbi1cXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xcbiBcXHQuaW5pdF9yZWdzID0gZmJuaWNfbWFjX2luaXRfcmVncyxcXG4gXFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxcbkBAIC05NjYsNyArOTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7XFxuIFxcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcXG4gXFx0LmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYyxcXG4gXFx0LmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLFxcbi1cXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcXG5pbmRleCAxMGYzMGUwZThmNjkxNi4uYmRlMmRhYTY1NjQ1N2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcXG5AQCAtMTM3LDggKzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xcbiBcXG4gXFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gXFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XFxuLVxcbi1cXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcXG4gfTtcXG4gXFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjo1NC4yMjI0NTQ3OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTIzNjI4Mjc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX01FVEFcIixcbiAgICBcIkZCTklDXCIsXG4gICAgXCJIV01PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwXCIsXG4gICAgXCJmYm5pY19md19wYXJzZV9jYXBfcmVzcFwiLFxuICAgIFwiZmJuaWNfaHdtb25fdGVtcF9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9pbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9zZW5zb3JfcmVhZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50XCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fcmVhZF9hbGFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgbW9uaXRvcmluZyB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQgdG8gdGhlIGZibmljIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgc3lzZnMgcmVhZCBoYW5kbGVycyBmb3IgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2Ugc2Vuc29ycywgYW5kIGFkZHMgYSBmaXJtd2FyZSBtZXNzYWdlIHBhcnNlciBmb3IgdGhyZXNob2xkIGV4Y2VlZGVkIGV2ZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgaHdtb24gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBtYWlsYm94IHByb2Nlc3NpbmcsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBlbXVsYXRlZCBQQ0kvbWFpbGJveCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzZmODFhNjIwODAyMjkxODlkYTEwOTAyYmRiODIyMzYwOTJiZmI2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG5pbmRleCBkMDcxNTY5NWM0M2U3NS4uNGE0OWMyMGU0YTAxNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7XG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXHRcdDEyOHVcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXHRcdDRcbiBcbitzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4rXHRzMzIgdGVtcF9tZGVnO1xuK1x0czMyIHZvbHRfbXY7XG4rfTtcbitcbiBzdHJ1Y3QgZmJuaWNfZGV2IHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkO1xuIFx0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgKzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcbiBcbiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbmluZGV4IDI4M2QyNWZhZTc5ZTc4Li42ZGNhMzgwNzZkN2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNTc1LDYgKzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xuIFx0RkJOSUNfVExWX0FUVFJfU1RSSU5HKEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUixcbiBcdFx0XHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxuIFx0RkJOSUNfVExWX0FUVFJfVTMyKEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTiksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQpLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXG4gXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4gfTtcbiBcbkBAIC03MDIsNiArNzA3LDIyIEBAIHN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3Aodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHQvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovXG4gXHRmYmQtXHUwMDNlZndfY2FwLm5lZWRfYm1jX3RjYW1fcmVpbml0ID0gdHJ1ZTtcbiBcbitcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4gPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5dLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXggPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0ID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sXG4rXHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuK1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbiA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTl0sXG4rXHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuK1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWF0sXG4rXHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE2MTgsNiArMTYzOSw1NyBAQCBmYm5pY19md19wYXJzZXJfdGVzdCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7XG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcbitcdEZCTklDX1RMVl9BVFRSX0xBU1Rcbit9O1xuK1xuK3N0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuK3tcbitcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XG4rXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBvcGFxdWU7XG4rXHRzMzIgdmFsdWU7XG4rXG4rXHR0aGVybV9leGNlZWRlZCA9XG4rXHRcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTtcbitcdHZvbHRfZXhjZWVkZWQgPVxuK1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcbitcbitcdGlmICghdGhlcm1fZXhjZWVkZWQgXHUwMDI2XHUwMDI2ICF2b2x0X2V4Y2VlZGVkKSB7XG4rXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcIlRocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XG4rXHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xuK1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpO1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1DXFxuXCIsIHZhbHVlKTtcbitcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcbitcdH1cbitcbitcdGlmICh2b2x0X2V4Y2VlZGVkKSB7XG4rXHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9WT0xUQUdFXSkge1xuK1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdFwiVm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpO1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiVm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXFxuXCIsIHZhbHVlKTtcbitcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbHVlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuIFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxuIFx0RkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsXG5AQCAtMTY0Niw2ICsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVFNFTkVfUkVBRF9SRVNQLFxuIFx0XHRcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX3RzZW5lX3JlYWRfcmVzcCksXG4rXHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcbitcdFx0XHQgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsXG4rXHRcdFx0IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXG4gXHRcdFx0IGZibmljX2Z3X2xvZ19yZXFfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuaW5kZXggZDg0NzIzZTRjZmEzNjIuLjg3MzAxZTYwODI1NTVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC02LDYgKzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZmJuaWNfZGV2O1xuQEAgLTQ0LDYgKzQ1LDE4IEBAIHN0cnVjdCBmYm5pY19md192ZXIge1xuIFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcbiB9O1xuIFxuKy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxuKyAqIGZpcm13YXJlIG5ldmVyIHBvcHVsYXRlZCAob2xkZXIgZmlybXdhcmUpIG9yIGEgY2FjaGUgZW50cnkgbm90IHlldFxuKyAqIHJlZnJlc2hlZC5cbisgKi9cbisjZGVmaW5lIEZCTklDX1NFTlNPUl9OT19EQVRBXHRcdFx0UzMyX01JTlxuK1xuK3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xuK1x0czMyIG1pbjtcbitcdHMzMiBtYXg7XG4rXHRzMzIgY3JpdDtcbit9O1xuK1xuIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xuQEAgLTYwLDYgKzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHR1OFx0bGlua19zcGVlZDtcbiBcdHU4XHRsaW5rX2ZlYztcbiBcdHUzMlx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xuK1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB0ZW1wO1xuK1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB2b2x0O1xuIH07XG4gXG4gc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24ge1xuQEAgLTIxMiw2ICsyMjcsNyBAQCBlbnVtIHtcbiBcdEZCTklDX1RMVl9NU0dfSURfUVNGUF9SRUFEX1JFU1BcdFx0XHQ9IDB4MzksXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXHRcdFx0PSAweDNDLFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1BcdFx0PSAweDNELFxuK1x0RkJOSUNfVExWX01TR19JRF9TRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AgPSAweDQwLFxuIFx0RkJOSUNfVExWX01TR19JRF9MT0dfU0VORF9MT0dTX1JFUVx0XHQ9IDB4NDMsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVRXHRcdFx0PSAweDQ0LFxuIFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFU1BcdFx0XHQ9IDB4NDUsXG5AQCAtMjQyLDYgKzI1OCwxMiBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlx0XHRcdD0gMHgxMSxcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUlx0XHQ9IDB4MTIsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cdFx0PSAweDE1LFxuK1x0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXHRcdFx0PSAweDE4LFxuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhcdFx0XHQ9IDB4MTksXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcdFx0XHQ9IDB4MWEsXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTlx0XHRcdD0gMHgxYixcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXHRcdFx0PSAweDFjLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxuIH07XG4gXG5AQCAtMjc1LDYgKzI5NywxNCBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX1RTRU5FX01TR19NQVhcbiB9O1xuIFxuK2VudW0ge1xuK1x0RkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBR1x0PSAweDAsXG4rXHRGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUdcdD0gMHgxLFxuK1x0RkJOSUNfRldfVFNFTkVfVEhFUk1BTFx0XHRcdD0gMHgyLFxuK1x0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVx0XHRcdD0gMHgzLFxuK1x0RkJOSUNfRldfVFNFTkVfRVhDRUVERURfTVNHX01BWCxcbit9O1xuK1xuIGVudW0ge1xuIFx0RkJOSUNfRldfT1dORVJTSElQX0ZMQUdcdFx0XHQ9IDB4MCxcbiBcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXHRcdFx0PSAweDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG5pbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgKzIsMTg0IEBAXG4gLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od21vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJmYm5pYy5oXCJcbiAjaW5jbHVkZSBcImZibmljX21hYy5oXCJcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuK3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbitcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4rXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbitcdHJldHVybiAwNDQ0O1xuK31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4re1xuK1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbitcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuK1x0aW50IGVyciA9IDA7XG4rXHRzMzIgKmNhY2hlZDtcbitcbitcdHN3aXRjaCAoaWQpIHtcbitcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4rXHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuK1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLVx1MDAzZWxhc3RfcmVhZCkpIHtcbitcdFx0KnZhbCA9ICpjYWNoZWQ7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuK1x0aWYgKCFmd19jbXBsKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIGV4aXRfZnJlZTtcbitcdH1cbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIGV4aXRfY2xlYW51cDtcbitcdH1cbitcbitcdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuK1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4rXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIGVycik7XG4rXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbitcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4rXHRjYWNoZS1cdTAwM2V2b2x0X212ID0gZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4rXHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuK1xuK1x0KnZhbCA9ICpjYWNoZWQ7XG4rZXhpdF9jbGVhbnVwOlxuK1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbitleGl0X2ZyZWU6XG4rXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbi1cdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4tXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuK3tcbitcdGlmICh0aHIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdCp2YWwgPSB0aHI7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcCBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl90ZW1wX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbi1cdGlmICh0eXBlID09IGh3bW9uX2luIFx1MDAyNlx1MDAyNiBhdHRyID09IGh3bW9uX2luX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbitcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbiBcbitcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0c3dpdGNoIChhdHRyKSB7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl9pbl9taW46XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9tYXg6XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbitcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzd2l0Y2ggKGF0dHIpIHtcbitcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiBcdFx0XHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4tXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXHUwMDNlbWFjO1xuLVx0aW50IGlkO1xuIFxuLVx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XG4tXHRyZXR1cm4gaWQgXHUwMDNjIDAgPyBpZCA6IG1hYy1cdTAwM2VnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7XG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgaHdtb25fdGVtcDpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luOlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSxcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksXG4rXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbitcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbitcdFx0XHQgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuK1x0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxuK1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxuIFx0TlVMTFxuIH07XG4gXG5AQCAtNTcsMjUgKzIwNyw4MSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXG4gXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmYmQtXHUwMDNlaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwiZmJuaWNcIixcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbitcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbitcbitcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcImZibmljXCIsIGZiZCxcbitcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcXG5cIixcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuK1x0XHRcdCAgIGh3bW9uKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbitcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4rXHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbitcdC8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMXG4rXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuK1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuK1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4rXG4rXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4rfVxuK1xuK3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbit7XG4rXHRlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlO1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzMzIgYXR0ciA9IC0xO1xuK1xuK1x0c3dpdGNoIChpZCkge1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbitcdFx0dHlwZSA9IGh3bW9uX3RlbXA7XG4rXG4rXHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuK1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4rXHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heClcbitcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbitcdFx0dHlwZSA9IGh3bW9uX2luO1xuK1xuK1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbitcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuK1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4KVxuK1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4rXHQgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9yblxuK1x0ICogZG93bi5cbitcdCAqL1xuK1x0aHdtb24gPSBSRUFEX09OQ0UoZmJkLVx1MDAzZWh3bW9uKTtcbitcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4rXHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Ny4uZmJhMmUyZWZhZWI4YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5AQCAtODk5LDYwICs4OTksNiBAQCBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHJlc2V0LFxuIFx0XHRcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXG4tXHRcdFx0XHQgICAgIGxvbmcgKnZhbClcbi17XG4tXHRzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDtcbi1cdGludCBlcnIgPSAwO1xuLVx0czMyICpzZW5zb3I7XG4tXG4tXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XG4tXHRpZiAoIWZ3X2NtcGwpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0c3dpdGNoIChpZCkge1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuLVx0XHRzZW5zb3IgPSBcdTAwMjZmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuLVx0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbi1cdFx0XHRlcnIpO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuLVx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuLVx0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4tXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4tXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuLVx0fVxuLVxuLVx0KnZhbCA9ICpzZW5zb3I7XG4tZXhpdF9jbGVhbnVwOlxuLVx0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbi1leGl0X2ZyZWU6XG4tXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXG4gXHQuZ2V0X2xpbmsgPSBmYm5pY19tYWNfZ2V0X2xpbmssXG5AQCAtOTY2LDcgKzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLFxuIFx0LmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYyxcbiBcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcbi1cdC5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG5pbmRleCAxMGYzMGUwZThmNjkxNi4uYmRlMmRhYTY1NjQ1N2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG5AQCAtMTM3LDggKzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xuIFxuIFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcdHZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpO1xuLVxuLVx0aW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7XG4gfTtcbiBcbiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjU0LjIyMjQ1NjU4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTY5Nzk2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBOZXcgSGFyZHdhcmUgTW9uaXRvcmluZyBQYXRjaCBmb3IgYGZibmljYCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaC4gSXQncyBhZGRpbmcgaGFyZHdhcmUgbW9uaXRvcmluZyBmZWF0dXJlcyB0byB0aGUgYGZibmljYCBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgZ3JlYXQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGBmYm5pY19od21vbi5jYCwgd2hlcmUgdGhleSd2ZSBhZGRlZCB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQsIGFuZCBhcmUgY2FjaGluZyB2YWx1ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBlZmZpY2llbnQuIFRoZXkndmUgYWxzbyBpbXBsZW1lbnRlZCBhIG5ldyBmaXJtd2FyZSBtZXNzYWdlIHBhcnNlciBzcGVjaWZpY2FsbHkgZm9yIFwidGhyZXNob2xkIGV4Y2VlZGVkXCIgZXZlbnRzIOKAkyBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdDsgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IGluIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMgY2FuIGJlIHRyaWNreS4gQW5kIHRoZSBkcml2ZXIgaXRzZWxmIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNgLCBjb25maXJtaW5nIG15IG1lbW9yeSBvZiBpdHMgbG9jYXRpb24uXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6IGNhbiB3ZSAqYWN0dWFsbHkqIHJlYWNoIGFuZCB2YWxpZGF0ZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5PyBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHdlIGludGVycHJldCBmaXJtd2FyZSBtZXNzYWdlcyBhbmQgaW50cm9kdWNlcyBuZXcgcmVhZCBmdW5jdGlvbnM6IGBmYm5pY19od21vbl9yZWFkYCwgYGZibmljX2h3bW9uX3RlbXBfcmVhZGAsIGBmYm5pY19od21vbl9pbl9yZWFkYC4gUGx1cywgdGhlcmXigJlzIHRoaXMgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgd2hpY2ggaXMgY2FsbGVkIGZyb20gdGhlIHRocmVzaG9sZCBwYXJzZXIuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIHRyaWdnZXJpbmcgYWxhcm1zLCBvciBhdCBsZWFzdCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2suXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogaXMgYGZibmljYCBldmVuICphY2Nlc3NpYmxlKiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIE1ldGEncyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLiBTbywgaXQncyBhIFBDSSBkZXZpY2UuIEkgd29uZGVyIGlmIHdlIGNhbiBmdXp6IHRoaXMgZWFzaWx5LiBTeXprYWxsZXIgaXMgYSBwb3dlcmZ1bCB0b29sLCBidXQgbmV0d29yayBkcml2ZXJzIGFyZSB1c3VhbGx5IHRlc3RlZCB2aWEgbmV0bGluayBvciBzb2NrZXQgaW50ZXJmYWNlcy4gVGhlIGlkZWFsIHNjZW5hcmlvIHdvdWxkIGJlIGEgZGVkaWNhdGVkIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgYGZibmljYCwgYnV0LCBpcyB0aGVyZSBhIHdheSB0byBmdXp6IFBDSSBkZXZpY2VzIHRocm91Z2ggc3l6a2FsbGVyIGlmIHRoZXkgYXJlIGVtdWxhdGVkIG9yIHdpdGggdmhjaS9QQ0kgZnV6emluZz8gV2FpdCwgc3l6a2FsbGVyIGhhcyBhIFBDSSBmdXp6ZXIhIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0LlxuXG5GaW5hbGx5LCBiZWZvcmUgSSBnZXQgbG9zdCBpbiB0aGUgd2VlZHMgb2YgZnV6emluZywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIGZvciBgQ09ORklHX0ZCTklDYCBhbmQgZGV0ZXJtaW5lIGlmIGl0J3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkcyBvciBpZiB3ZSdsbCBoYXZlIHRvIGVuYWJsZSBpdCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzowMS45Nzk0MzkwNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NDE1MjI0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJOSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MDIuMjM4ODYyNjI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4Nzc0MDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEV0aGVybmV0IEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSBzaG91bGQgYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGJyb2FkLCB0b3AtbGV2ZWwgc2V0dGluZ3MsIHBlcmhhcHMgb3B0aW9ucyBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBlbnRpcmUgc3Vic3lzdGVtLCBhbmQgcHJvYmFibHkgdGhlIGluY2x1c2lvbiBvZiBvdGhlciwgbW9yZSBzcGVjaWZpYyBLY29uZmlnIGZpbGVzIGZvciBpbmRpdmlkdWFsIEV0aGVybmV0IGNvbnRyb2xsZXJzIG9yIGZlYXR1cmVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGFuZCBkZXBlbmRlbmNpZXMgbGFpZCBvdXQgaGVyZSDigJMgaG93IGRpZmZlcmVudCBjb250cm9sbGVyIHR5cGVzIGFyZSBzZWxlY3RlZCwgaG93IGNvbW1vbiBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHNwYWNlIGxvb2tzIGxpa2UuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIHJlZHVuZGFuY2llcywgb3IgYXJlYXMgd2hlcmUgSSBjYW4gcG90ZW50aWFsbHkgc3RyZWFtbGluZSB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgd2hvbGUgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsgaXMgcHV0IHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MDYuMDI2NjA1NDk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg2MjUxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJOSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MDYuMTg1NDc0Nzk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5MDgzMjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGZibmljIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19GQk5JQ2AsIHRoYXQncyBteSBzdGFydGluZyBwb2ludC4gVGhlIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgLCBhbmQgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLiBSaWdodCwgdGhhdCBwYXJzZXIgaXMgZGVmaW5pdGVseSB0cmlnZ2VyZWQgYnkgZmlybXdhcmUgbWVzc2FnZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgdGhvc2UgZmlybXdhcmUgbWVzc2FnZXM/IElmIFN5emthbGxlciBpcyBmdXp6aW5nIFBDSSwgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW5qZWN0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gRE1BL01NSU8gcmVhZHMsIHdoaWNoIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIHZhbGlkIGZpcm13YXJlIG1lc3NhZ2VzLiBJdCdzIHBsYXVzaWJsZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRoIHRvIGBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcGAgaXRzZWxmIGFuZCBjb25maXJtIHRoYXQgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGlucHV0cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgaG93IGl0J3MgaW52b2tlZC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEyOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoxMC42NzYzMDk5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NTE1MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTE2NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXhbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYzoxNjUwOnN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjUxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTE2OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzIyLVxcdFxcdFxcdCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM6MTcyMzpcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzI0LVxcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI3OjEwLjg3MTg1ODAwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDE2NzMzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBmYm5pY19md190bHZfcGFyc2VyYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGUgYGZibmljX2Z3X3Rsdl9wYXJzZXJgIG1vZHVsZSwgcmVjb2duaXppbmcgaXQncyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhIHNwZWNpZmljIGRhdGEgZm9ybWF0LiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiAqd2hlcmUqIHRoaXMgcGFyc2VyIGlzIGJlaW5nIHV0aWxpemVkLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoIGFuZCBkZXBlbmRlbmN5IHRyZWUuIFVuZGVyc3RhbmRpbmcgaXRzIGNvbnN1bWVycyBpcyBjcnVjaWFsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNlbnRyYWwgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBsb2NhbGl6ZWQ/IElkZW50aWZ5aW5nIGV2ZXJ5IGluc3RhbmNlIG9mIGBmYm5pY19md190bHZfcGFyc2VyYCBpbiB1c2UgaXMgdGhlIGZpcnN0LCBlc3NlbnRpYWwgc3RlcC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgY3Jvc3MtcmVmZXJlbmNpbmcsIHByb2JhYmx5IGEgZ3JlcCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gY2FsbC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgd2hhdGV2ZXIgdGhleSBtYXkgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MTQuMjczNTM1NzEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0Mjg5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNfZndfdGx2X3BhcnNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xNjUwPXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE2OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTM6c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY5NC1cXHRGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTczMD1zdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc19yeF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzY2LVxcdFxcdC8qIElmIHBhcnNpbmcgZmFpbHMgZHVtcCBjb250ZW50cyBvZiBtZXNzYWdlIHRvIGRtZXNnICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE3Njc6XFx0XFx0ZXJyID0gZmJuaWNfdGx2X21zZ19wYXJzZShmYmQsIG1zZywgZmJuaWNfZndfdGx2X3BhcnNlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE3NjgtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoxNC41MjU5NzUzNTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYzOTY5NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRkJOSUMgUGF0Y2gncyBGdXp6aW5nIFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBmZXcga2V5IGFyZWFzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB2dWxuZXJhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZnV6emFibGUuIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgYGZibmljYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbWFpbGJveCwgYW5kIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nIChod21vbikgYXNwZWN0cy5cblxuRmlyc3QsIEkgc2VlIHRoaXMgaXMgdXNlZCBpbiBgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNnc2AuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHByb2Nlc3NlcyBtZXNzYWdlcyBjb21pbmcgKmZyb20qIHRoZSBoYXJkd2FyZS4gVGhlIG1haWxib3ggaXRzZWxmIGlzIGxpa2VseSBwb3B1bGF0ZWQgdGhyb3VnaCBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBvciBtZW1vcnktbWFwcGVkIEkvTyAoTU1JTyksIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZGF0YSBmbG93aW5nIGZyb20gdGhlIGRldmljZSB0byB0aGUga2VybmVsLiBUaGlzIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBJIGtub3cgU3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyBwYXJ0aWN1bGFybHkgd2VsbC1zdWl0ZWQgdG8gcG9raW5nIGF0IHRoZXNlIGtpbmRzIG9mIGludGVyZmFjZXMuXG5cblRoZW4gSSBub3RlIHRoZSBjaGFuZ2VzIHRvIHRoZSBod21vbiBmdW5jdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBgZmJuaWNfaHdtb25fcmVhZGAgYW5kICphZGRzKiBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCBhbmQgYGZibmljX2h3bW9uX2luX3JlYWRgLiBUaG9zZSBhcmUgYWxsIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBrbm93IFN5emthbGxlciBpcyBxdWl0ZSBhZGVwdCBhdCBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzIGZpbGVzLCBzbyBpdCBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucyBlYXNpbHkuIFRoYXQgYGZibmljX2h3bW9uX3JlYWRgIGZ1bmN0aW9uIGNvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCB0byBhIGxvdCBvZiBpbnRlcmVzdGluZyBsb2dpYy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZW5hYmxlIHRoaXMgYXJlYSwgSSBuZWVkIGBDT05GSUdfRkJOSUNgLCBvYnZpb3VzbHkuIEFsc28sIGBDT05GSUdfSFdNT05gIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBmYm5pY19od21vbl9yZWdpc3RlcmAgY2hlY2tzIGBJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKWAuIEludGVyZXN0aW5nbHksIGV2ZW4gdGhvdWdoIGBmYm5pY19od21vbl9yZWdpc3RlcmAgaXMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBpdCAqY2hlY2tzKiBgSFdNT05gIHZpYSBhIGNvbmRpdGlvbmFsIHJldHVybiEgU28sIEkgbmVlZCBgSFdNT05gIGVuYWJsZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGggaXMgYWN0aXZlLlxuXG5Ob3cgdG8gZGVmaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4gRnJvbSB0aGUgY29kZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgcHVycG9zZXMgYXJlOlxuKiAgIGBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcGAgKGxpa2VseSBmaXJtd2FyZSBwYXJzaW5nLCBpbnRlcmVzdGluZyBmb3IgY3JhZnRlZCBtZXNzYWdlcylcbiogICBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgLCBhbmQgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgKHRoZXNlIHNlZW0gbGlrZSBsb3ctaGFuZ2luZyBmcnVpdCwgdGhleSByZWFkIHZhbHVlcyBmcm9tIGh3bW9uIGludGVyZmFjZSlcbiogICBgZmJuaWNfaHdtb25fcmVhZGAgKHRoZSBwb3RlbnRpYWxseSBpbXBvcnRhbnQgZnVuY3Rpb24sIGFuZCBJJ2xsIG5lZWQgdG8gY2hlY2sgd2hpY2ggZmlsZSBpdCdzIGluIHRvIGVuc3VyZSBpdCBhbGlnbnMgd2l0aCBteSBhc3Nlc3NtZW50KVxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSBgZmJuaWNfaHdtb25fcmVhZGAgaXMgaW5kZWVkIGluIGBmYm5pY19od21vbi5jYCBzbyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ5MiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoyMy4xNjU2NzU4NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDM1MDgwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYm5pY19od21vbl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM9MTc9c3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzo4MTpzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy04OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6OTA6c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz05OT1zdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTA0LVxcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwNTpcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEwNi1cXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMDc6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMDgtXFx0Y2FzZSBod21vbl90ZW1wX2NyaXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwOTpcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMTAtXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0Olxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEyNi1cXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjc6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEyOC1cXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjk6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEzMC1cXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTMxOlxcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTMyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz0xMzc9c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNDItXFx0Y2FzZSBod21vbl9pbl9taW46XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjE0MzpcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE0NC1cXHRjYXNlIGh3bW9uX2luX21heDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTQ1OlxcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTQ2LVxcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTYxLVxcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxNjI6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2My1cXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTY0OlxcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNjUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTcwOnN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE3MS1cXHRcXHRcXHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM9MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTg2LVxcdC5pc192aXNpYmxlID0gZmJuaWNfaHdtb25faXNfdmlzaWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTg3OlxcdC5yZWFkID0gZmJuaWNfaHdtb25fcmVhZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTg4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI3OjIzLjQyNjAzMTgyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzc0NDUwNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRkJOSUMgSGFyZHdhcmUgTW9uaXRvcmluZyBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLCBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgLCBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YCwgYW5kIGBmYm5pY19od21vbl9yZWFkYC4gVGhlc2UgYXJlIGNsZWFybHkgcGFydCBvZiB0aGUgRkJOSUMgaGFyZHdhcmUgbW9uaXRvcmluZyBpbmZyYXN0cnVjdHVyZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCB0ZW1wZXJhdHVyZSwgdm9sdGFnZSwgYW5kIHBvdGVudGlhbGx5IG90aGVyIHNlbnNvciBkYXRhIHJlbGF0ZWQgdG8gdGhlIEZCTklDIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8ga25vdyBpZiBgQ09ORklHX0ZCTklDYCBpcyBkZWZpbmVkLiBBaCwgeWVzLCBpdCdzIGEgdHJpc3RhdGUsIHNvIGBGQk5JQ2AgaXMgdGhlIHN5bWJvbCB1c2VkIGluIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5SaWdodCwgc28gYGZibmljX2h3bW9uX3JlZ2lzdGVyYCBpcyBkZWZpbmVkIGluIGBmYm5pY19od21vbi5jYC4gTGV0IG1lIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdgIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoyOS44MDA0ODU0MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzAyODM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJOSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MzAuMDUzNTE5MzE4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTQyNzI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipDaGVja2luZyBvbiBOZXR3b3JrIFZlbmRvciBNZXRhZGF0YSoqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIHRoaXMgb3ZlcnZpZXcgYW5kIHJlYWxpemVkIEkgZ2xvc3NlZCBvdmVyIHNvbWV0aGluZyBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIEkndmUgZ290IGBORVRfVkVORE9SX01FVEFgIGluIG15IG5vdGVzLCBidXQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgaGFuZGxlZCBjb3JyZWN0bHkuIEl0J3MgdG9vIGVhc3kgdG8gbWlzcyB0aGVzZSBsaXR0bGUgZGVwZW5kZW5jaWVzLiBSaWdodCBub3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkVUX1ZFTkRPUl9NRVRBYCBpcyBlaXRoZXIgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgb3IgZWxzZSBjbGVhcmx5IG5vdGUgd2hhdCdzIHJlcXVpcmVkIHRvIGVuYWJsZSBpdCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBwcm9qZWN0LiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgc2VlIHdoYXQgdGhlIHN0YXR1cyBpcy4gVGhhdCdzIHRoZSBwcmlvcml0eSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MzYuNTY3Nzk0NzY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NDA5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfTUVUQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy03LVxcdGJvb2wgXFxcIk1ldGEgUGxhdGZvcm1zIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI3OjM2LjcxOTI0MzMzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTM2NzcwNDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZCTklDIERyaXZlciBDb25maWd1cmF0aW9uIGFuZCBWdWxuZXJhYmlsaXR5IFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IGhlcmUuIEl0IGxvb2tzIGxpa2UgYE5FVF9WRU5ET1JfTUVUQWAsIGBGQk5JQ2AsIGFuZCBgSFdNT05gIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZS4gU28gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYnVpbGQgYSBjb25maWd1cmF0aW9uIGFycmF5IGxpa2U6IGBbXCJORVRfVkVORE9SX01FVEFcIiwgXCJGQk5JQ1wiLCBcIkhXTU9OXCJdYC4gVGhhdCBzZXRzIHRoZSBzdGFnZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBmYm5pY19od21vbmAgaW50ZXJhY3Rpb25zIGJlY2F1c2Ugb2YgdGhlaXIgcG90ZW50aWFsIGZvciBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzLiBJJ20gemVyb2luZyBpbiBvbiBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgIHRvIHNlZSBpZiBpdCdzIHJlYWNoYWJsZS4gSXQgYXBwZWFycyBpdCBpcywgaW5kaXJlY3RseSwgdGhyb3VnaCBhIGNoYWluOiBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBhbmQgYGZibmljX2h3bW9uX3JlYWRgLCB3aGljaCBpcyByZWdpc3RlcmVkIGFzIHRoZSBgaHdtb25fb3BzLnJlYWRgIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3lzZnMgcmVhZHMgb24gdGhlIGh3bW9uIGRldmljZS4gVGhpcyBpcyBhIGdvb2Qgc2lnbiBmb3IgZnV6emluZywgYW5kIGEgbGlrZWx5IGF2ZW51ZSBmb3IgZXhwbG9pdGF0aW9uLlxuXG5PbiBhIGRpZmZlcmVudCB2ZWN0b3IsIEkgaGF2ZSB0aGUgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaXJtd2FyZSBtZXNzYWdlcywgb3IgbWFpbGJveC4gVGhpcyBhbHNvIHNlZW1zIHRvIGJlIGEgc29saWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGNsZWFybHkgZnVuY3Rpb25hbC5cblxuTXkgY3VycmVudCBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgIChmaXJtd2FyZSBtYWlsYm94KVxuKiAgIGBmYm5pY19od21vbl90ZW1wX3JlYWRgXG4qICAgYGZibmljX2h3bW9uX2luX3JlYWRgXG4qICAgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCAocmVhY2hhYmxlIHZpYSBgaHdtb25gIGRldmljZSlcbiogICBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YFxuKiAgIGBmYm5pY19od21vbl9yZWFkYFxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCB0byBzZWUgaWYgaXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgaXQgaXMuIFRoZW4gbGV0J3MgdmVyaWZ5IGlmIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgIGlzIGV4cG9ydGVkIG9yIGp1c3QgZ2xvYmFsLiBJdCBpcyBnbG9iYWwgaW4gYGZibmljX2h3bW9uLmNgIGFuZCBjYWxsZWQgZnJvbSBgZmJuaWNfZncuY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uXG5cbkZpbmFsbHksIEkgbmVlZCB0byBzZWUgd2hhdCBlbHNlIGhhcyBiZWVuIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgd2FzIG1vZGlmaWVkIHRvIHBhcnNlIHRocmVzaG9sZCB2YWx1ZXMuIFRoaXMgbm93IGFwcGVhcnMgdG8gYmUgYW5vdGhlciBzb2xpZCBmb2N1cyBzeW1ib2wgYW5kIGFuIGV4dGVuc2lvbiBvZiB0aGUgZmlybXdhcmUgbWVzc2FnaW5nIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NTMsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6NDQuNjU2MDE4MzU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQzMDc4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz01ODY9c3RhdGljIGludCBmYm5pY19md19wYXJzZV9ibWNfYWRkcnModTggYm1jX21hY19hZGRyW11bRVRIX0FMRU5dLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTYxNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM6NjE1OnN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3Aodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTYxNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTY5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE2OTUtXFx0RkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTY6XFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY5Ny1cXHRGQk5JQ19UTFZfUEFSU0VSKE9XTkVSU0hJUF9SRVNQLCBmYm5pY19vd25lcnNoaXBfcmVzcF9pbmRleCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6NDUuMzEwMzM0OTE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzI3Mjc0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgZmJuaWMgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBjaGFuZ2UgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZGAgYW5kIGBmYm5pY19od21vbl9yZWFkX2FsYXJtYC4gVGhleSdyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYGZibmljX2h3bW9uLmNgLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IEZvY3VzU3ltYm9scyBsaXN0LiBUaGV5IHdvdWxkIGJlIHBlcmZlY3QgdG8gZnV6ei5cblxuTGV0IG1lIHN1bW1hcml6ZSB0aGUgc2NvcGU6IG15IEZvY3VzU3ltYm9scyB3aWxsIGJlOlxuXG4qICAgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCAodGhlIGZpcm13YXJlIHJlc3BvbnNlIHBhcnNlcilcbiogICBgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3BgICh0aGUgbW9kaWZpZWQgY2FwYWJpbGl0eSByZXNwb25zZSlcbiogICBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCAodGVtcGVyYXR1cmUgc2Vuc29yIHJlYWRpbmcpXG4qICAgYGZibmljX2h3bW9uX2luX3JlYWRgICh2b2x0YWdlIHNlbnNvciByZWFkaW5nKVxuKiAgIGBmYm5pY19od21vbl9zZW5zb3JfcmVhZGAgKGdlbmVyaWMgc2Vuc29yIHJlYWQpXG4qICAgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgKGV2ZW50IG5vdGlmaWNhdGlvbilcbiogICBgZmJuaWNfaHdtb25fcmVhZGAgKGdlbmVyYWwgaHdtb24gcmVhZClcbiogICBgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGRgICh0aHJlc2hvbGQgcmVhZGluZyAtIGEgc3RhdGljIGhlbHBlcilcbiogICBgZmJuaWNfaHdtb25fcmVhZF9hbGFybWAgKGFsYXJtIHJlYWRpbmcgLSBhbHNvIGEgc3RhdGljIGhlbHBlcilcblxuVGhlIHVuZGVybHlpbmcgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgZmJuaWMgZHJpdmVyJ3MgaGFyZHdhcmUgbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMsIGluY2x1ZGluZyByZWFkaW5nIGZyb20gbmV3IHN5c2ZzIGludGVyZmFjZXMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlLCBhbmQgcGFyc2luZyBmaXJtd2FyZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRocmVzaG9sZCBleGNlZWRhbmNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByaW1lIHRhcmdldHMuIEkgY2FuIGZ1enogdGhpcyBieSB3cml0aW5nIHRvIHN5c2ZzIGFuZCBlbXVsYXRpbmcgUENJL21haWxib3ggaW50ZXJhY3Rpb25zLiBUaG9zZSBGb2N1c1N5bWJvbHMgYXJlIG15IGF0dGFjayBzdXJmYWNlLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjc0LCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzo1My4xNDMwNjU3OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU2NjY2NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfTUVUQVwiLFxuICAgIFwiRkJOSUNcIixcbiAgICBcIkhXTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BcIixcbiAgICBcImZibmljX2Z3X3BhcnNlX2NhcF9yZXNwXCIsXG4gICAgXCJmYm5pY19od21vbl90ZW1wX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX2luX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3NlbnNvcl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9ub3RpZnlfZXZlbnRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX2FsYXJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBtb25pdG9yaW5nIHRocmVzaG9sZCBhbmQgYWxhcm0gc3VwcG9ydCB0byB0aGUgZmJuaWMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyByZWFkIGhhbmRsZXJzIGZvciB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3JzLCBhbmQgYWRkcyBhIGZpcm13YXJlIG1lc3NhZ2UgcGFyc2VyIGZvciB0aHJlc2hvbGQgZXhjZWVkZWQgZXZlbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXIncyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX01FVEFcIixcbiAgICBcIkZCTklDXCIsXG4gICAgXCJIV01PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwXCIsXG4gICAgXCJmYm5pY19md19wYXJzZV9jYXBfcmVzcFwiLFxuICAgIFwiZmJuaWNfaHdtb25fdGVtcF9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9pbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9zZW5zb3JfcmVhZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50XCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fcmVhZF9hbGFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgbW9uaXRvcmluZyB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQgdG8gdGhlIGZibmljIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgc3lzZnMgcmVhZCBoYW5kbGVycyBmb3IgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2Ugc2Vuc29ycywgYW5kIGFkZHMgYSBmaXJtd2FyZSBtZXNzYWdlIHBhcnNlciBmb3IgdGhyZXNob2xkIGV4Y2VlZGVkIGV2ZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgaHdtb24gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBtYWlsYm94IHByb2Nlc3NpbmcsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBlbXVsYXRlZCBQQ0kvbWFpbGJveCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 15:05:47 +0000 UTC FinishedAt: 2026-07-22 15:27:54 +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": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_META", "FBNIC", "HWMON" ], "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": "df13c1df8147675470213ffff29dd5762fa321f5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_META", "FBNIC", "HWMON" ], "series_id": "972d099c-6103-4f01-b52e-6cccfb31210d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fbnic_fw_parse_threshold_exceeded_resp", "fbnic_fw_parse_cap_resp", "fbnic_hwmon_temp_read", "fbnic_hwmon_in_read", "fbnic_hwmon_sensor_read", "fbnic_hwmon_notify_event", "fbnic_hwmon_read", "fbnic_hwmon_read_threshold", "fbnic_hwmon_read_alarm" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfTUVUQSYjMzQ7LAogICAgJiMzNDtGQk5JQyYjMzQ7LAogICAgJiMzNDtIV01PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwJiMzNDssCiAgICAmIzM0O2ZibmljX2Z3X3BhcnNlX2NhcF9yZXNwJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3RlbXBfcmVhZCYjMzQ7LAogICAgJiMzNDtmYm5pY19od21vbl9pbl9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3NlbnNvcl9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX25vdGlmeV9ldmVudCYjMzQ7LAogICAgJiMzNDtmYm5pY19od21vbl9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWRfYWxhcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBtb25pdG9yaW5nIHRocmVzaG9sZCBhbmQgYWxhcm0gc3VwcG9ydCB0byB0aGUgZmJuaWMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyByZWFkIGhhbmRsZXJzIGZvciB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3JzLCBhbmQgYWRkcyBhIGZpcm13YXJlIG1lc3NhZ2UgcGFyc2VyIGZvciB0aHJlc2hvbGQgZXhjZWVkZWQgZXZlbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXImIzM5O3MgaHdtb24gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBtYWlsYm94IHByb2Nlc3NpbmcsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBlbXVsYXRlZCBQQ0kvbWFpbGJveCBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNmY4MWE2MjA4MDIyOTE4OWRhMTA5MDJiZGI4MjIzNjA5MmJmYjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTU6MjY6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG5pbmRleCBkMDcxNTY5NWM0M2U3NS4uNGE0OWMyMGU0YTAxNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICYjNDM7MjIsMTggQEAgc3RydWN0IGZibmljX25hcGlfdmVjdG9yO1xuICNkZWZpbmUgRkJOSUNfTUFYX05BUElfVkVDVE9SU1x0XHQxMjh1XG4gI2RlZmluZSBGQk5JQ19NQlhfQ01QTF9TTE9UU1x0XHQ0XG4gXG4mIzQzO3N0cnVjdCBmYm5pY19od21vbl9jYWNoZSB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4mIzQzO1x0czMyIHRlbXBfbWRlZztcbiYjNDM7XHRzMzIgdm9sdF9tdjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGZibmljX2RldiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcbiBcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcbiBcdHN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqZndfcmVwb3J0ZXI7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKm90cF9yZXBvcnRlcjtcbiBcbkBAIC0xODUsNiAmIzQzOzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4mIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCk7XG4gXG4gaW50IGZibmljX21hY19yZXF1ZXN0X2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIHZvaWQgZmJuaWNfbWFjX2ZyZWVfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3OC4uNmRjYTM4MDc2ZDdiOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuQEAgLTU3NSw2ICYjNDM7NTc1LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX2Z3X2NhcF9yZXNwX2luZGV4W10gPSB7XG4gXHRGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLFxuIFx0XHRcdCAgICAgIEZCTklDX0ZXX0NBUF9SRVNQX0NPTU1JVF9NQVhfU0laRSksXG4gXHRGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWCksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgpLFxuIFx0RkJOSUNfVExWX0FUVFJfTEFTVFxuIH07XG4gXG5AQCAtNzAyLDYgJiM0Mzs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiBcdC8qIEFsd2F5cyBhc3N1bWUgd2UgbmVlZCBhIEJNQyByZWluaXQgKi9cbiBcdGZiZC1cdTAwM2Vmd19jYXAubmVlZF9ibWNfdGNhbV9yZWluaXQgPSB0cnVlO1xuIFxuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4gPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXggPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0ID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbiA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE2MTgsNiAmIzQzOzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXhbXSA9IHtcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4mIzQzO3tcbiYjNDM7XHRib29sIHRoZXJtX2V4Y2VlZGVkLCB2b2x0X2V4Y2VlZGVkO1xuJiM0MztcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTtcbiYjNDM7XHRzMzIgdmFsdWU7XG4mIzQzO1xuJiM0MztcdHRoZXJtX2V4Y2VlZGVkID1cbiYjNDM7XHRcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTtcbiYjNDM7XHR2b2x0X2V4Y2VlZGVkID1cbiYjNDM7XHRcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRoZXJtX2V4Y2VlZGVkIFx1MDAyNlx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtUaHJlc2hvbGQgZXhjZWVkZWQgbWVzc2FnZSB3aXRoIG5vIGZsYWcgc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7XG4mIzQzO1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcblwmIzM0OywgdmFsdWUpO1xuJiM0MztcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2b2x0X2V4Y2VlZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVEFHRSk7XG4mIzQzO1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcblwmIzM0OywgdmFsdWUpO1xuJiM0MztcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbHVlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCxcbkBAIC0xNjQ2LDYgJiM0MzsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVFNFTkVfUkVBRF9SRVNQLFxuIFx0XHRcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX3RzZW5lX3JlYWRfcmVzcCksXG4mIzQzO1x0RkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsXG4mIzQzO1x0XHRcdCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleCxcbiYjNDM7XHRcdFx0IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXG4gXHRcdFx0IGZibmljX2Z3X2xvZ19yZXFfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuaW5kZXggZDg0NzIzZTRjZmEzNjIuLjg3MzAxZTYwODI1NTVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiAmIzQzOzQ1LDE4IEBAIHN0cnVjdCBmYm5pY19md192ZXIge1xuIFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcbiB9O1xuIFxuJiM0MzsvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGVcbiYjNDM7ICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4mIzQzOyAqIHJlZnJlc2hlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHtcbiYjNDM7XHRzMzIgbWluO1xuJiM0MztcdHMzMiBtYXg7XG4mIzQzO1x0czMyIGNyaXQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xuQEAgLTYwLDYgJiM0Mzs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0dThcdGxpbmtfc3BlZWQ7XG4gXHR1OFx0bGlua19mZWM7XG4gXHR1MzJcdGFudGlfcm9sbGJhY2tfdmVyc2lvbjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4mIzQzO1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB2b2x0O1xuIH07XG4gXG4gc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24ge1xuQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7XG4gXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXHRcdFx0PSAweDM5LFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUVx0XHRcdD0gMHgzQyxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQXHRcdD0gMHgzRCxcbiYjNDM7XHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiAmIzQzOzI1OCwxMiBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlx0XHRcdD0gMHgxMSxcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUlx0XHQ9IDB4MTIsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cdFx0PSAweDE1LFxuJiM0MztcdC8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhcdFx0XHQ9IDB4MTksXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXHRcdFx0PSAweDFhLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXHRcdFx0PSAweDFjLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxuIH07XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTcsMTQgQEAgZW51bSB7XG4gXHRGQk5JQ19GV19UU0VORV9NU0dfTUFYXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBR1x0PSAweDAsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXHQ9IDB4MSxcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVx0XHRcdD0gMHgzLFxuJiM0MztcdEZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RkJOSUNfRldfT1dORVJTSElQX0ZMQUdcdFx0XHQ9IDB4MCxcbiBcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXHRcdFx0PSAweDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG5pbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgJiM0MzsyLDE4NCBAQFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHdtb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtmYm5pYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZmJuaWNfbWFjLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuJiM0MztzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbiYjNDM7XHRyZXR1cm4gMDQ0NDtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXHUwMDI2ZmJkLVx1MDAzZWh3bW9uX2NhY2hlO1xuJiM0MztcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHMzMiAqY2FjaGVkO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XG4mIzQzO1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhjYWNoZS1cdTAwM2VsYXN0X3JlYWQpKSB7XG4mIzQzO1x0XHQqdmFsID0gKmNhY2hlZDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuJiM0MztcdGlmICghZndfY21wbClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXhpdF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZndfY21wbC1cdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbiYjNDM7XHRpZiAoZndfY21wbC1cdTAwM2VyZXN1bHQpIHtcbiYjNDM7XHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCBlcnIpO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBGVyByZXR1cm5zIGJvdGggcmVhZGluZ3MgaW4gb25lIHJlc3BvbnNlLCBjYWNoZSBib3RoLiAqL1xuJiM0MztcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4mIzQzO1x0Y2FjaGUtXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaXZvbHRzO1xuJiM0MztcdGNhY2hlLVx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSAqY2FjaGVkO1xuJiM0MztleGl0X2NsZWFudXA6XG4mIzQzO1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbiYjNDM7ZXhpdF9mcmVlOlxuJiM0MztcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4tXHRcdFx0XHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxuLVx0XHRcdFx0ICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKVxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHQqdmFsID0gdGhyO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfYWxhcm0obG9uZyBhLCBsb25nIGIsIGxvbmcgKnZhbClcbiB7XG4tXHRpZiAodHlwZSA9PSBod21vbl90ZW1wIFx1MDAyNlx1MDAyNiBhdHRyID09IGh3bW9uX3RlbXBfaW5wdXQpXG4tXHRcdHJldHVybiAwNDQ0O1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4gXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25faW5faW5wdXQpXG4tXHRcdHJldHVybiAwNDQ0O1xuJiM0MztcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4mIzQzO1x0KnZhbCA9IGEgXHUwMDNlPSBiO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhdHRyKSB7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXg6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX2lucHV0OlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4gXHRcdFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxuIHtcbiBcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0Y29uc3Qgc3RydWN0IGZibmljX21hYyAqbWFjID0gZmJkLVx1MDAzZW1hYztcbi1cdGludCBpZDtcbiBcbi1cdGlkID0gZmJuaWNfaHdtb25fc2Vuc29yX2lkKHR5cGUpO1xuLVx0cmV0dXJuIGlkIFx1MDAzYyAwID8gaWQgOiBtYWMtXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl90ZW1wX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW46XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICYjNDM7MTg4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpmYm5pY19od21vbl9pbmZvW10gPSB7XG4tXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCwgSFdNT05fVF9JTlBVVCksXG4tXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9NSU4gfCBIV01PTl9UX01JTl9BTEFSTSB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX1RfTUFYIHwgSFdNT05fVF9NQVhfQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyhpbixcbiYjNDM7XHRcdFx0ICAgSFdNT05fSV9JTlBVVCB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUFYX0FMQVJNKSxcbiBcdE5VTExcbiB9O1xuIFxuQEAgLTU3LDI1ICYjNDM7MjA3LDgxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZmJkLVx1MDAzZWh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcJiMzNDtmYm5pY1wmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbiYjNDM7XHQvKiBTZWVkIGNhY2hlIHdpdGggc2VudGluZWwgc28gdGhlIGZpcnN0IHJlYWQgYWx3YXlzIHJlZnJlc2hlcy4gKi9cbiYjNDM7XHRmYmQtXHUwMDNlaHdtb25fY2FjaGUudGVtcF9tZGVnID0gRkJOSUNfU0VOU09SX05PX0RBVEE7XG4mIzQzO1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbiYjNDM7XG4mIzQzO1x0aHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwmIzM0O2ZibmljXCYjMzQ7LCBmYmQsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmZibmljX2NoaXBfaW5mbywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgIGZiZC1cdTAwM2Vod21vbik7XG4tXHRcdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4mIzQzO1x0XHRcdCAgIGh3bW9uKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSB8fCAhZmJkLVx1MDAzZWh3bW9uKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRod21vbl9kZXZpY2VfdW5yZWdpc3RlcihmYmQtXHUwMDNlaHdtb24pO1xuLVx0ZmJkLVx1MDAzZWh3bW9uID0gTlVMTDtcbiYjNDM7XHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbiYjNDM7XHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxuJiM0MztcdCAqIGFuZCB3YWl0IGZvciBhbnkgaW4tZmxpZ2h0IEZXIG1haWxib3ggSVJRIGhhbmRsZXIgdG8gZmluaXNoIHNvIGl0XG4mIzQzO1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGZiZC1cdTAwM2Vod21vbiwgTlVMTCk7XG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4mIzQzO1xuJiM0MztcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbiYjNDM7XHRzMzIgYXR0ciA9IC0xO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdHR5cGUgPSBod21vbl90ZW1wO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9taW5fYWxhcm07XG4mIzQzO1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbiYjNDM7XHRcdGVsc2UgaWYgKHZhbCBcdTAwM2U9IGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuJiM0MztcdFx0dHlwZSA9IGh3bW9uX2luO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX2luX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4mIzQzO1x0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cbiYjNDM7XHQgKiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cdTAwM2Vod21vbik7XG4mIzQzO1x0aWYgKGF0dHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBod21vbilcbiYjNDM7XHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Ny4uZmJhMmUyZWZhZWI4YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5AQCAtODk5LDYwICYjNDM7ODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcbiBcdFx0XHQgICAgVE1JX1NUQVRfVFhfUEFDS0VUXzkyMTdfTUFYX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIGludCBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLFxuLVx0XHRcdFx0ICAgICBsb25nICp2YWwpXG4te1xuLVx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XG4tXHRpbnQgZXJyID0gMDtcbi1cdHMzMiAqc2Vuc29yO1xuLVxuLVx0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuLVx0aWYgKCFmd19jbXBsKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHN3aXRjaCAoaWQpIHtcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbi1cdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRlcnIpO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwmIzM0Oyk7XG4tXHRcdGVyciA9IC1FVElNRURPVVQ7XG4tXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuLVx0fVxuLVxuLVx0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXG4tXHRpZiAoZndfY21wbC1cdTAwM2VyZXN1bHQpIHtcbi1cdFx0ZXJyID0gZndfY21wbC1cdTAwM2VyZXN1bHQ7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCYjMzQ7LFxuLVx0XHRcdF9fZnVuY19fLCBlcnIpO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdCp2YWwgPSAqc2Vuc29yO1xuLWV4aXRfY2xlYW51cDpcbi1cdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4tZXhpdF9mcmVlOlxuLVx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLFxuIFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxuQEAgLTk2Niw3ICYjNDM7OTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7XG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsXG4gXHQubGlua19kb3duID0gZmJuaWNfbWFjX2xpbmtfZG93bl9hc2ljLFxuIFx0LmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLFxuLVx0LmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbmluZGV4IDEwZjMwZTBlOGY2OTE2Li5iZGUyZGFhNjU2NDU3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCAmIzQzOzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xuIFxuIFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcdHZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpO1xuLVxuLVx0aW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7XG4gfTtcbiBcbiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgICAmIzM0O0ZCTklDJiMzNDssCiAgICAmIzM0O0hXTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fdGVtcF9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX2luX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50JiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF9hbGFybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG1vbml0b3JpbmcgdGhyZXNob2xkIGFuZCBhbGFybSBzdXBwb3J0IHRvIHRoZSBmYm5pYyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IHN5c2ZzIHJlYWQgaGFuZGxlcnMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvcnMsIGFuZCBhZGRzIGEgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgZm9yIHRocmVzaG9sZCBleGNlZWRlZCBldmVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZmODFhNjIwODAyMjkxODlkYTEwOTAyYmRiODIyMzYwOTJiZmI2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCmluZGV4IGQwNzE1Njk1YzQzZTc1Li40YTQ5YzIwZTRhMDE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaApAQCAtMjIsMTEgJiM0MzsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7CiAjZGVmaW5lIEZCTklDX01BWF9OQVBJX1ZFQ1RPUlMJCTEyOHUKICNkZWZpbmUgRkJOSUNfTUJYX0NNUExfU0xPVFMJCTQKIAomIzQzO3N0cnVjdCBmYm5pY19od21vbl9jYWNoZSB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbGFzdF9yZWFkOwomIzQzOwlzMzIgdGVtcF9tZGVnOwomIzQzOwlzMzIgdm9sdF9tdjsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGZibmljX2RldiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGRlbnRyeSAqZGJnX2ZiZDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsJc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIGh3bW9uX2NhY2hlOwogCXN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqZndfcmVwb3J0ZXI7CiAJc3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7CiAKQEAgLTE4NSw2ICYjNDM7MTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogCiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTsKJiM0Mzt2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpOwogCiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiB2b2lkIGZibmljX21hY19mcmVlX2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCmluZGV4IDI4M2QyNWZhZTc5ZTc4Li42ZGNhMzgwNzZkN2I5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwpAQCAtNTc1LDYgJiM0Mzs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHsKIAlGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLAogCQkJICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSwKIAlGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksCiAJRkJOSUNfVExWX0FUVFJfTEFTVAogfTsKIApAQCAtNzAyLDYgJiM0Mzs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKIAkvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovCiAJZmJkLSZndDtmd19jYXAubmVlZF9ibWNfdGNhbV9yZWluaXQgPSB0cnVlOwogCiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluID0KJiM0MzsJCWZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudGVtcC5tYXggPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQgPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudm9sdC5taW4gPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MTgsNiAmIzQzOzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7CiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9MQVNUCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSwKJiM0MzsJCQkJCQkgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKJiM0Mzt7CiYjNDM7CWJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7CiYjNDM7CXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTsKJiM0MzsJczMyIHZhbHVlOwomIzQzOwomIzQzOwl0aGVybV9leGNlZWRlZCA9CiYjNDM7CQlmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7CiYjNDM7CXZvbHRfZXhjZWVkZWQgPQomIzQzOwkJZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7CiYjNDM7CiYjNDM7CWlmICghdGhlcm1fZXhjZWVkZWQgJmFtcDsmYW1wOyAhdm9sdF9leGNlZWRlZCkgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkmIzM0O1RocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0aGVybV9leGNlZWRlZCkgewomIzQzOwkJaWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7CiYjNDM7CQkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCXZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpOwomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcbiYjMzQ7LCB2YWx1ZSk7CiYjNDM7CQlmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2b2x0X2V4Y2VlZGVkKSB7CiYjNDM7CQlpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHsKJiM0MzsJCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJdmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVEFHRSk7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxuJiMzNDssIHZhbHVlKTsKJiM0MzsJCWZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksCiAJRkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsCkBAIC0xNjQ2LDYgJiM0MzsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCwKIAkJCSBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsCiAJCQkgZmJuaWNfZndfcGFyc2VfdHNlbmVfcmVhZF9yZXNwKSwKJiM0MzsJRkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsCiYjNDM7CQkJIGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LAomIzQzOwkJCSBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksCiAJRkJOSUNfVExWX1BBUlNFUihMT0dfTVNHX1JFUSwKIAkJCSBmYm5pY19md19sb2dfcmVxX2luZGV4LAogCQkJIGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCmluZGV4IGQ4NDcyM2U0Y2ZhMzYyLi44NzMwMWU2MDgyNTU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogc3RydWN0IGZibmljX2RldjsKQEAgLTQ0LDYgJiM0Mzs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHsKIAljaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdOwogfTsKIAomIzQzOy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZQomIzQzOyAqIGZpcm13YXJlIG5ldmVyIHBvcHVsYXRlZCAob2xkZXIgZmlybXdhcmUpIG9yIGEgY2FjaGUgZW50cnkgbm90IHlldAomIzQzOyAqIHJlZnJlc2hlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZCTklDX1NFTlNPUl9OT19EQVRBCQkJUzMyX01JTgomIzQzOwomIzQzO3N0cnVjdCBmYm5pY190aHJlc2hvbGQgewomIzQzOwlzMzIgbWluOwomIzQzOwlzMzIgbWF4OwomIzQzOwlzMzIgY3JpdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyOwpAQCAtNjAsNiAmIzQzOzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJdTgJbGlua19zcGVlZDsKIAl1OAlsaW5rX2ZlYzsKIAl1MzIJYW50aV9yb2xsYmFja192ZXJzaW9uOwomIzQzOwlzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7CiYjNDM7CXN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDsKIH07CiAKIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHsKQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7CiAJRkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUAkJCT0gMHgzOSwKIAlGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRCQkJPSAweDNDLAogCUZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQCQk9IDB4M0QsCiYjNDM7CUZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRCQk9IDB4NDMsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUQkJCT0gMHg0NCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUAkJCT0gMHg0NSwKQEAgLTI0Miw2ICYjNDM7MjU4LDEyIEBAIGVudW0gewogCUZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTgkJCT0gMHgxMSwKIAlGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIJCT0gMHgxMiwKIAlGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04JCT0gMHgxNSwKJiM0MzsJLyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4JCQk9IDB4MTgsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYCQkJPSAweDE5LAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQJCQk9IDB4MWEsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOCQkJPSAweDFiLAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWAkJCT0gMHgxYywKIAlGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYCiB9OwogCkBAIC0yNzUsNiAmIzQzOzI5NywxNCBAQCBlbnVtIHsKIAlGQk5JQ19GV19UU0VORV9NU0dfTUFYCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcJPSAweDAsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRwk9IDB4MSwKJiM0MzsJRkJOSUNfRldfVFNFTkVfVEhFUk1BTAkJCT0gMHgyLAomIzQzOwlGQk5JQ19GV19UU0VORV9WT0xUQUdFCQkJPSAweDMsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCUZCTklDX0ZXX09XTkVSU0hJUF9GTEFHCQkJPSAweDAsCiAJRkJOSUNfRldfT1dORVJTSElQX1RJTUUJCQk9IDB4MSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwppbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMKQEAgLTIsNDEgJiM0MzsyLDE4NCBAQAogLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2h3bW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtmYm5pYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZmJuaWNfbWFjLmgmIzM0OwogCi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKQomIzQzO3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSwKJiM0MzsJCQkJICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKJiM0MzsJCQkJICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKQogewotCWlmICh0eXBlID09IGh3bW9uX3RlbXApCi0JCXJldHVybiBGQk5JQ19TRU5TT1JfVEVNUDsKLQlpZiAodHlwZSA9PSBod21vbl9pbikKLQkJcmV0dXJuIEZCTklDX1NFTlNPUl9WT0xUQUdFOwomIzQzOwlyZXR1cm4gMDQ0NDsKJiM0Mzt9CiAKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9ICZhbXA7ZmJkLSZndDtod21vbl9jYWNoZTsKJiM0MzsJc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwlzMzIgKmNhY2hlZDsKJiM0MzsKJiM0MzsJc3dpdGNoIChpZCkgewomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9URU1QOgomIzQzOwkJY2FjaGVkID0gJmFtcDtjYWNoZS0mZ3Q7dGVtcF9tZGVnOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6CiYjNDM7CQljYWNoZWQgPSAmYW1wO2NhY2hlLSZndDt2b2x0X212OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoKmNhY2hlZCAhPSBGQk5JQ19TRU5TT1JfTk9fREFUQSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtJmd0O2xhc3RfcmVhZCkpIHsKJiM0MzsJCSp2YWwgPSAqY2FjaGVkOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApOwomIzQzOwlpZiAoIWZ3X2NtcGwpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCWVycik7CiYjNDM7CQlnb3RvIGV4aXRfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2Z3X2NtcGwtJmd0O2RvbmUsIDEwICogSFopKSB7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXG4mIzM0Oyk7CiYjNDM7CQllcnIgPSAtRVRJTUVET1VUOwomIzQzOwkJZ290byBleGl0X2NsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovCiYjNDM7CWlmIChmd19jbXBsLSZndDtyZXN1bHQpIHsKJiM0MzsJCWVyciA9IGZ3X2NtcGwtJmd0O3Jlc3VsdDsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXG4mIzM0OywKJiM0MzsJCQlfX2Z1bmNfXywgZXJyKTsKJiM0MzsJCWdvdG8gZXhpdF9jbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEZXIHJldHVybnMgYm90aCByZWFkaW5ncyBpbiBvbmUgcmVzcG9uc2UsIGNhY2hlIGJvdGguICovCiYjNDM7CWNhY2hlLSZndDt0ZW1wX21kZWcgPSBmd19jbXBsLSZndDt1LnRzZW5lLm1pbGxpZGVncmVlczsKJiM0MzsJY2FjaGUtJmd0O3ZvbHRfbXYgPSBmd19jbXBsLSZndDt1LnRzZW5lLm1pbGxpdm9sdHM7CiYjNDM7CWNhY2hlLSZndDtsYXN0X3JlYWQgPSBqaWZmaWVzOwomIzQzOwomIzQzOwkqdmFsID0gKmNhY2hlZDsKJiM0MztleGl0X2NsZWFudXA6CiYjNDM7CWZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7CiYjNDM7ZXhpdF9mcmVlOgomIzQzOwlmYm5pY19md19wdXRfY21wbChmd19jbXBsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLAotCQkJCSAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCi0JCQkJICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKQomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CWlmICh0aHIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CiYjNDM7CSp2YWwgPSB0aHI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfYWxhcm0obG9uZyBhLCBsb25nIGIsIGxvbmcgKnZhbCkKIHsKLQlpZiAodHlwZSA9PSBod21vbl90ZW1wICZhbXA7JmFtcDsgYXR0ciA9PSBod21vbl90ZW1wX2lucHV0KQotCQlyZXR1cm4gMDQ0NDsKLQlpZiAodHlwZSA9PSBod21vbl9pbiAmYW1wOyZhbXA7IGF0dHIgPT0gaHdtb25faW5faW5wdXQpCi0JCXJldHVybiAwNDQ0OwomIzQzOwlpZiAoYSA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSB8fCBiID09IEZCTklDX1NFTlNPUl9OT19EQVRBKQomIzQzOwkJcmV0dXJuIC1FTk9EQVRBOwogCiYjNDM7CSp2YWwgPSBhICZndDs9IGI7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21pbjoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC50ZW1wLm1pbiwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21heDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2NyaXQ6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudGVtcC5jcml0LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfaW5wdXQ6CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9taW5fYWxhcm06CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX3RlbXBfaW5wdXQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21pbl9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluLCAqdmFsLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLSZndDtmd19jYXAudGVtcC5tYXgsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLSZndDtmd19jYXAudGVtcC5jcml0LCB2YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX2luX21pbjoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbiwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbl9tYXg6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudm9sdC5tYXgsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW5faW5wdXQ6CiYjNDM7CWNhc2UgaHdtb25faW5fbWluX2FsYXJtOgomIzQzOwljYXNlIGh3bW9uX2luX21heF9hbGFybToKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl9pbl9pbnB1dDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIGh3bW9uX2luX21pbl9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luX21heF9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4LCB2YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAogCQkJICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKQogewogCXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWNvbnN0IHN0cnVjdCBmYm5pY19tYWMgKm1hYyA9IGZiZC0mZ3Q7bWFjOwotCWludCBpZDsKIAotCWlkID0gZmJuaWNfaHdtb25fc2Vuc29yX2lkKHR5cGUpOwotCXJldHVybiBpZCAmbHQ7IDAgPyBpZCA6IG1hYy0mZ3Q7Z2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBod21vbl90ZW1wOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW46CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0gewpAQCAtNDUsOCAmIzQzOzE4OCwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyAqZmJuaWNfaHdtb25faW5mb1tdID0gewotCUhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSwKLQlIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLAomIzQzOwlIV01PTl9DSEFOTkVMX0lORk8odGVtcCwKJiM0MzsJCQkgICBIV01PTl9UX0lOUFVUIHwKJiM0MzsJCQkgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHwKJiM0MzsJCQkgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHwKJiM0MzsJCQkgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLAomIzQzOwlIV01PTl9DSEFOTkVMX0lORk8oaW4sCiYjNDM7CQkJICAgSFdNT05fSV9JTlBVVCB8CiYjNDM7CQkJICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8CiYjNDM7CQkJICAgSFdNT05fSV9NQVggfCBIV01PTl9JX01BWF9BTEFSTSksCiAJTlVMTAogfTsKIApAQCAtNTcsMjUgJiM0MzsyMDcsODEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGlwX2luZm8gZmJuaWNfY2hpcF9pbmZvID0gewogCiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIHsKJiM0MzsJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CiAJaWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSkKIAkJcmV0dXJuOwogCi0JZmJkLSZndDtod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLSZndDtkZXYsICYjMzQ7ZmJuaWMmIzM0OywKLQkJCQkJCSAgICAgZmJkLCAmYW1wO2ZibmljX2NoaXBfaW5mbywKLQkJCQkJCSAgICAgTlVMTCk7Ci0JaWYgKElTX0VSUihmYmQtJmd0O2h3bW9uKSkgewomIzQzOwkvKiBTZWVkIGNhY2hlIHdpdGggc2VudGluZWwgc28gdGhlIGZpcnN0IHJlYWQgYWx3YXlzIHJlZnJlc2hlcy4gKi8KJiM0MzsJZmJkLSZndDtod21vbl9jYWNoZS50ZW1wX21kZWcgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTsKJiM0MzsJZmJkLSZndDtod21vbl9jYWNoZS52b2x0X212ID0gRkJOSUNfU0VOU09SX05PX0RBVEE7CiYjNDM7CiYjNDM7CWh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtJmd0O2RldiwgJiMzNDtmYm5pYyYjMzQ7LCBmYmQsCiYjNDM7CQkJCQkJJmFtcDtmYm5pY19jaGlwX2luZm8sIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKGh3bW9uKSkgewogCQlkZXZfbm90aWNlKGZiZC0mZ3Q7ZGV2LAogCQkJICAgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgaHdtb24gZGV2aWNlICVwZVxuJiMzNDssCi0JCQkgICBmYmQtJmd0O2h3bW9uKTsKLQkJZmJkLSZndDtod21vbiA9IE5VTEw7CiYjNDM7CQkJICAgaHdtb24pOwomIzQzOwkJcmV0dXJuOwogCX0KJiM0MzsKJiM0MzsJV1JJVEVfT05DRShmYmQtJmd0O2h3bW9uLCBod21vbik7CiB9CiAKIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwogCWlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC0mZ3Q7aHdtb24pCiAJCXJldHVybjsKIAotCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC0mZ3Q7aHdtb24pOwotCWZiZC0mZ3Q7aHdtb24gPSBOVUxMOwomIzQzOwlod21vbiA9IGZiZC0mZ3Q7aHdtb247CiYjNDM7CS8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMCiYjNDM7CSAqIGFuZCB3YWl0IGZvciBhbnkgaW4tZmxpZ2h0IEZXIG1haWxib3ggSVJRIGhhbmRsZXIgdG8gZmluaXNoIHNvIGl0CiYjNDM7CSAqIGNhbm5vdCBkZXJlZmVyZW5jZSB0aGUgaHdtb24gZGV2aWNlIGFmdGVyIHdlIHVucmVnaXN0ZXIgaXQuCiYjNDM7CSAqLwomIzQzOwlXUklURV9PTkNFKGZiZC0mZ3Q7aHdtb24sIE5VTEwpOwomIzQzOwlzeW5jaHJvbml6ZV9pcnEoZmJkLSZndDtmd19tc2l4X3ZlY3Rvcik7CiYjNDM7CiYjNDM7CWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKQomIzQzO3sKJiM0MzsJZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTsKJiM0MzsJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CXMzMiBhdHRyID0gLTE7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaWQpIHsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVEVNUDoKJiM0MzsJCXR5cGUgPSBod21vbl90ZW1wOwomIzQzOwomIzQzOwkJaWYgKHZhbCAmbHQ7PSBmYmQtJmd0O2Z3X2NhcC50ZW1wLm1pbikKJiM0MzsJCQlhdHRyID0gaHdtb25fdGVtcF9taW5fYWxhcm07CiYjNDM7CQllbHNlIGlmICh2YWwgJmd0Oz0gZmJkLSZndDtmd19jYXAudGVtcC5jcml0KQomIzQzOwkJCWF0dHIgPSBod21vbl90ZW1wX2NyaXRfYWxhcm07CiYjNDM7CQllbHNlIGlmICh2YWwgJmd0Oz0gZmJkLSZndDtmd19jYXAudGVtcC5tYXgpCiYjNDM7CQkJYXR0ciA9IGh3bW9uX3RlbXBfbWF4X2FsYXJtOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6CiYjNDM7CQl0eXBlID0gaHdtb25faW47CiYjNDM7CiYjNDM7CQlpZiAodmFsICZsdDs9IGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWluKQomIzQzOwkJCWF0dHIgPSBod21vbl9pbl9taW5fYWxhcm07CiYjNDM7CQllbHNlIGlmICh2YWwgJmd0Oz0gZmJkLSZndDtmd19jYXAudm9sdC5tYXgpCiYjNDM7CQkJYXR0ciA9IGh3bW9uX2luX21heF9hbGFybTsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBhaXIgd2l0aCBXUklURV9PTkNFKCkgaW4gZmJuaWNfaHdtb25fdW5yZWdpc3RlcigpLiBTa2lwIHRoZQomIzQzOwkgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9ybgomIzQzOwkgKiBkb3duLgomIzQzOwkgKi8KJiM0MzsJaHdtb24gPSBSRUFEX09OQ0UoZmJkLSZndDtod21vbik7CiYjNDM7CWlmIChhdHRyICZndDs9IDAgJmFtcDsmYW1wOyBod21vbikKJiM0MzsJCWh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwppbmRleCA1M2I3YTkzOGI0YzI3Ny4uZmJhMmUyZWZhZWI4YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwpAQCAtODk5LDYwICYjNDM7ODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCwKIAkJCSAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpOwogfQogCi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsCi0JCQkJICAgICBsb25nICp2YWwpCi17Ci0Jc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7Ci0JaW50IGVyciA9IDA7Ci0JczMyICpzZW5zb3I7Ci0KLQlmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7Ci0JaWYgKCFmd19jbXBsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN3aXRjaCAoaWQpIHsKLQljYXNlIEZCTklDX1NFTlNPUl9URU1QOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGlkZWdyZWVzOwotCQlicmVhazsKLQljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGl2b2x0czsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihmYmQtJmd0O2RldiwKLQkJCSYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcbiYjMzQ7LAotCQkJZXJyKTsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtmd19jbXBsLSZndDtkb25lLCAxMCAqIEhaKSkgewotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXG4mIzM0Oyk7Ci0JCWVyciA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gZXhpdF9jbGVhbnVwOwotCX0KLQotCS8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqLwotCWlmIChmd19jbXBsLSZndDtyZXN1bHQpIHsKLQkJZXJyID0gZndfY21wbC0mZ3Q7cmVzdWx0OwotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxuJiMzNDssCi0JCQlfX2Z1bmNfXywgZXJyKTsKLQkJZ290byBleGl0X2NsZWFudXA7Ci0JfQotCi0JKnZhbCA9ICpzZW5zb3I7Ci1leGl0X2NsZWFudXA6Ci0JZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTsKLWV4aXRfZnJlZToKLQlmYm5pY19md19wdXRfY21wbChmd19jbXBsKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0gewogCS5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLAogCS5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluaywKQEAgLTk2Niw3ICYjNDM7OTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7CiAJLmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLAogCS5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsCiAJLmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLAotCS5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYywKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKaW5kZXggMTBmMzBlMGU4ZjY5MTYuLmJkZTJkYWE2NTY0NTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKQEAgLTEzNyw4ICYjNDM7MTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7CiAKIAl2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogCXZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpOwotCi0JaW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7CiB9OwogCiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIE5ldyBIYXJkd2FyZSBNb25pdG9yaW5nIFBhdGNoIGZvciBgZmJuaWNgKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBuZXcgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyBoYXJkd2FyZSBtb25pdG9yaW5nIGZlYXR1cmVzIHRvIHRoZSBgZmJuaWNgIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBncmVhdC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGZibmljX2h3bW9uLmNgLCB3aGVyZSB0aGV5JiMzOTt2ZSBhZGRlZCB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQsIGFuZCBhcmUgY2FjaGluZyB2YWx1ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBlZmZpY2llbnQuIFRoZXkmIzM5O3ZlIGFsc28gaW1wbGVtZW50ZWQgYSBuZXcgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgc3BlY2lmaWNhbGx5IGZvciAmIzM0O3RocmVzaG9sZCBleGNlZWRlZCYjMzQ7IGV2ZW50cyDigJMgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQ7IGVycm9yIGhhbmRsaW5nIGFuZCByZWNvdmVyeSBpbiB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGNhbiBiZSB0cmlja3kuIEFuZCB0aGUgZHJpdmVyIGl0c2VsZiBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljYCwgY29uZmlybWluZyBteSBtZW1vcnkgb2YgaXRzIGxvY2F0aW9uLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZTogY2FuIHdlICphY3R1YWxseSogcmVhY2ggYW5kIHZhbGlkYXRlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHk/IFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgd2UgaW50ZXJwcmV0IGZpcm13YXJlIG1lc3NhZ2VzIGFuZCBpbnRyb2R1Y2VzIG5ldyByZWFkIGZ1bmN0aW9uczogYGZibmljX2h3bW9uX3JlYWRgLCBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLiBQbHVzLCB0aGVyZeKAmXMgdGhpcyBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YCB3aGljaCBpcyBjYWxsZWQgZnJvbSB0aGUgdGhyZXNob2xkIHBhcnNlci4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgdHJpZ2dlcmluZyBhbGFybXMsIG9yIGF0IGxlYXN0IHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2suCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBmYm5pY2AgZXZlbiAqYWNjZXNzaWJsZSogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgTWV0YSYjMzk7cyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLiBTbywgaXQmIzM5O3MgYSBQQ0kgZGV2aWNlLiBJIHdvbmRlciBpZiB3ZSBjYW4gZnV6eiB0aGlzIGVhc2lseS4gU3l6a2FsbGVyIGlzIGEgcG93ZXJmdWwgdG9vbCwgYnV0IG5ldHdvcmsgZHJpdmVycyBhcmUgdXN1YWxseSB0ZXN0ZWQgdmlhIG5ldGxpbmsgb3Igc29ja2V0IGludGVyZmFjZXMuIFRoZSBpZGVhbCBzY2VuYXJpbyB3b3VsZCBiZSBhIGRlZGljYXRlZCBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIGBmYm5pY2AsIGJ1dCwgaXMgdGhlcmUgYSB3YXkgdG8gZnV6eiBQQ0kgZGV2aWNlcyB0aHJvdWdoIHN5emthbGxlciBpZiB0aGV5IGFyZSBlbXVsYXRlZCBvciB3aXRoIHZoY2kvUENJIGZ1enppbmc/IFdhaXQsIHN5emthbGxlciBoYXMgYSBQQ0kgZnV6emVyISBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQuCgpGaW5hbGx5LCBiZWZvcmUgSSBnZXQgbG9zdCBpbiB0aGUgd2VlZHMgb2YgZnV6emluZywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCBmb3IgYENPTkZJR19GQk5JQ2AgYW5kIGRldGVybWluZSBpZiBpdCYjMzk7cyBhbHJlYWR5IHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGRzIG9yIGlmIHdlJiMzOTtsbCBoYXZlIHRvIGVuYWJsZSBpdCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkJOSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBFdGhlcm5ldCBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBicm9hZCwgdG9wLWxldmVsIHNldHRpbmdzLCBwZXJoYXBzIG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgZW50aXJlIHN1YnN5c3RlbSwgYW5kIHByb2JhYmx5IHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIsIG1vcmUgc3BlY2lmaWMgS2NvbmZpZyBmaWxlcyBmb3IgaW5kaXZpZHVhbCBFdGhlcm5ldCBjb250cm9sbGVycyBvciBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoaWVyYXJjaHkgYW5kIGRlcGVuZGVuY2llcyBsYWlkIG91dCBoZXJlIOKAkyBob3cgZGlmZmVyZW50IGNvbnRyb2xsZXIgdHlwZXMgYXJlIHNlbGVjdGVkLCBob3cgY29tbW9uIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIEV0aGVybmV0IGNvbmZpZ3VyYXRpb24gc3BhY2UgbG9va3MgbGlrZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIHJlZHVuZGFuY2llcywgb3IgYXJlYXMgd2hlcmUgSSBjYW4gcG90ZW50aWFsbHkgc3RyZWFtbGluZSB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgd2hvbGUgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsgaXMgcHV0IHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkJOSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfTUVUQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTI5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgZmJuaWMgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfRkJOSUNgLCB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgbmV3IHBhdGNoIGludHJvZHVjZXMgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAsIGFuZCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLiBSaWdodCwgdGhhdCBwYXJzZXIgaXMgZGVmaW5pdGVseSB0cmlnZ2VyZWQgYnkgZmlybXdhcmUgbWVzc2FnZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgdGhvc2UgZmlybXdhcmUgbWVzc2FnZXM/IElmIFN5emthbGxlciBpcyBmdXp6aW5nIFBDSSwgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW5qZWN0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gRE1BL01NSU8gcmVhZHMsIHdoaWNoIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIHZhbGlkIGZpcm13YXJlIG1lc3NhZ2VzLiBJdCYjMzk7cyBwbGF1c2libGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aCB0byBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgIGl0c2VsZiBhbmQgY29uZmlybSB0aGF0IFN5emthbGxlciBjYW4sIGluIGZhY3QsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbnB1dHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBpbnZva2VkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2NTA6c3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY1MS1cdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTY5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzIyLVx0XHRcdCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYzoxNzIzOlx0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTcyNC1cdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGZibmljX2Z3X3Rsdl9wYXJzZXJgIFVzYWdlKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBmYm5pY19md190bHZfcGFyc2VyYCBtb2R1bGUsIHJlY29nbml6aW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGEgc3BlY2lmaWMgZGF0YSBmb3JtYXQuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aGVyZSogdGhpcyBwYXJzZXIgaXMgYmVpbmcgdXRpbGl6ZWQuIEVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGggYW5kIGRlcGVuZGVuY3kgdHJlZS4gVW5kZXJzdGFuZGluZyBpdHMgY29uc3VtZXJzIGlzIGNydWNpYWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY2VudHJhbCBjb21wb25lbnQsIG9yIHNvbWV0aGluZyBtb3JlIGxvY2FsaXplZD8gSWRlbnRpZnlpbmcgZXZlcnkgaW5zdGFuY2Ugb2YgYGZibmljX2Z3X3Rsdl9wYXJzZXJgIGluIHVzZSBpcyB0aGUgZmlyc3QsIGVzc2VudGlhbCBzdGVwLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgY3Jvc3MtcmVmZXJlbmNpbmcsIHByb2JhYmx5IGEgZ3JlcCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gY2FsbC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgd2hhdGV2ZXIgdGhleSBtYXkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX2Z3X3Rsdl9wYXJzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xNjUwPXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTM6c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjk0LVx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xNzMwPXN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3J4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzY2LVx0XHQvKiBJZiBwYXJzaW5nIGZhaWxzIGR1bXAgY29udGVudHMgb2YgbWVzc2FnZSB0byBkbWVzZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE3Njc6XHRcdGVyciA9IGZibmljX3Rsdl9tc2dfcGFyc2UoZmJkLCBtc2csIGZibmljX2Z3X3Rsdl9wYXJzZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE3NjgtXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0OTIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZCTklDIFBhdGNoJiMzOTtzIEZ1enppbmcgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgdnVsbmVyYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGZ1enphYmxlLiBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGBmYm5pY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG1haWxib3gsIGFuZCB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZyAoaHdtb24pIGFzcGVjdHMuCgpGaXJzdCwgSSBzZWUgdGhpcyBpcyB1c2VkIGluIGBmYm5pY19tYnhfcHJvY2Vzc19yeF9tc2dzYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgcHJvY2Vzc2VzIG1lc3NhZ2VzIGNvbWluZyAqZnJvbSogdGhlIGhhcmR3YXJlLiBUaGUgbWFpbGJveCBpdHNlbGYgaXMgbGlrZWx5IHBvcHVsYXRlZCB0aHJvdWdoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIG9yIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKSwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZGF0YSBmbG93aW5nIGZyb20gdGhlIGRldmljZSB0byB0aGUga2VybmVsLiBUaGlzIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBJIGtub3cgU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgaXMgcGFydGljdWxhcmx5IHdlbGwtc3VpdGVkIHRvIHBva2luZyBhdCB0aGVzZSBraW5kcyBvZiBpbnRlcmZhY2VzLgoKVGhlbiBJIG5vdGUgdGhlIGNoYW5nZXMgdG8gdGhlIGh3bW9uIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBmYm5pY19od21vbl9yZWFkYCBhbmQgKmFkZHMqIGBmYm5pY19od21vbl90ZW1wX3JlYWRgIGFuZCBgZmJuaWNfaHdtb25faW5fcmVhZGAuIFRob3NlIGFyZSBhbGwgYWNjZXNzZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIGtub3cgU3l6a2FsbGVyIGlzIHF1aXRlIGFkZXB0IGF0IGludGVyYWN0aW5nIHdpdGggc3lzZnMgZmlsZXMsIHNvIGl0IGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zIGVhc2lseS4gVGhhdCBgZmJuaWNfaHdtb25fcmVhZGAgZnVuY3Rpb24gY291bGQgYmUgdGhlIGVudHJ5IHBvaW50IHRvIGEgbG90IG9mIGludGVyZXN0aW5nIGxvZ2ljLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRvIGVuYWJsZSB0aGlzIGFyZWEsIEkgbmVlZCBgQ09ORklHX0ZCTklDYCwgb2J2aW91c2x5LiBBbHNvLCBgQ09ORklHX0hXTU9OYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgZmJuaWNfaHdtb25fcmVnaXN0ZXJgIGNoZWNrcyBgSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTilgLiBJbnRlcmVzdGluZ2x5LCBldmVuIHRob3VnaCBgZmJuaWNfaHdtb25fcmVnaXN0ZXJgIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgaXQgKmNoZWNrcyogYEhXTU9OYCB2aWEgYSBjb25kaXRpb25hbCByZXR1cm4hIFNvLCBJIG5lZWQgYEhXTU9OYCBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIGlzIGFjdGl2ZS4KCk5vdyB0byBkZWZpbmUgdGhlIGF0dGFjayBzdXJmYWNlLiBGcm9tIHRoZSBjb2RlLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBwdXJwb3NlcyBhcmU6CiogICBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgIChsaWtlbHkgZmlybXdhcmUgcGFyc2luZywgaW50ZXJlc3RpbmcgZm9yIGNyYWZ0ZWQgbWVzc2FnZXMpCiogICBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgLCBhbmQgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgKHRoZXNlIHNlZW0gbGlrZSBsb3ctaGFuZ2luZyBmcnVpdCwgdGhleSByZWFkIHZhbHVlcyBmcm9tIGh3bW9uIGludGVyZmFjZSkKKiAgIGBmYm5pY19od21vbl9yZWFkYCAodGhlIHBvdGVudGlhbGx5IGltcG9ydGFudCBmdW5jdGlvbiwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgd2hpY2ggZmlsZSBpdCYjMzk7cyBpbiB0byBlbnN1cmUgaXQgYWxpZ25zIHdpdGggbXkgYXNzZXNzbWVudCkKCkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIGBmYm5pY19od21vbl9yZWFkYCBpcyBpbmRlZWQgaW4gYGZibmljX2h3bW9uLmNgIHNvIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pY19od21vbl9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz0xNz1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjgxOnN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy04Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjkwOnN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTkxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM9OTk9c3RhdGljIGludCBmYm5pY19od21vbl90ZW1wX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMDQtXHRjYXNlIGh3bW9uX3RlbXBfbWluOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwNTpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTA2LVx0Y2FzZSBod21vbl90ZW1wX21heDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMDc6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEwOC1cdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwOTpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTExMC1cdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTI2LVx0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjc6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTI4LVx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjk6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTMwLVx0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTMxOlx0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMzItXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jPTEzNz1zdGF0aWMgaW50IGZibmljX2h3bW9uX2luX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNDItXHRjYXNlIGh3bW9uX2luX21pbjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxNDM6XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE0NC1cdGNhc2UgaHdtb25faW5fbWF4OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjE0NTpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTQ2LVx0Y2FzZSBod21vbl9pbl9pbnB1dDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTYxLVx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTYyOlx0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2My1cdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjE2NDpcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNjUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxNzA6c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNzEtXHRcdFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz0xODU9c3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE4Ni1cdC5pc192aXNpYmxlID0gZmJuaWNfaHdtb25faXNfdmlzaWJsZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxODc6XHQucmVhZCA9IGZibmljX2h3bW9uX3JlYWQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTg4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRkJOSUMgSGFyZHdhcmUgTW9uaXRvcmluZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcGAsIGBmYm5pY19od21vbl90ZW1wX3JlYWRgLCBgZmJuaWNfaHdtb25faW5fcmVhZGAsIGBmYm5pY19od21vbl9zZW5zb3JfcmVhZGAsIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgLCBhbmQgYGZibmljX2h3bW9uX3JlYWRgLiBUaGVzZSBhcmUgY2xlYXJseSBwYXJ0IG9mIHRoZSBGQk5JQyBoYXJkd2FyZSBtb25pdG9yaW5nIGluZnJhc3RydWN0dXJlLCBsaWtlbHkgZGVhbGluZyB3aXRoIHRlbXBlcmF0dXJlLCB2b2x0YWdlLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgc2Vuc29yIGRhdGEgcmVsYXRlZCB0byB0aGUgRkJOSUMgbmV0d29yayBpbnRlcmZhY2UgY2FyZC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8ga25vdyBpZiBgQ09ORklHX0ZCTklDYCBpcyBkZWZpbmVkLiBBaCwgeWVzLCBpdCYjMzk7cyBhIHRyaXN0YXRlLCBzbyBgRkJOSUNgIGlzIHRoZSBzeW1ib2wgdXNlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KClJpZ2h0LCBzbyBgZmJuaWNfaHdtb25fcmVnaXN0ZXJgIGlzIGRlZmluZWQgaW4gYGZibmljX2h3bW9uLmNgLiBMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGQk5JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MTg9aWYgTkVUX1ZFTkRPUl9NRVRBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc6MjA6Y29uZmlnIEZCTklDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkNoZWNraW5nIG9uIE5ldHdvcmsgVmVuZG9yIE1ldGFkYXRhKioKCk9rYXksIHNvIEkmIzM5O20gcHV0dGluZyB0b2dldGhlciB0aGlzIG92ZXJ2aWV3IGFuZCByZWFsaXplZCBJIGdsb3NzZWQgb3ZlciBzb21ldGhpbmcgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBJJiMzOTt2ZSBnb3QgYE5FVF9WRU5ET1JfTUVUQWAgaW4gbXkgbm90ZXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQmIzM5O3MgaGFuZGxlZCBjb3JyZWN0bHkuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIG1pc3MgdGhlc2UgbGl0dGxlIGRlcGVuZGVuY2llcy4gUmlnaHQgbm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE5FVF9WRU5ET1JfTUVUQWAgaXMgZWl0aGVyIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIG9yIGVsc2UgY2xlYXJseSBub3RlIHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gZW5hYmxlIGl0IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIHByb2plY3QuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgc2VlIHdoYXQgdGhlIHN0YXR1cyBpcy4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTctXHRib29sIFwmIzM0O01ldGEgUGxhdGZvcm1zIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRkJOSUMgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBoZXJlLiBJdCBsb29rcyBsaWtlIGBORVRfVkVORE9SX01FVEFgLCBgRkJOSUNgLCBhbmQgYEhXTU9OYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUuIFNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGJ1aWxkIGEgY29uZmlndXJhdGlvbiBhcnJheSBsaWtlOiBgWyYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssICYjMzQ7RkJOSUMmIzM0OywgJiMzNDtIV01PTiYjMzQ7XWAuIFRoYXQgc2V0cyB0aGUgc3RhZ2UuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGZibmljX2h3bW9uYCBpbnRlcmFjdGlvbnMgYmVjYXVzZSBvZiB0aGVpciBwb3RlbnRpYWwgZm9yIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MuIEkmIzM5O20gemVyb2luZyBpbiBvbiBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgIHRvIHNlZSBpZiBpdCYjMzk7cyByZWFjaGFibGUuIEl0IGFwcGVhcnMgaXQgaXMsIGluZGlyZWN0bHksIHRocm91Z2ggYSBjaGFpbjogYGZibmljX2h3bW9uX3RlbXBfcmVhZGAsIGBmYm5pY19od21vbl9pbl9yZWFkYCwgYW5kIGBmYm5pY19od21vbl9yZWFkYCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyB0aGUgYGh3bW9uX29wcy5yZWFkYCBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBzeXNmcyByZWFkcyBvbiB0aGUgaHdtb24gZGV2aWNlLiBUaGlzIGlzIGEgZ29vZCBzaWduIGZvciBmdXp6aW5nLCBhbmQgYSBsaWtlbHkgYXZlbnVlIGZvciBleHBsb2l0YXRpb24uCgpPbiBhIGRpZmZlcmVudCB2ZWN0b3IsIEkgaGF2ZSB0aGUgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaXJtd2FyZSBtZXNzYWdlcywgb3IgbWFpbGJveC4gVGhpcyBhbHNvIHNlZW1zIHRvIGJlIGEgc29saWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBjbGVhcmx5IGZ1bmN0aW9uYWwuCgpNeSBjdXJyZW50IGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCAoZmlybXdhcmUgbWFpbGJveCkKKiAgIGBmYm5pY19od21vbl90ZW1wX3JlYWRgCiogICBgZmJuaWNfaHdtb25faW5fcmVhZGAKKiAgIGBmYm5pY19od21vbl9zZW5zb3JfcmVhZGAgKHJlYWNoYWJsZSB2aWEgYGh3bW9uYCBkZXZpY2UpCiogICBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YAoqICAgYGZibmljX2h3bW9uX3JlYWRgCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCB0byBzZWUgaWYgaXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgaXQgaXMuIFRoZW4gbGV0JiMzOTtzIHZlcmlmeSBpZiBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YCBpcyBleHBvcnRlZCBvciBqdXN0IGdsb2JhbC4gSXQgaXMgZ2xvYmFsIGluIGBmYm5pY19od21vbi5jYCBhbmQgY2FsbGVkIGZyb20gYGZibmljX2Z3LmNgLCB3aGljaCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgYGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwYCB3YXMgbW9kaWZpZWQgdG8gcGFyc2UgdGhyZXNob2xkIHZhbHVlcy4gVGhpcyBub3cgYXBwZWFycyB0byBiZSBhbm90aGVyIHNvbGlkIGZvY3VzIHN5bWJvbCBhbmQgYW4gZXh0ZW5zaW9uIG9mIHRoZSBmaXJtd2FyZSBtZXNzYWdpbmcgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pY19md19wYXJzZV9jYXBfcmVzcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9NTg2PXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfYm1jX2FkZHJzKHU4IGJtY19tYWNfYWRkcltdW0VUSF9BTEVOXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtNjE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjYxNTpzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTYxNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTE2OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY5NS1cdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTY6XHRcdFx0IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjk3LVx0RkJOSUNfVExWX1BBUlNFUihPV05FUlNISVBfUkVTUCwgZmJuaWNfb3duZXJzaGlwX3Jlc3BfaW5kZXgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjc0CgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBmYm5pYyBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2hhbmdlIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCk5leHQsIEkgbmVlZCB0byBsb29rIGludG8gYGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkYCBhbmQgYGZibmljX2h3bW9uX3JlYWRfYWxhcm1gLiBUaGV5JiMzOTtyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYGZibmljX2h3bW9uLmNgLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBteSBGb2N1c1N5bWJvbHMgbGlzdC4gVGhleSB3b3VsZCBiZSBwZXJmZWN0IHRvIGZ1enouCgpMZXQgbWUgc3VtbWFyaXplIHRoZSBzY29wZTogbXkgRm9jdXNTeW1ib2xzIHdpbGwgYmU6CgoqICAgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCAodGhlIGZpcm13YXJlIHJlc3BvbnNlIHBhcnNlcikKKiAgIGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgKHRoZSBtb2RpZmllZCBjYXBhYmlsaXR5IHJlc3BvbnNlKQoqICAgYGZibmljX2h3bW9uX3RlbXBfcmVhZGAgKHRlbXBlcmF0dXJlIHNlbnNvciByZWFkaW5nKQoqICAgYGZibmljX2h3bW9uX2luX3JlYWRgICh2b2x0YWdlIHNlbnNvciByZWFkaW5nKQoqICAgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCAoZ2VuZXJpYyBzZW5zb3IgcmVhZCkKKiAgIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgIChldmVudCBub3RpZmljYXRpb24pCiogICBgZmJuaWNfaHdtb25fcmVhZGAgKGdlbmVyYWwgaHdtb24gcmVhZCkKKiAgIGBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZGAgKHRocmVzaG9sZCByZWFkaW5nIC0gYSBzdGF0aWMgaGVscGVyKQoqICAgYGZibmljX2h3bW9uX3JlYWRfYWxhcm1gIChhbGFybSByZWFkaW5nIC0gYWxzbyBhIHN0YXRpYyBoZWxwZXIpCgpUaGUgdW5kZXJseWluZyByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBmYm5pYyBkcml2ZXImIzM5O3MgaGFyZHdhcmUgbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMsIGluY2x1ZGluZyByZWFkaW5nIGZyb20gbmV3IHN5c2ZzIGludGVyZmFjZXMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlLCBhbmQgcGFyc2luZyBmaXJtd2FyZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRocmVzaG9sZCBleGNlZWRhbmNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByaW1lIHRhcmdldHMuIEkgY2FuIGZ1enogdGhpcyBieSB3cml0aW5nIHRvIHN5c2ZzIGFuZCBlbXVsYXRpbmcgUENJL21haWxib3ggaW50ZXJhY3Rpb25zLiBUaG9zZSBGb2N1c1N5bWJvbHMgYXJlIG15IGF0dGFjayBzdXJmYWNlLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgICAmIzM0O0ZCTklDJiMzNDssCiAgICAmIzM0O0hXTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fdGVtcF9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX2luX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50JiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF9hbGFybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG1vbml0b3JpbmcgdGhyZXNob2xkIGFuZCBhbGFybSBzdXBwb3J0IHRvIHRoZSBmYm5pYyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IHN5c2ZzIHJlYWQgaGFuZGxlcnMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvcnMsIGFuZCBhZGRzIGEgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgZm9yIHRocmVzaG9sZCBleGNlZWRlZCBldmVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9NRVRBJiMzNDssCiAgICAmIzM0O0ZCTklDJiMzNDssCiAgICAmIzM0O0hXTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3AmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fdGVtcF9yZWFkJiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX2luX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50JiMzNDssCiAgICAmIzM0O2ZibmljX2h3bW9uX3JlYWQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQmIzM0OywKICAgICYjMzQ7ZmJuaWNfaHdtb25fcmVhZF9hbGFybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG1vbml0b3JpbmcgdGhyZXNob2xkIGFuZCBhbGFybSBzdXBwb3J0IHRvIHRoZSBmYm5pYyBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IHN5c2ZzIHJlYWQgaGFuZGxlcnMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvcnMsIGFuZCBhZGRzIGEgZmlybXdhcmUgbWVzc2FnZSBwYXJzZXIgZm9yIHRocmVzaG9sZCBleGNlZWRlZCBldmVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjUzLjUyMzIwNzE0NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTM1NTQ1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfTUVUQVwiLFxuICAgIFwiRkJOSUNcIixcbiAgICBcIkhXTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BcIixcbiAgICBcImZibmljX2Z3X3BhcnNlX2NhcF9yZXNwXCIsXG4gICAgXCJmYm5pY19od21vbl90ZW1wX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX2luX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3NlbnNvcl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9ub3RpZnlfZXZlbnRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX2FsYXJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBtb25pdG9yaW5nIHRocmVzaG9sZCBhbmQgYWxhcm0gc3VwcG9ydCB0byB0aGUgZmJuaWMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyByZWFkIGhhbmRsZXJzIGZvciB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3JzLCBhbmQgYWRkcyBhIGZpcm13YXJlIG1lc3NhZ2UgcGFyc2VyIGZvciB0aHJlc2hvbGQgZXhjZWVkZWQgZXZlbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXIncyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6NTMuNTIzMjEzMDc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg0MDgwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNmY4MWE2MjA4MDIyOTE4OWRhMTA5MDJiZGI4MjIzNjA5MmJmYjY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxcbmluZGV4IGQwNzE1Njk1YzQzZTc1Li40YTQ5YzIwZTRhMDE0YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG5AQCAtMjIsMTEgKzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcXG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXFx0XFx0MTI4dVxcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXFx0XFx0NFxcbiBcXG4rc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XFxuK1xcdHMzMiB0ZW1wX21kZWc7XFxuK1xcdHMzMiB2b2x0X212O1xcbit9O1xcbitcXG4gc3RydWN0IGZibmljX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcXG4gXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XFxuIFxcbkBAIC0xODUsNiArMTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcXG4gXFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNzguLjZkY2EzODA3NmQ3YjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xcbkBAIC01NzUsNiArNTc1LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX2Z3X2NhcF9yZXNwX2luZGV4W10gPSB7XFxuIFxcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXFxuIFxcdFxcdFxcdCAgICAgIEZCTklDX0ZXX0NBUF9SRVNQX0NPTU1JVF9NQVhfU0laRSksXFxuIFxcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVgpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYKSxcXG4gXFx0RkJOSUNfVExWX0FUVFJfTEFTVFxcbiB9O1xcbiBcXG5AQCAtNzAyLDYgKzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbiBcXHQvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovXFxuIFxcdGZiZC1cXHUwMDNlZndfY2FwLm5lZWRfYm1jX3RjYW1fcmVpbml0ID0gdHJ1ZTtcXG4gXFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWluID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxcbitcXHRcXHRcXHRcXHRcXHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcXG4rXFx0ZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4gPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxcbitcXHRcXHRcXHRcXHRcXHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcXG4rXFx0ZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXggPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxcbitcXHRcXHRcXHRcXHRcXHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xNjE4LDYgKzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7XFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9MQVNUXFxuK307XFxuK1xcbitzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXFxuK3tcXG4rXFx0Ym9vbCB0aGVybV9leGNlZWRlZCwgdm9sdF9leGNlZWRlZDtcXG4rXFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xcbitcXHRzMzIgdmFsdWU7XFxuK1xcbitcXHR0aGVybV9leGNlZWRlZCA9XFxuK1xcdFxcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTtcXG4rXFx0dm9sdF9leGNlZWRlZCA9XFxuK1xcdFxcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpO1xcbitcXG4rXFx0aWYgKCF0aGVybV9leGNlZWRlZCBcXHUwMDI2XFx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xcbitcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiVGhyZXNob2xkIGV4Y2VlZGVkIG1lc3NhZ2Ugd2l0aCBubyBmbGFnIHNldFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGhlcm1fZXhjZWVkZWQpIHtcXG4rXFx0XFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldiwgXFxcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcXFxuXFxcIiwgdmFsdWUpO1xcbitcXHRcXHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodm9sdF9leGNlZWRlZCkge1xcbitcXHRcXHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpO1xcbitcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiVm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXFxcXG5cXFwiLCB2YWx1ZSk7XFxuK1xcdFxcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksXFxuIFxcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxcbkBAIC0xNjQ2LDYgKzE3MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcXG4gXFx0XFx0XFx0IGZibmljX3RzZW5lX3JlYWRfcmVzcF9pbmRleCxcXG4gXFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX3RzZW5lX3JlYWRfcmVzcCksXFxuK1xcdEZCTklDX1RMVl9QQVJTRVIoU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQLFxcbitcXHRcXHRcXHQgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsXFxuK1xcdFxcdFxcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXFxuIFxcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXFxuIFxcdFxcdFxcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxcbiBcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfbG9nX3JlcSksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYyLi44NzMwMWU2MDgyNTU1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5AQCAtNiw2ICs2LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGltaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IGZibmljX2RldjtcXG5AQCAtNDQsNiArNDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XFxuIFxcdGNoYXIgY29tbWl0W0ZCTklDX0ZXX0NBUF9SRVNQX0NPTU1JVF9NQVhfU0laRV07XFxuIH07XFxuIFxcbisvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGVcXG4rICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XFxuKyAqIHJlZnJlc2hlZC5cXG4rICovXFxuKyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcXHRcXHRcXHRTMzJfTUlOXFxuK1xcbitzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHtcXG4rXFx0czMyIG1pbjtcXG4rXFx0czMyIG1heDtcXG4rXFx0czMyIGNyaXQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgZmJuaWNfZndfY2FwIHtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xcbkBAIC02MCw2ICs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAge1xcbiBcXHR1OFxcdGxpbmtfc3BlZWQ7XFxuIFxcdHU4XFx0bGlua19mZWM7XFxuIFxcdHUzMlxcdGFudGlfcm9sbGJhY2tfdmVyc2lvbjtcXG4rXFx0c3RydWN0IGZibmljX3RocmVzaG9sZCB0ZW1wO1xcbitcXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XFxuQEAgLTIxMiw2ICsyMjcsNyBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUFxcdFxcdFxcdD0gMHgzOSxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUVxcdFxcdFxcdD0gMHgzQyxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1BcXHRcXHQ9IDB4M0QsXFxuK1xcdEZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9MT0dfU0VORF9MT0dTX1JFUVxcdFxcdD0gMHg0MyxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUVxcdFxcdFxcdD0gMHg0NCxcXG4gXFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFU1BcXHRcXHRcXHQ9IDB4NDUsXFxuQEAgLTI0Miw2ICsyNTgsMTIgQEAgZW51bSB7XFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlxcdFxcdFxcdD0gMHgxMSxcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXFx0XFx0PSAweDEyLFxcbiBcXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cXHRcXHQ9IDB4MTUsXFxuK1xcdC8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXFx0XFx0XFx0PSAweDE4LFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFxcdFxcdFxcdD0gMHgxOSxcXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXFx0XFx0XFx0PSAweDFhLFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTlxcdFxcdFxcdD0gMHgxYixcXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcXHRcXHRcXHQ9IDB4MWMsXFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX01TR19NQVhcXG4gfTtcXG4gXFxuQEAgLTI3NSw2ICsyOTcsMTQgQEAgZW51bSB7XFxuIFxcdEZCTklDX0ZXX1RTRU5FX01TR19NQVhcXG4gfTtcXG4gXFxuK2VudW0ge1xcbitcXHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXFx0PSAweDAsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBR1xcdD0gMHgxLFxcbitcXHRGQk5JQ19GV19UU0VORV9USEVSTUFMXFx0XFx0XFx0PSAweDIsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VcXHRcXHRcXHQ9IDB4MyxcXG4rXFx0RkJOSUNfRldfVFNFTkVfRVhDRUVERURfTVNHX01BWCxcXG4rfTtcXG4rXFxuIGVudW0ge1xcbiBcXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1xcdFxcdFxcdD0gMHgwLFxcbiBcXHRGQk5JQ19GV19PV05FUlNISVBfVElNRVxcdFxcdFxcdD0gMHgxLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcXG5pbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuQEAgLTIsNDEgKzIsMTg0IEBAXFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHdtb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJmYm5pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZmJuaWNfbWFjLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxcbitzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XFxuK1xcdHJldHVybiAwNDQ0O1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXFx1MDAyNmZiZC1cXHUwMDNlaHdtb25fY2FjaGU7XFxuK1xcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0czMyICpjYWNoZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdGNhY2hlZCA9IFxcdTAwMjZjYWNoZS1cXHUwMDNldGVtcF9tZGVnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4rXFx0XFx0Y2FjaGVkID0gXFx1MDAyNmNhY2hlLVxcdTAwM2V2b2x0X212O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXFx1MDAzZWxhc3RfcmVhZCkpIHtcXG4rXFx0XFx0KnZhbCA9ICpjYWNoZWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuK1xcdGlmICghZndfY21wbClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4rXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbitcXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cXG4rXFx0Y2FjaGUtXFx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbitcXHRjYWNoZS1cXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4rXFx0Y2FjaGUtXFx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XFxuK1xcbitcXHQqdmFsID0gKmNhY2hlZDtcXG4rZXhpdF9jbGVhbnVwOlxcbitcXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xcbitleGl0X2ZyZWU6XFxuK1xcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuK1xcbitcXHQqdmFsID0gdGhyO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuIHtcXG4tXFx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcCBcXHUwMDI2XFx1MDAyNiBhdHRyID09IGh3bW9uX3RlbXBfaW5wdXQpXFxuLVxcdFxcdHJldHVybiAwNDQ0O1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl9pbiBcXHUwMDI2XFx1MDAyNiBhdHRyID09IGh3bW9uX2luX2lucHV0KVxcbi1cXHRcXHRyZXR1cm4gMDQ0NDtcXG4rXFx0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbiBcXG4rXFx0KnZhbCA9IGEgXFx1MDAzZT0gYjtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25faW5fbWluOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5fbWF4OlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuK1xcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX2luX2lucHV0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXFx1MDAzZW1hYztcXG4tXFx0aW50IGlkO1xcbiBcXG4tXFx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XFxuLVxcdHJldHVybiBpZCBcXHUwMDNjIDAgPyBpZCA6IG1hYy1cXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBod21vbl90ZW1wOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl9pbjpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcXG4tXFx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxcbi1cXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxcbitcXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9JTlBVVCB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxcbitcXHRcXHRcXHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcXG4rXFx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxcbitcXHRcXHRcXHQgICBIV01PTl9JX0lOUFVUIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxcbiBcXHROVUxMXFxuIH07XFxuIFxcbkBAIC01NywyNSArMjA3LDgxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcXG4gXFxuIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xcbitcXG4gXFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZmJkLVxcdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVxcdTAwM2VkZXYsIFxcXCJmYm5pY1xcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmJkLCBcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbi1cXHRpZiAoSVNfRVJSKGZiZC1cXHUwMDNlaHdtb24pKSB7XFxuK1xcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcXG4rXFxuK1xcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXFx1MDAzZWRldiwgXFxcImZibmljXFxcIiwgZmJkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihod21vbikpIHtcXG4gXFx0XFx0ZGV2X25vdGljZShmYmQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICBmYmQtXFx1MDAzZWh3bW9uKTtcXG4tXFx0XFx0ZmJkLVxcdTAwM2Vod21vbiA9IE5VTEw7XFxuK1xcdFxcdFxcdCAgIGh3bW9uKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGZiZC1cXHUwMDNlaHdtb24sIGh3bW9uKTtcXG4gfVxcbiBcXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcXG4rXFxuIFxcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cXHUwMDNlaHdtb24pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC1cXHUwMDNlaHdtb24pO1xcbi1cXHRmYmQtXFx1MDAzZWh3bW9uID0gTlVMTDtcXG4rXFx0aHdtb24gPSBmYmQtXFx1MDAzZWh3bW9uO1xcbitcXHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxcbitcXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxcbitcXHQgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LlxcbitcXHQgKi9cXG4rXFx0V1JJVEVfT05DRShmYmQtXFx1MDAzZWh3bW9uLCBOVUxMKTtcXG4rXFx0c3luY2hyb25pemVfaXJxKGZiZC1cXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xcbitcXG4rXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pO1xcbit9XFxuK1xcbit2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpXFxuK3tcXG4rXFx0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcXG4rXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHMzMiBhdHRyID0gLTE7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdHR5cGUgPSBod21vbl90ZW1wO1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDNjPSBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcXG4rXFx0XFx0XFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0KVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxcbitcXHRcXHR0eXBlID0gaHdtb25faW47XFxuK1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2M9IGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluKVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGVcXG4rXFx0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cXG4rXFx0ICogZG93bi5cXG4rXFx0ICovXFxuK1xcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cXHUwMDNlaHdtb24pO1xcbitcXHRpZiAoYXR0ciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGh3bW9uKVxcbitcXHRcXHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuaW5kZXggNTNiN2E5MzhiNGMyNzcuLmZiYTJlMmVmYWViOGM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuQEAgLTg5OSw2MCArODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcXG4gXFx0XFx0XFx0ICAgIFRNSV9TVEFUX1RYX1BBQ0tFVF85MjE3X01BWF9CWVRFUyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCxcXG4tXFx0XFx0XFx0XFx0ICAgICBsb25nICp2YWwpXFxuLXtcXG4tXFx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XFxuLVxcdGludCBlcnIgPSAwO1xcbi1cXHRzMzIgKnNlbnNvcjtcXG4tXFxuLVxcdGZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTtcXG4tXFx0aWYgKCFmd19jbXBsKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdHN3aXRjaCAoaWQpIHtcXG4tXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcXG4tXFx0XFx0c2Vuc29yID0gXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4tXFx0XFx0c2Vuc29yID0gXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gZXhpdF9mcmVlO1xcbi1cXHR9XFxuLVxcbi1cXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRlcnIpO1xcbi1cXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuLVxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuLVxcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4tXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbi1cXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbi1cXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4tXFx0fVxcbi1cXG4tXFx0KnZhbCA9ICpzZW5zb3I7XFxuLWV4aXRfY2xlYW51cDpcXG4tXFx0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcXG4tZXhpdF9mcmVlOlxcbi1cXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xcbiBcXHQuaW5pdF9yZWdzID0gZmJuaWNfbWFjX2luaXRfcmVncyxcXG4gXFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxcbkBAIC05NjYsNyArOTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7XFxuIFxcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcXG4gXFx0LmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYyxcXG4gXFx0LmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLFxcbi1cXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcXG5pbmRleCAxMGYzMGUwZThmNjkxNi4uYmRlMmRhYTY1NjQ1N2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcXG5AQCAtMTM3LDggKzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xcbiBcXG4gXFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gXFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XFxuLVxcbi1cXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcXG4gfTtcXG4gXFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjo1NC4yMjI0NTQ3OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTIzNjI4Mjc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX01FVEFcIixcbiAgICBcIkZCTklDXCIsXG4gICAgXCJIV01PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwXCIsXG4gICAgXCJmYm5pY19md19wYXJzZV9jYXBfcmVzcFwiLFxuICAgIFwiZmJuaWNfaHdtb25fdGVtcF9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9pbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9zZW5zb3JfcmVhZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50XCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fcmVhZF9hbGFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgbW9uaXRvcmluZyB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQgdG8gdGhlIGZibmljIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgc3lzZnMgcmVhZCBoYW5kbGVycyBmb3IgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2Ugc2Vuc29ycywgYW5kIGFkZHMgYSBmaXJtd2FyZSBtZXNzYWdlIHBhcnNlciBmb3IgdGhyZXNob2xkIGV4Y2VlZGVkIGV2ZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgaHdtb24gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBtYWlsYm94IHByb2Nlc3NpbmcsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBlbXVsYXRlZCBQQ0kvbWFpbGJveCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzZmODFhNjIwODAyMjkxODlkYTEwOTAyYmRiODIyMzYwOTJiZmI2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG5pbmRleCBkMDcxNTY5NWM0M2U3NS4uNGE0OWMyMGU0YTAxNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7XG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXHRcdDEyOHVcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXHRcdDRcbiBcbitzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4rXHRzMzIgdGVtcF9tZGVnO1xuK1x0czMyIHZvbHRfbXY7XG4rfTtcbitcbiBzdHJ1Y3QgZmJuaWNfZGV2IHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkO1xuIFx0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgKzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcbiBcbiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbmluZGV4IDI4M2QyNWZhZTc5ZTc4Li42ZGNhMzgwNzZkN2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNTc1LDYgKzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xuIFx0RkJOSUNfVExWX0FUVFJfU1RSSU5HKEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUixcbiBcdFx0XHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxuIFx0RkJOSUNfVExWX0FUVFJfVTMyKEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTiksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQpLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXG4gXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4gfTtcbiBcbkBAIC03MDIsNiArNzA3LDIyIEBAIHN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3Aodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHQvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovXG4gXHRmYmQtXHUwMDNlZndfY2FwLm5lZWRfYm1jX3RjYW1fcmVpbml0ID0gdHJ1ZTtcbiBcbitcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4gPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5dLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXggPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0ID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sXG4rXHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuK1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbiA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTl0sXG4rXHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuK1x0ZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWF0sXG4rXHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE2MTgsNiArMTYzOSw1NyBAQCBmYm5pY19md19wYXJzZXJfdGVzdCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7XG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcbitcdEZCTklDX1RMVl9BVFRSX0xBU1Rcbit9O1xuK1xuK3N0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuK3tcbitcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XG4rXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBvcGFxdWU7XG4rXHRzMzIgdmFsdWU7XG4rXG4rXHR0aGVybV9leGNlZWRlZCA9XG4rXHRcdGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTtcbitcdHZvbHRfZXhjZWVkZWQgPVxuK1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcbitcbitcdGlmICghdGhlcm1fZXhjZWVkZWQgXHUwMDI2XHUwMDI2ICF2b2x0X2V4Y2VlZGVkKSB7XG4rXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcIlRocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XG4rXHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xuK1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpO1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1DXFxuXCIsIHZhbHVlKTtcbitcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcbitcdH1cbitcbitcdGlmICh2b2x0X2V4Y2VlZGVkKSB7XG4rXHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9WT0xUQUdFXSkge1xuK1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdFwiVm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpO1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiVm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXFxuXCIsIHZhbHVlKTtcbitcdFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbHVlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuIFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxuIFx0RkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsXG5AQCAtMTY0Niw2ICsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVFNFTkVfUkVBRF9SRVNQLFxuIFx0XHRcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX3RzZW5lX3JlYWRfcmVzcCksXG4rXHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcbitcdFx0XHQgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsXG4rXHRcdFx0IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXG4gXHRcdFx0IGZibmljX2Z3X2xvZ19yZXFfaW5kZXgsXG4gXHRcdFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuaW5kZXggZDg0NzIzZTRjZmEzNjIuLjg3MzAxZTYwODI1NTVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC02LDYgKzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZmJuaWNfZGV2O1xuQEAgLTQ0LDYgKzQ1LDE4IEBAIHN0cnVjdCBmYm5pY19md192ZXIge1xuIFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcbiB9O1xuIFxuKy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxuKyAqIGZpcm13YXJlIG5ldmVyIHBvcHVsYXRlZCAob2xkZXIgZmlybXdhcmUpIG9yIGEgY2FjaGUgZW50cnkgbm90IHlldFxuKyAqIHJlZnJlc2hlZC5cbisgKi9cbisjZGVmaW5lIEZCTklDX1NFTlNPUl9OT19EQVRBXHRcdFx0UzMyX01JTlxuK1xuK3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xuK1x0czMyIG1pbjtcbitcdHMzMiBtYXg7XG4rXHRzMzIgY3JpdDtcbit9O1xuK1xuIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xuQEAgLTYwLDYgKzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHR1OFx0bGlua19zcGVlZDtcbiBcdHU4XHRsaW5rX2ZlYztcbiBcdHUzMlx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xuK1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB0ZW1wO1xuK1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB2b2x0O1xuIH07XG4gXG4gc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24ge1xuQEAgLTIxMiw2ICsyMjcsNyBAQCBlbnVtIHtcbiBcdEZCTklDX1RMVl9NU0dfSURfUVNGUF9SRUFEX1JFU1BcdFx0XHQ9IDB4MzksXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXHRcdFx0PSAweDNDLFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1BcdFx0PSAweDNELFxuK1x0RkJOSUNfVExWX01TR19JRF9TRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AgPSAweDQwLFxuIFx0RkJOSUNfVExWX01TR19JRF9MT0dfU0VORF9MT0dTX1JFUVx0XHQ9IDB4NDMsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVRXHRcdFx0PSAweDQ0LFxuIFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFU1BcdFx0XHQ9IDB4NDUsXG5AQCAtMjQyLDYgKzI1OCwxMiBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlx0XHRcdD0gMHgxMSxcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUlx0XHQ9IDB4MTIsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cdFx0PSAweDE1LFxuK1x0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXHRcdFx0PSAweDE4LFxuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhcdFx0XHQ9IDB4MTksXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcdFx0XHQ9IDB4MWEsXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTlx0XHRcdD0gMHgxYixcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXHRcdFx0PSAweDFjLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxuIH07XG4gXG5AQCAtMjc1LDYgKzI5NywxNCBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX1RTRU5FX01TR19NQVhcbiB9O1xuIFxuK2VudW0ge1xuK1x0RkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBR1x0PSAweDAsXG4rXHRGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUdcdD0gMHgxLFxuK1x0RkJOSUNfRldfVFNFTkVfVEhFUk1BTFx0XHRcdD0gMHgyLFxuK1x0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVx0XHRcdD0gMHgzLFxuK1x0RkJOSUNfRldfVFNFTkVfRVhDRUVERURfTVNHX01BWCxcbit9O1xuK1xuIGVudW0ge1xuIFx0RkJOSUNfRldfT1dORVJTSElQX0ZMQUdcdFx0XHQ9IDB4MCxcbiBcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXHRcdFx0PSAweDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG5pbmRleCBkZWY4NTk4YWNlZWNmNy4uZWI5MTBiYTQ3ZjM3ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgKzIsMTg0IEBAXG4gLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od21vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJmYm5pYy5oXCJcbiAjaW5jbHVkZSBcImZibmljX21hYy5oXCJcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuK3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbitcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4rXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbitcdHJldHVybiAwNDQ0O1xuK31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4re1xuK1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbitcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuK1x0aW50IGVyciA9IDA7XG4rXHRzMzIgKmNhY2hlZDtcbitcbitcdHN3aXRjaCAoaWQpIHtcbitcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4rXHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuK1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLVx1MDAzZWxhc3RfcmVhZCkpIHtcbitcdFx0KnZhbCA9ICpjYWNoZWQ7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuK1x0aWYgKCFmd19jbXBsKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIGV4aXRfZnJlZTtcbitcdH1cbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIGV4aXRfY2xlYW51cDtcbitcdH1cbitcbitcdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuK1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4rXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIGVycik7XG4rXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbitcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4rXHRjYWNoZS1cdTAwM2V2b2x0X212ID0gZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4rXHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuK1xuK1x0KnZhbCA9ICpjYWNoZWQ7XG4rZXhpdF9jbGVhbnVwOlxuK1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbitleGl0X2ZyZWU6XG4rXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbi1cdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4tXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuK3tcbitcdGlmICh0aHIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdCp2YWwgPSB0aHI7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcCBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl90ZW1wX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbi1cdGlmICh0eXBlID09IGh3bW9uX2luIFx1MDAyNlx1MDAyNiBhdHRyID09IGh3bW9uX2luX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbitcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbiBcbitcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0c3dpdGNoIChhdHRyKSB7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl9pbl9taW46XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9tYXg6XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbitcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzd2l0Y2ggKGF0dHIpIHtcbitcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiBcdFx0XHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4tXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXHUwMDNlbWFjO1xuLVx0aW50IGlkO1xuIFxuLVx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XG4tXHRyZXR1cm4gaWQgXHUwMDNjIDAgPyBpZCA6IG1hYy1cdTAwM2VnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7XG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgaHdtb25fdGVtcDpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luOlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSxcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksXG4rXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbitcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbitcdFx0XHQgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuK1x0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxuK1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxuIFx0TlVMTFxuIH07XG4gXG5AQCAtNTcsMjUgKzIwNyw4MSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXG4gXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmYmQtXHUwMDNlaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwiZmJuaWNcIixcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbitcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbitcbitcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcImZibmljXCIsIGZiZCxcbitcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcXG5cIixcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuK1x0XHRcdCAgIGh3bW9uKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbitcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4rXHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbitcdC8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMXG4rXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuK1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuK1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4rXG4rXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4rfVxuK1xuK3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbit7XG4rXHRlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlO1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzMzIgYXR0ciA9IC0xO1xuK1xuK1x0c3dpdGNoIChpZCkge1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbitcdFx0dHlwZSA9IGh3bW9uX3RlbXA7XG4rXG4rXHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuK1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4rXHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heClcbitcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbitcdFx0dHlwZSA9IGh3bW9uX2luO1xuK1xuK1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbitcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuK1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4KVxuK1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4rXHQgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9yblxuK1x0ICogZG93bi5cbitcdCAqL1xuK1x0aHdtb24gPSBSRUFEX09OQ0UoZmJkLVx1MDAzZWh3bW9uKTtcbitcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4rXHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Ny4uZmJhMmUyZWZhZWI4YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5AQCAtODk5LDYwICs4OTksNiBAQCBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHJlc2V0LFxuIFx0XHRcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXG4tXHRcdFx0XHQgICAgIGxvbmcgKnZhbClcbi17XG4tXHRzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDtcbi1cdGludCBlcnIgPSAwO1xuLVx0czMyICpzZW5zb3I7XG4tXG4tXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XG4tXHRpZiAoIWZ3X2NtcGwpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0c3dpdGNoIChpZCkge1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuLVx0XHRzZW5zb3IgPSBcdTAwMjZmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuLVx0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbi1cdFx0XHRlcnIpO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuLVx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuLVx0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4tXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4tXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuLVx0fVxuLVxuLVx0KnZhbCA9ICpzZW5zb3I7XG4tZXhpdF9jbGVhbnVwOlxuLVx0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbi1leGl0X2ZyZWU6XG4tXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXG4gXHQuZ2V0X2xpbmsgPSBmYm5pY19tYWNfZ2V0X2xpbmssXG5AQCAtOTY2LDcgKzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLFxuIFx0LmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYyxcbiBcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcbi1cdC5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG5pbmRleCAxMGYzMGUwZThmNjkxNi4uYmRlMmRhYTY1NjQ1N2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG5AQCAtMTM3LDggKzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xuIFxuIFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcdHZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpO1xuLVxuLVx0aW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7XG4gfTtcbiBcbiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjU0LjIyMjQ1NjU4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTY5Nzk2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBOZXcgSGFyZHdhcmUgTW9uaXRvcmluZyBQYXRjaCBmb3IgYGZibmljYCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaC4gSXQncyBhZGRpbmcgaGFyZHdhcmUgbW9uaXRvcmluZyBmZWF0dXJlcyB0byB0aGUgYGZibmljYCBuZXR3b3JrIGRyaXZlciwgd2hpY2ggaXMgZ3JlYXQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGBmYm5pY19od21vbi5jYCwgd2hlcmUgdGhleSd2ZSBhZGRlZCB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQsIGFuZCBhcmUgY2FjaGluZyB2YWx1ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBlZmZpY2llbnQuIFRoZXkndmUgYWxzbyBpbXBsZW1lbnRlZCBhIG5ldyBmaXJtd2FyZSBtZXNzYWdlIHBhcnNlciBzcGVjaWZpY2FsbHkgZm9yIFwidGhyZXNob2xkIGV4Y2VlZGVkXCIgZXZlbnRzIOKAkyBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdDsgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IGluIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMgY2FuIGJlIHRyaWNreS4gQW5kIHRoZSBkcml2ZXIgaXRzZWxmIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNgLCBjb25maXJtaW5nIG15IG1lbW9yeSBvZiBpdHMgbG9jYXRpb24uXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6IGNhbiB3ZSAqYWN0dWFsbHkqIHJlYWNoIGFuZCB2YWxpZGF0ZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5PyBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHdlIGludGVycHJldCBmaXJtd2FyZSBtZXNzYWdlcyBhbmQgaW50cm9kdWNlcyBuZXcgcmVhZCBmdW5jdGlvbnM6IGBmYm5pY19od21vbl9yZWFkYCwgYGZibmljX2h3bW9uX3RlbXBfcmVhZGAsIGBmYm5pY19od21vbl9pbl9yZWFkYC4gUGx1cywgdGhlcmXigJlzIHRoaXMgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgd2hpY2ggaXMgY2FsbGVkIGZyb20gdGhlIHRocmVzaG9sZCBwYXJzZXIuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIHRyaWdnZXJpbmcgYWxhcm1zLCBvciBhdCBsZWFzdCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2suXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogaXMgYGZibmljYCBldmVuICphY2Nlc3NpYmxlKiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIE1ldGEncyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLiBTbywgaXQncyBhIFBDSSBkZXZpY2UuIEkgd29uZGVyIGlmIHdlIGNhbiBmdXp6IHRoaXMgZWFzaWx5LiBTeXprYWxsZXIgaXMgYSBwb3dlcmZ1bCB0b29sLCBidXQgbmV0d29yayBkcml2ZXJzIGFyZSB1c3VhbGx5IHRlc3RlZCB2aWEgbmV0bGluayBvciBzb2NrZXQgaW50ZXJmYWNlcy4gVGhlIGlkZWFsIHNjZW5hcmlvIHdvdWxkIGJlIGEgZGVkaWNhdGVkIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgYGZibmljYCwgYnV0LCBpcyB0aGVyZSBhIHdheSB0byBmdXp6IFBDSSBkZXZpY2VzIHRocm91Z2ggc3l6a2FsbGVyIGlmIHRoZXkgYXJlIGVtdWxhdGVkIG9yIHdpdGggdmhjaS9QQ0kgZnV6emluZz8gV2FpdCwgc3l6a2FsbGVyIGhhcyBhIFBDSSBmdXp6ZXIhIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0LlxuXG5GaW5hbGx5LCBiZWZvcmUgSSBnZXQgbG9zdCBpbiB0aGUgd2VlZHMgb2YgZnV6emluZywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZSBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIGZvciBgQ09ORklHX0ZCTklDYCBhbmQgZGV0ZXJtaW5lIGlmIGl0J3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkcyBvciBpZiB3ZSdsbCBoYXZlIHRvIGVuYWJsZSBpdCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzowMS45Nzk0MzkwNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NDE1MjI0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJOSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MDIuMjM4ODYyNjI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4Nzc0MDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEV0aGVybmV0IEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRXRoZXJuZXQgZHJpdmVyIGZhbWlseSBzaG91bGQgYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGJyb2FkLCB0b3AtbGV2ZWwgc2V0dGluZ3MsIHBlcmhhcHMgb3B0aW9ucyBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBlbnRpcmUgc3Vic3lzdGVtLCBhbmQgcHJvYmFibHkgdGhlIGluY2x1c2lvbiBvZiBvdGhlciwgbW9yZSBzcGVjaWZpYyBLY29uZmlnIGZpbGVzIGZvciBpbmRpdmlkdWFsIEV0aGVybmV0IGNvbnRyb2xsZXJzIG9yIGZlYXR1cmVzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGFuZCBkZXBlbmRlbmNpZXMgbGFpZCBvdXQgaGVyZSDigJMgaG93IGRpZmZlcmVudCBjb250cm9sbGVyIHR5cGVzIGFyZSBzZWxlY3RlZCwgaG93IGNvbW1vbiBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHNwYWNlIGxvb2tzIGxpa2UuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIHJlZHVuZGFuY2llcywgb3IgYXJlYXMgd2hlcmUgSSBjYW4gcG90ZW50aWFsbHkgc3RyZWFtbGluZSB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgd2hvbGUgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsgaXMgcHV0IHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MDYuMDI2NjA1NDk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg2MjUxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJOSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MDYuMTg1NDc0Nzk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5MDgzMjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGZibmljIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19GQk5JQ2AsIHRoYXQncyBteSBzdGFydGluZyBwb2ludC4gVGhlIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgLCBhbmQgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLiBSaWdodCwgdGhhdCBwYXJzZXIgaXMgZGVmaW5pdGVseSB0cmlnZ2VyZWQgYnkgZmlybXdhcmUgbWVzc2FnZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gU3l6a2FsbGVyIHRyaWdnZXIgdGhvc2UgZmlybXdhcmUgbWVzc2FnZXM/IElmIFN5emthbGxlciBpcyBmdXp6aW5nIFBDSSwgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW5qZWN0IGFyYml0cmFyeSByZXNwb25zZXMgdG8gRE1BL01NSU8gcmVhZHMsIHdoaWNoIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIHZhbGlkIGZpcm13YXJlIG1lc3NhZ2VzLiBJdCdzIHBsYXVzaWJsZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRoIHRvIGBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcGAgaXRzZWxmIGFuZCBjb25maXJtIHRoYXQgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGlucHV0cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgaG93IGl0J3MgaW52b2tlZC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEyOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoxMC42NzYzMDk5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NTE1MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTE2NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXhbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYzoxNjUwOnN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNjUxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTE2OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzIyLVxcdFxcdFxcdCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM6MTcyMzpcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzI0LVxcdEZCTklDX1RMVl9QQVJTRVIoTE9HX01TR19SRVEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI3OjEwLjg3MTg1ODAwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDE2NzMzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBmYm5pY19md190bHZfcGFyc2VyYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGUgYGZibmljX2Z3X3Rsdl9wYXJzZXJgIG1vZHVsZSwgcmVjb2duaXppbmcgaXQncyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhIHNwZWNpZmljIGRhdGEgZm9ybWF0LiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiAqd2hlcmUqIHRoaXMgcGFyc2VyIGlzIGJlaW5nIHV0aWxpemVkLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoIGFuZCBkZXBlbmRlbmN5IHRyZWUuIFVuZGVyc3RhbmRpbmcgaXRzIGNvbnN1bWVycyBpcyBjcnVjaWFsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNlbnRyYWwgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBsb2NhbGl6ZWQ/IElkZW50aWZ5aW5nIGV2ZXJ5IGluc3RhbmNlIG9mIGBmYm5pY19md190bHZfcGFyc2VyYCBpbiB1c2UgaXMgdGhlIGZpcnN0LCBlc3NlbnRpYWwgc3RlcC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBwZXJmb3JtIHRoaXMgY3Jvc3MtcmVmZXJlbmNpbmcsIHByb2JhYmx5IGEgZ3JlcCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gY2FsbC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgd2hhdGV2ZXIgdGhleSBtYXkgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MTQuMjczNTM1NzEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0Mjg5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNfZndfdGx2X3BhcnNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xNjUwPXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE2OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTM6c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY5NC1cXHRGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTczMD1zdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc19yeF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xNzY2LVxcdFxcdC8qIElmIHBhcnNpbmcgZmFpbHMgZHVtcCBjb250ZW50cyBvZiBtZXNzYWdlIHRvIGRtZXNnICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE3Njc6XFx0XFx0ZXJyID0gZmJuaWNfdGx2X21zZ19wYXJzZShmYmQsIG1zZywgZmJuaWNfZndfdGx2X3BhcnNlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE3NjgtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoxNC41MjU5NzUzNTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYzOTY5NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRkJOSUMgUGF0Y2gncyBGdXp6aW5nIFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBmZXcga2V5IGFyZWFzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB2dWxuZXJhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZnV6emFibGUuIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgYGZibmljYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbWFpbGJveCwgYW5kIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nIChod21vbikgYXNwZWN0cy5cblxuRmlyc3QsIEkgc2VlIHRoaXMgaXMgdXNlZCBpbiBgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNnc2AuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHByb2Nlc3NlcyBtZXNzYWdlcyBjb21pbmcgKmZyb20qIHRoZSBoYXJkd2FyZS4gVGhlIG1haWxib3ggaXRzZWxmIGlzIGxpa2VseSBwb3B1bGF0ZWQgdGhyb3VnaCBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBvciBtZW1vcnktbWFwcGVkIEkvTyAoTU1JTyksIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZGF0YSBmbG93aW5nIGZyb20gdGhlIGRldmljZSB0byB0aGUga2VybmVsLiBUaGlzIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBJIGtub3cgU3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyBwYXJ0aWN1bGFybHkgd2VsbC1zdWl0ZWQgdG8gcG9raW5nIGF0IHRoZXNlIGtpbmRzIG9mIGludGVyZmFjZXMuXG5cblRoZW4gSSBub3RlIHRoZSBjaGFuZ2VzIHRvIHRoZSBod21vbiBmdW5jdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBgZmJuaWNfaHdtb25fcmVhZGAgYW5kICphZGRzKiBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCBhbmQgYGZibmljX2h3bW9uX2luX3JlYWRgLiBUaG9zZSBhcmUgYWxsIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBrbm93IFN5emthbGxlciBpcyBxdWl0ZSBhZGVwdCBhdCBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzIGZpbGVzLCBzbyBpdCBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucyBlYXNpbHkuIFRoYXQgYGZibmljX2h3bW9uX3JlYWRgIGZ1bmN0aW9uIGNvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCB0byBhIGxvdCBvZiBpbnRlcmVzdGluZyBsb2dpYy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZW5hYmxlIHRoaXMgYXJlYSwgSSBuZWVkIGBDT05GSUdfRkJOSUNgLCBvYnZpb3VzbHkuIEFsc28sIGBDT05GSUdfSFdNT05gIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBmYm5pY19od21vbl9yZWdpc3RlcmAgY2hlY2tzIGBJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKWAuIEludGVyZXN0aW5nbHksIGV2ZW4gdGhvdWdoIGBmYm5pY19od21vbl9yZWdpc3RlcmAgaXMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBpdCAqY2hlY2tzKiBgSFdNT05gIHZpYSBhIGNvbmRpdGlvbmFsIHJldHVybiEgU28sIEkgbmVlZCBgSFdNT05gIGVuYWJsZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGggaXMgYWN0aXZlLlxuXG5Ob3cgdG8gZGVmaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4gRnJvbSB0aGUgY29kZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgcHVycG9zZXMgYXJlOlxuKiAgIGBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcGAgKGxpa2VseSBmaXJtd2FyZSBwYXJzaW5nLCBpbnRlcmVzdGluZyBmb3IgY3JhZnRlZCBtZXNzYWdlcylcbiogICBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgLCBhbmQgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgKHRoZXNlIHNlZW0gbGlrZSBsb3ctaGFuZ2luZyBmcnVpdCwgdGhleSByZWFkIHZhbHVlcyBmcm9tIGh3bW9uIGludGVyZmFjZSlcbiogICBgZmJuaWNfaHdtb25fcmVhZGAgKHRoZSBwb3RlbnRpYWxseSBpbXBvcnRhbnQgZnVuY3Rpb24sIGFuZCBJJ2xsIG5lZWQgdG8gY2hlY2sgd2hpY2ggZmlsZSBpdCdzIGluIHRvIGVuc3VyZSBpdCBhbGlnbnMgd2l0aCBteSBhc3Nlc3NtZW50KVxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSBgZmJuaWNfaHdtb25fcmVhZGAgaXMgaW5kZWVkIGluIGBmYm5pY19od21vbi5jYCBzbyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ5MiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoyMy4xNjU2NzU4NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDM1MDgwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYm5pY19od21vbl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM9MTc9c3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzo4MTpzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy04OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6OTA6c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz05OT1zdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTA0LVxcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwNTpcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEwNi1cXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMDc6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMDgtXFx0Y2FzZSBod21vbl90ZW1wX2NyaXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjEwOTpcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xMTAtXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0Olxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEyNi1cXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjc6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEyOC1cXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxMjk6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTEzMC1cXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTMxOlxcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTMyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYz0xMzc9c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNDItXFx0Y2FzZSBod21vbl9pbl9taW46XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jOjE0MzpcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE0NC1cXHRjYXNlIGh3bW9uX2luX21heDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTQ1OlxcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTQ2LVxcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTYxLVxcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYzoxNjI6XFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2My1cXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTY0OlxcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYy0xNjUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTcwOnN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jLTE3MS1cXHRcXHRcXHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM9MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTg2LVxcdC5pc192aXNpYmxlID0gZmJuaWNfaHdtb25faXNfdmlzaWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmM6MTg3OlxcdC5yZWFkID0gZmJuaWNfaHdtb25fcmVhZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMtMTg4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI3OjIzLjQyNjAzMTgyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzc0NDUwNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRkJOSUMgSGFyZHdhcmUgTW9uaXRvcmluZyBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgLCBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgLCBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YCwgYW5kIGBmYm5pY19od21vbl9yZWFkYC4gVGhlc2UgYXJlIGNsZWFybHkgcGFydCBvZiB0aGUgRkJOSUMgaGFyZHdhcmUgbW9uaXRvcmluZyBpbmZyYXN0cnVjdHVyZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCB0ZW1wZXJhdHVyZSwgdm9sdGFnZSwgYW5kIHBvdGVudGlhbGx5IG90aGVyIHNlbnNvciBkYXRhIHJlbGF0ZWQgdG8gdGhlIEZCTklDIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8ga25vdyBpZiBgQ09ORklHX0ZCTklDYCBpcyBkZWZpbmVkLiBBaCwgeWVzLCBpdCdzIGEgdHJpc3RhdGUsIHNvIGBGQk5JQ2AgaXMgdGhlIHN5bWJvbCB1c2VkIGluIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5SaWdodCwgc28gYGZibmljX2h3bW9uX3JlZ2lzdGVyYCBpcyBkZWZpbmVkIGluIGBmYm5pY19od21vbi5jYC4gTGV0IG1lIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdgIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzoyOS44MDA0ODU0MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzAyODM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJOSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MzAuMDUzNTE5MzE4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTQyNzI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipDaGVja2luZyBvbiBOZXR3b3JrIFZlbmRvciBNZXRhZGF0YSoqXG5cbk9rYXksIHNvIEknbSBwdXR0aW5nIHRvZ2V0aGVyIHRoaXMgb3ZlcnZpZXcgYW5kIHJlYWxpemVkIEkgZ2xvc3NlZCBvdmVyIHNvbWV0aGluZyBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIEkndmUgZ290IGBORVRfVkVORE9SX01FVEFgIGluIG15IG5vdGVzLCBidXQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgaGFuZGxlZCBjb3JyZWN0bHkuIEl0J3MgdG9vIGVhc3kgdG8gbWlzcyB0aGVzZSBsaXR0bGUgZGVwZW5kZW5jaWVzLiBSaWdodCBub3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkVUX1ZFTkRPUl9NRVRBYCBpcyBlaXRoZXIgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgb3IgZWxzZSBjbGVhcmx5IG5vdGUgd2hhdCdzIHJlcXVpcmVkIHRvIGVuYWJsZSBpdCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBwcm9qZWN0LiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgc2VlIHdoYXQgdGhlIHN0YXR1cyBpcy4gVGhhdCdzIHRoZSBwcmlvcml0eSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6MzYuNTY3Nzk0NzY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NDA5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfTUVUQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy03LVxcdGJvb2wgXFxcIk1ldGEgUGxhdGZvcm1zIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI3OjM2LjcxOTI0MzMzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTM2NzcwNDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZCTklDIERyaXZlciBDb25maWd1cmF0aW9uIGFuZCBWdWxuZXJhYmlsaXR5IFN1cmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IGhlcmUuIEl0IGxvb2tzIGxpa2UgYE5FVF9WRU5ET1JfTUVUQWAsIGBGQk5JQ2AsIGFuZCBgSFdNT05gIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZS4gU28gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYnVpbGQgYSBjb25maWd1cmF0aW9uIGFycmF5IGxpa2U6IGBbXCJORVRfVkVORE9SX01FVEFcIiwgXCJGQk5JQ1wiLCBcIkhXTU9OXCJdYC4gVGhhdCBzZXRzIHRoZSBzdGFnZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBmYm5pY19od21vbmAgaW50ZXJhY3Rpb25zIGJlY2F1c2Ugb2YgdGhlaXIgcG90ZW50aWFsIGZvciBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzLiBJJ20gemVyb2luZyBpbiBvbiBgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWRgIHRvIHNlZSBpZiBpdCdzIHJlYWNoYWJsZS4gSXQgYXBwZWFycyBpdCBpcywgaW5kaXJlY3RseSwgdGhyb3VnaCBhIGNoYWluOiBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCwgYGZibmljX2h3bW9uX2luX3JlYWRgLCBhbmQgYGZibmljX2h3bW9uX3JlYWRgLCB3aGljaCBpcyByZWdpc3RlcmVkIGFzIHRoZSBgaHdtb25fb3BzLnJlYWRgIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3lzZnMgcmVhZHMgb24gdGhlIGh3bW9uIGRldmljZS4gVGhpcyBpcyBhIGdvb2Qgc2lnbiBmb3IgZnV6emluZywgYW5kIGEgbGlrZWx5IGF2ZW51ZSBmb3IgZXhwbG9pdGF0aW9uLlxuXG5PbiBhIGRpZmZlcmVudCB2ZWN0b3IsIEkgaGF2ZSB0aGUgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBmaXJtd2FyZSBtZXNzYWdlcywgb3IgbWFpbGJveC4gVGhpcyBhbHNvIHNlZW1zIHRvIGJlIGEgc29saWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGNsZWFybHkgZnVuY3Rpb25hbC5cblxuTXkgY3VycmVudCBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BgIChmaXJtd2FyZSBtYWlsYm94KVxuKiAgIGBmYm5pY19od21vbl90ZW1wX3JlYWRgXG4qICAgYGZibmljX2h3bW9uX2luX3JlYWRgXG4qICAgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCAocmVhY2hhYmxlIHZpYSBgaHdtb25gIGRldmljZSlcbiogICBgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50YFxuKiAgIGBmYm5pY19od21vbl9yZWFkYFxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgYGZibmljX2h3bW9uX3NlbnNvcl9yZWFkYCB0byBzZWUgaWYgaXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgaXQgaXMuIFRoZW4gbGV0J3MgdmVyaWZ5IGlmIGBmYm5pY19od21vbl9ub3RpZnlfZXZlbnRgIGlzIGV4cG9ydGVkIG9yIGp1c3QgZ2xvYmFsLiBJdCBpcyBnbG9iYWwgaW4gYGZibmljX2h3bW9uLmNgIGFuZCBjYWxsZWQgZnJvbSBgZmJuaWNfZncuY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uXG5cbkZpbmFsbHksIEkgbmVlZCB0byBzZWUgd2hhdCBlbHNlIGhhcyBiZWVuIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgd2FzIG1vZGlmaWVkIHRvIHBhcnNlIHRocmVzaG9sZCB2YWx1ZXMuIFRoaXMgbm93IGFwcGVhcnMgdG8gYmUgYW5vdGhlciBzb2xpZCBmb2N1cyBzeW1ib2wgYW5kIGFuIGV4dGVuc2lvbiBvZiB0aGUgZmlybXdhcmUgbWVzc2FnaW5nIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NTMsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6NDQuNjU2MDE4MzU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQzMDc4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz01ODY9c3RhdGljIGludCBmYm5pY19md19wYXJzZV9ibWNfYWRkcnModTggYm1jX21hY19hZGRyW11bRVRIX0FMRU5dLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTYxNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM6NjE1OnN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3Aodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTYxNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM9MTY5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTE2OTUtXFx0RkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjE2OTY6XFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTY5Ny1cXHRGQk5JQ19UTFZfUEFSU0VSKE9XTkVSU0hJUF9SRVNQLCBmYm5pY19vd25lcnNoaXBfcmVzcF9pbmRleCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6Mjc6NDUuMzEwMzM0OTE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzI3Mjc0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgZmJuaWMgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBmYm5pY19md19wYXJzZV9jYXBfcmVzcGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBjaGFuZ2UgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZGAgYW5kIGBmYm5pY19od21vbl9yZWFkX2FsYXJtYC4gVGhleSdyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYGZibmljX2h3bW9uLmNgLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IEZvY3VzU3ltYm9scyBsaXN0LiBUaGV5IHdvdWxkIGJlIHBlcmZlY3QgdG8gZnV6ei5cblxuTGV0IG1lIHN1bW1hcml6ZSB0aGUgc2NvcGU6IG15IEZvY3VzU3ltYm9scyB3aWxsIGJlOlxuXG4qICAgYGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwYCAodGhlIGZpcm13YXJlIHJlc3BvbnNlIHBhcnNlcilcbiogICBgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3BgICh0aGUgbW9kaWZpZWQgY2FwYWJpbGl0eSByZXNwb25zZSlcbiogICBgZmJuaWNfaHdtb25fdGVtcF9yZWFkYCAodGVtcGVyYXR1cmUgc2Vuc29yIHJlYWRpbmcpXG4qICAgYGZibmljX2h3bW9uX2luX3JlYWRgICh2b2x0YWdlIHNlbnNvciByZWFkaW5nKVxuKiAgIGBmYm5pY19od21vbl9zZW5zb3JfcmVhZGAgKGdlbmVyaWMgc2Vuc29yIHJlYWQpXG4qICAgYGZibmljX2h3bW9uX25vdGlmeV9ldmVudGAgKGV2ZW50IG5vdGlmaWNhdGlvbilcbiogICBgZmJuaWNfaHdtb25fcmVhZGAgKGdlbmVyYWwgaHdtb24gcmVhZClcbiogICBgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGRgICh0aHJlc2hvbGQgcmVhZGluZyAtIGEgc3RhdGljIGhlbHBlcilcbiogICBgZmJuaWNfaHdtb25fcmVhZF9hbGFybWAgKGFsYXJtIHJlYWRpbmcgLSBhbHNvIGEgc3RhdGljIGhlbHBlcilcblxuVGhlIHVuZGVybHlpbmcgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgZmJuaWMgZHJpdmVyJ3MgaGFyZHdhcmUgbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMsIGluY2x1ZGluZyByZWFkaW5nIGZyb20gbmV3IHN5c2ZzIGludGVyZmFjZXMgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlLCBhbmQgcGFyc2luZyBmaXJtd2FyZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRocmVzaG9sZCBleGNlZWRhbmNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByaW1lIHRhcmdldHMuIEkgY2FuIGZ1enogdGhpcyBieSB3cml0aW5nIHRvIHN5c2ZzIGFuZCBlbXVsYXRpbmcgUENJL21haWxib3ggaW50ZXJhY3Rpb25zLiBUaG9zZSBGb2N1c1N5bWJvbHMgYXJlIG15IGF0dGFjayBzdXJmYWNlLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjc0LCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNzo1My4xNDMwNjU3OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU2NjY2NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfTUVUQVwiLFxuICAgIFwiRkJOSUNcIixcbiAgICBcIkhXTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BcIixcbiAgICBcImZibmljX2Z3X3BhcnNlX2NhcF9yZXNwXCIsXG4gICAgXCJmYm5pY19od21vbl90ZW1wX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX2luX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3NlbnNvcl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9ub3RpZnlfZXZlbnRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRcIixcbiAgICBcImZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX2FsYXJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBtb25pdG9yaW5nIHRocmVzaG9sZCBhbmQgYWxhcm0gc3VwcG9ydCB0byB0aGUgZmJuaWMgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBzeXNmcyByZWFkIGhhbmRsZXJzIGZvciB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3JzLCBhbmQgYWRkcyBhIGZpcm13YXJlIG1lc3NhZ2UgcGFyc2VyIGZvciB0aHJlc2hvbGQgZXhjZWVkZWQgZXZlbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXIncyBod21vbiBpbnRlcmZhY2UgYW5kIGZpcm13YXJlIG1haWxib3ggcHJvY2Vzc2luZywgd2hpY2ggY2FuIGJlIGZ1enplZCB2aWEgc3lzZnMgYW5kIGVtdWxhdGVkIFBDSS9tYWlsYm94IGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX01FVEFcIixcbiAgICBcIkZCTklDXCIsXG4gICAgXCJIV01PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwXCIsXG4gICAgXCJmYm5pY19md19wYXJzZV9jYXBfcmVzcFwiLFxuICAgIFwiZmJuaWNfaHdtb25fdGVtcF9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9pbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9zZW5zb3JfcmVhZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50XCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkXCIsXG4gICAgXCJmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZFwiLFxuICAgIFwiZmJuaWNfaHdtb25fcmVhZF9hbGFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgbW9uaXRvcmluZyB0aHJlc2hvbGQgYW5kIGFsYXJtIHN1cHBvcnQgdG8gdGhlIGZibmljIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgc3lzZnMgcmVhZCBoYW5kbGVycyBmb3IgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2Ugc2Vuc29ycywgYW5kIGFkZHMgYSBmaXJtd2FyZSBtZXNzYWdlIHBhcnNlciBmb3IgdGhyZXNob2xkIGV4Y2VlZGVkIGV2ZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgaHdtb24gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBtYWlsYm94IHByb2Nlc3NpbmcsIHdoaWNoIGNhbiBiZSBmdXp6ZWQgdmlhIHN5c2ZzIGFuZCBlbXVsYXRlZCBQQ0kvbWFpbGJveCBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[1] Phase: Succeeded StartedAt: 2026-07-22 15:28:04 +0000 UTC FinishedAt: 2026-07-22 15:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 15:28:04 +0000 UTC FinishedAt: 2026-07-22 15:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2] Phase: Succeeded StartedAt: 2026-07-22 15:28:04 +0000 UTC FinishedAt: 2026-07-22 17:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:28:04 +0000 UTC FinishedAt: 2026-07-22 17:28:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:28:04 +0000 UTC FinishedAt: 2026-07-22 15:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:28:04 +0000 UTC FinishedAt: 2026-07-22 15:28:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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-workflowkghrh/series-workflowkghrh-convert-artifact-3587410145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:28:41 +0000 UTC FinishedAt: 2026-07-22 15:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:28:41 +0000 UTC FinishedAt: 2026-07-22 15:59:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d248fad8-4d83-41e1-8c4d-423ab1b0b8df,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-workflowkghrh/series-workflowkghrh-convert-artifact-3587410145/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": "16ba2d8c-7809-494e-b267-89b77369778d", "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-workflowkghrh/series-workflowkghrh-build-action-378754575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:28:41 +0000 UTC FinishedAt: 2026-07-22 15:58:51 +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:*d248fad8-4d83-41e1-8c4d-423ab1b0b8df,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-workflowkghrh/series-workflowkghrh-convert-artifact-3587410145/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": "16ba2d8c-7809-494e-b267-89b77369778d", "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-workflowkghrh/series-workflowkghrh-build-action-378754575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:59:02 +0000 UTC FinishedAt: 2026-07-22 15:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:59:02 +0000 UTC FinishedAt: 2026-07-22 15:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:59:02 +0000 UTC FinishedAt: 2026-07-22 15:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:59:02 +0000 UTC FinishedAt: 2026-07-22 15:59:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-workflowkghrh/series-workflowkghrh-convert-artifact-2488254772/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:59:14 +0000 UTC FinishedAt: 2026-07-22 16:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 15:59:14 +0000 UTC FinishedAt: 2026-07-22 16:00:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*16ba2d8c-7809-494e-b267-89b77369778d,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-workflowkghrh/series-workflowkghrh-build-action-378754575/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-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:01:10 +0000 UTC FinishedAt: 2026-07-22 16:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:01:11 +0000 UTC FinishedAt: 2026-07-22 16:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:01:11 +0000 UTC FinishedAt: 2026-07-22 16:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:01:11 +0000 UTC FinishedAt: 2026-07-22 16:35:43 +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:*d248fad8-4d83-41e1-8c4d-423ab1b0b8df,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-workflowkghrh/series-workflowkghrh-convert-artifact-2488254772/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": "aea87ed6-91dc-47a5-9a0a-7da1e20c4531", "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-workflowkghrh/series-workflowkghrh-build-action-77210368/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:01:11 +0000 UTC FinishedAt: 2026-07-22 16:35:33 +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:*d248fad8-4d83-41e1-8c4d-423ab1b0b8df,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-workflowkghrh/series-workflowkghrh-convert-artifact-2488254772/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": "aea87ed6-91dc-47a5-9a0a-7da1e20c4531", "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-workflowkghrh/series-workflowkghrh-build-action-77210368/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:35:43 +0000 UTC FinishedAt: 2026-07-22 16:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:35:43 +0000 UTC FinishedAt: 2026-07-22 16:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:35:43 +0000 UTC FinishedAt: 2026-07-22 16:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:35:43 +0000 UTC FinishedAt: 2026-07-22 16:37:29 +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:*aea87ed6-91dc-47a5-9a0a-7da1e20c4531,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-workflowkghrh/series-workflowkghrh-build-action-77210368/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-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:39 +0000 UTC FinishedAt: 2026-07-22 17:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:39 +0000 UTC FinishedAt: 2026-07-22 17:28:13 +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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"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:*16ba2d8c-7809-494e-b267-89b77369778d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aea87ed6-91dc-47a5-9a0a-7da1e20c4531,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-workflowkghrh/series-workflowkghrh-build-action-378754575/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-workflowkghrh/series-workflowkghrh-build-action-77210368/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:39 +0000 UTC FinishedAt: 2026-07-22 16:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:39 +0000 UTC FinishedAt: 2026-07-22 16:37:46 +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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"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-workflowkghrh/series-workflowkghrh-convert-artifact-1428874077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:39 +0000 UTC FinishedAt: 2026-07-22 16:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:39 +0000 UTC FinishedAt: 2026-07-22 16:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:40 +0000 UTC FinishedAt: 2026-07-22 16:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:50 +0000 UTC FinishedAt: 2026-07-22 17:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkghrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"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":["fbnic_fw_parse_threshold_exceeded_resp","fbnic_fw_parse_cap_resp","fbnic_hwmon_temp_read","fbnic_hwmon_in_read","fbnic_hwmon_sensor_read","fbnic_hwmon_notify_event","fbnic_hwmon_read","fbnic_hwmon_read_threshold","fbnic_hwmon_read_alarm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df13c1df8147675470213ffff29dd5762fa321f5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_META","FBNIC","HWMON"],"series_id":"972d099c-6103-4f01-b52e-6cccfb31210d","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-22 16:37:50 +0000 UTC FinishedAt: 2026-07-22 17:28:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*16ba2d8c-7809-494e-b267-89b77369778d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aea87ed6-91dc-47a5-9a0a-7da1e20c4531,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-workflowkghrh/series-workflowkghrh-build-action-378754575/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-workflowkghrh/series-workflowkghrh-build-action-77210368/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-workflowkghrh/series-workflowkghrh-convert-artifact-1428874077/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,}