Name: series-workflow7x9fk Phase: Succeeded StartedAt: 2026-09-11 21:46:37 +0000 UTC FinishedAt: 2026-09-12 01:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[0] Phase: Succeeded StartedAt: 2026-09-11 21:46:37 +0000 UTC FinishedAt: 2026-09-11 21:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 21:46:37 +0000 UTC FinishedAt: 2026-09-11 21:49:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC", "NET_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC", "NET_NS" ], "series_id": "bf439aa4-7b8a-4b11-a213-9e9843925f21" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macsec_changelink_check_netns", "macsec_changelink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1NFQyYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyYjMzQ7LAogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uIGNoZWNrIChtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucykgdmVyaWZ5aW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbCBkZXZpY2UmIzM5O3MgbmV0d29yayBuYW1lc3BhY2Ugd2hlbiBtb2RpZnlpbmcgb2ZmbG9hZCBjb25maWd1cmF0aW9uIG9uIGEgTUFDc2VjIG5ldGRldmljZSBhY3Jvc3MgbmFtZXNwYWNlcy4gSXQgb25seSBpbnNwZWN0cyBleGlzdGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2ludGVycyBhbmQgc3RydWN0IG1hY3NlY19kZXYgZmllbGRzLCBhbmQgY29uZGl0aW9uYWxseSBlbWl0cyBhIHN0YXRpYyBuZXRsaW5rIGV4dGVuZGVkIEFDSyBlcnJvciBzdHJpbmcgb24gcGVybWlzc2lvbiBkZW5pYWwuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcHlpbmcsIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5L2luZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpIGFuZCBjYWxscyBpdCB3aXRoaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byBlbmZvcmNlIG5hbWVzcGFjZSBwZXJtaXNzaW9uIGNoZWNrcyAocmVxdWlyaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHJlYWxfZGV2IG5ldHdvcmsgbmFtZXNwYWNlKSB3aGVuIGNoYW5naW5nIE1BQ3NlYyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0aW5nIG9mZmxvYWRlZCBkZXZpY2VzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIHZpcnR1YWwgTUFDc2VjIG5ldHdvcmtpbmcgZHJpdmVyLCBleGVyY2lzYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fTkVXTElOSyAvIFJUTV9TRVRMSU5LKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTI1Nzc1MGE0ZGY0YTJhMjY3ZjdjM2Y4MmI3YzRkMGVhNjdlOTcwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjE6NDg6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuaW5kZXggNmY5ZjNhY2VmZmFhZC4uZTAxOWU3YTI1Y2M5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuQEAgLTE5LDYgJiM0MzsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk0NSw2ICYjNDM7Mzk0NiwzMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kXG4mIzQzOyAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbiYjNDM7ICogdGhlIGRyaXZlciBvZiByZWFsX2Rldiwgd2hpY2ggbWF5IGxpdmUgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VcbiYjNDM7ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYmIzM5O3MgbmFtZXNwYWNlXG4mIzQzOyAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbiYjNDM7XHRib29sIHJlYWNoZXNfcmVhbF9kZXY7XG4mIzQzO1xuJiM0MztcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4mIzQzO1x0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVx1MDAzZW9mZmxvYWQpXG4mIzQzO1x0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XG4mIzQzO1x0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbkBAIC0zOTU5LDYgJiM0MzszOTg3LDEwIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDU0VDJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zJiMzNDssCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoKSBhbmQgY2FsbHMgaXQgd2l0aGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gZW5mb3JjZSBuYW1lc3BhY2UgcGVybWlzc2lvbiBjaGVja3MgKHJlcXVpcmluZyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsX2RldiBuZXR3b3JrIG5hbWVzcGFjZSkgd2hlbiBjaGFuZ2luZyBNQUNzZWMgb2ZmbG9hZCBzdGF0ZSBvciB1cGRhdGluZyBvZmZsb2FkZWQgZGV2aWNlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIHRoZSB2aXJ0dWFsIE1BQ3NlYyBuZXR3b3JraW5nIGRyaXZlciwgZXhlcmNpc2FibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX05FV0xJTksgLyBSVE1fU0VUTElOSykgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDIxOjQ4OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwppbmRleCA2ZjlmM2FjZWZmYWFkLi5lMDE5ZTdhMjVjYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvZ3JvX2NlbGxzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hY3NlYy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgmZ3Q7CkBAIC0zOTQ1LDYgJiM0MzszOTQ2LDMzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kCiYjNDM7ICogYW55IHJlcXVlc3QgYWdhaW5zdCBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UgKG1kb191cGRfc2VjeSgpKSByZWFjaAomIzQzOyAqIHRoZSBkcml2ZXIgb2YgcmVhbF9kZXYsIHdoaWNoIG1heSBsaXZlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYmIzM5O3MgbmFtZXNwYWNlCiYjNDM7ICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJIHN0cnVjdCBubGF0dHIgKmRhdGFbXSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTsKJiM0MzsJYm9vbCByZWFjaGVzX3JlYWxfZGV2OwomIzQzOwomIzQzOwlyZWFjaGVzX3JlYWxfZGV2ID0gbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpOwomIzQzOwlpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy0mZ3Q7b2ZmbG9hZCkKJiM0MzsJCXJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoIXJlYWNoZXNfcmVhbF9kZXYgfHwKJiM0MzsJICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy0mZ3Q7cmVhbF9kZXYpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkgICAgICAgJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwlyZXR1cm4gLUVQRVJNOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCSAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLAogCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCkBAIC0zOTU5LDYgJiM0MzszOTg3LDEwIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAwOwogCiYjNDM7CXJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJaWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fAogCSAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDc2VjIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSByZXZpZXcgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLiBUaGUgZGlmZiBzaG93cyBhIG5ldyBmdW5jdGlvbiwgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCwgYW5kIGEgY2FsbCB0byBpdCB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjb21tZW50IGFib3ZlIGl0IGlzIGtleTogaXQgc2VlbXMgdG8gYmUgYWJvdXQgYWNjZXNzIGNvbnRyb2wgd2hlbiBkZWFsaW5nIHdpdGggb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2VzIGFuZCB0aGVpciAmIzM0O3JlYWwmIzM0OyB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggbWlnaHQgcmVzaWRlIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuCgpUaGUgY29yZSBpZGVhIGFwcGVhcnMgdG8gYmUgY2hlY2tpbmcgd2hldGhlciBhIGNoYW5nZSB0byB0aGUgTUFDc2VjIGRldmljZSBjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0ZXMgdG8gYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlLCBpbnRlcmFjdHMgd2l0aCB0aGUgJiMzNDtyZWFsJiMzNDsgZGV2aWNlLiBJZiBpdCAqZG9lcyogdG91Y2ggdGhlIHJlYWwgZGV2aWNlLCBhbmQgdGhhdCBkZXZpY2UgbGl2ZXMgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2UsIHRoZW4gYENBUF9ORVRfQURNSU5gIGNhcGFiaWxpdHkgd2l0aGluIHRoYXQgdGFyZ2V0IG5hbWVzcGFjZSBpcyByZXF1aXJlZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGEgY3J1Y2lhbCBpc29sYXRpb24gbWVjaGFuaXNtLCBhbmQgd2Ugc2hvdWxkbiYjMzk7dCBhbGxvdyBvcGVyYXRpb25zIG9uIG9uZSBuYW1lc3BhY2UgdG8gaW1wbGljaXRseSBhZmZlY3QgYW5vdGhlciB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24uCgpMb29raW5nIGF0IHRoZSBjb2RlLCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGNoZWNrcyB0d28gY29uZGl0aW9uczogd2hldGhlciB0aGUgTUFDc2VjIGRldmljZSBpcyBvZmZsb2FkZWQgKHdoaWNoIGltcGxpZXMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVhbCBkZXZpY2UpIG9yIHdoZXRoZXIgdGhlIG9mZmxvYWQgc3RhdGUgaXMgY2hhbmdpbmcuIFRoZSBwYXRjaCB0aGVuIHNlZW1zIHRvIHZlcmlmeSB0aGUgY2FwYWJpbGl0eSwgYW5kIHJldHVybnMgYC1FUEVSTWAgd2l0aCBhbiBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZhaWxzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzZWN1cml0eSBtZWFzdXJlIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGNyb3NzLW5hbWVzcGFjZSBvcGVyYXRpb25zLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBkZXRlcm1pbmUgaG93IHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQvZGlzYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB3aGV0aGVyIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgcHJlc2VudCwgdG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQUNTRUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM3NjAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L0tjb25maWc9MzAyPWNvbmZpZyBBTVRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzE4OmNvbmZpZyBNQUNTRUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzE5LVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0lGQikgJiM0Mzs9IGlmYi5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfTUFDU0VDKSAmIzQzOz0gbWFjc2VjLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19BTVQpICYjNDM7PSBhbXQub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWc9MTk9Y29uZmlnIEFRVElPTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZzoyMjpcdGRlcGVuZHMgb24gTUFDU0VDIHx8IE1BQ1NFQz1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnLTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL01ha2VmaWxlPTEzPWF0bGFudGljLW9ianMgOj0gYXFfbWFpbi5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGUtMzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9NYWtlZmlsZTozNDphdGxhbnRpYy0kKENPTkZJR19NQUNTRUMpICYjNDM7PSBhcV9tYWNzZWMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGUtMzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jPTExND1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfdHhfc3RhdF9uYW1lc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0xMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMTIwLXN0YXRpYyBjb25zdCBjaGFyIGFxX21hY3NlY19zdGF0X25hbWVzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MTgzPXN0YXRpYyB1MzIgYXFfZXRodG9vbF9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0xOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTk3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMTk4LVx0aWYgKG5pYy1cdTAwM2VtYWNzZWNfY2ZnKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jPTIxMj1zdGF0aWMgdm9pZCBhcV9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0yMjEtI2VuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MjIyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjIzLVx0ZGF0YSA9IGFxX21hY3NlY19nZXRfc3RhdHMoYXFfbmljLCBkYXRhKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MjUyPXN0YXRpYyB2b2lkIGFxX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTI1OC1cdGludCBpLCBzaTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzoyNTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0yNjAtXHRpbnQgc2E7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMyMi0jZW5kaWZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozMjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zMjQtXHRcdGlmICghbmljLVx1MDAzZW1hY3NlY19jZmcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMyOC1cdFx0cCA9IHAgJiM0Mzsgc2l6ZW9mKGFxX21hY3NlY19zdGF0X25hbWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozMjk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzMwLVx0XHRcdHN0cnVjdCBhcV9tYWNzZWNfdHhzYyAqYXFfdHhzYztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzQxLVx0XHRcdGFxX3R4c2MgPSBcdTAwMjZuaWMtXHUwMDNlbWFjc2VjX2NmZy1cdTAwM2VhcV90eHNjW2ldO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjM0MjpcdFx0XHRmb3IgKHNhID0gMDsgc2EgXHUwMDNjIE1BQ1NFQ19OVU1fQU47IHNhJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM0My1cdFx0XHRcdGlmICghKHRlc3RfYml0KHNhLCBcdTAwMjZhcV90eHNjLVx1MDAzZXR4X3NhX2lkeF9idXN5KSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM1My1cdFx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjM1NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNTUtXHRcdFx0c3RydWN0IGFxX21hY3NlY19yeHNjICphcV9yeHNjO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNjAtXHRcdFx0YXFfcnhzYyA9IFx1MDAyNm5pYy1cdTAwM2VtYWNzZWNfY2ZnLVx1MDAzZWFxX3J4c2NbaV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MzYxOlx0XHRcdGZvciAoc2EgPSAwOyBzYSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgc2EmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzYyLVx0XHRcdFx0aWYgKCEodGVzdF9iaXQoc2EsIFx1MDAyNmFxX3J4c2MtXHUwMDNlcnhfc2FfaWR4X2J1c3kpKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMC0jaW5jbHVkZSBcJiMzNDttYWNzZWMvbWFjc2VjX2FwaS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTojZGVmaW5lIEFRX01BQ1NFQ19LRVlfTEVOXzEyOF9CSVQgMTZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEyOiNkZWZpbmUgQVFfTUFDU0VDX0tFWV9MRU5fMTkyX0JJVCAyNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTM6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8yNTZfQklUIDMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00OT1zdGF0aWMgaW50IGFxX2dldF90eHNjX2lkeF9mcm9tX3NlY3koc3RydWN0IGFxX21hY3NlY19jZmcgKm1hY3NlY19jZmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo1NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01OC1cdFx0aWYgKG1hY3NlY19jZmctXHUwMDNlYXFfdHhzY1tpXS5zd19zZWN5ID09IHNlY3kpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9NjQ9c3RhdGljIGludCBhcV9nZXRfcnhzY19pZHhfZnJvbV9yeHNjKHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzI6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzMtXHRcdGlmIChtYWNzZWNfY2ZnLVx1MDAzZWFxX3J4c2NbaV0uc3dfcnhzYyA9PSByeHNjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTk3PXN0YXRpYyB2b2lkIGFxX3JvdGF0ZV9rZXlzKHUzMiAoKmtleSlbOF0sIGNvbnN0IGludCBrZXlfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwNDpcdGlmIChrZXlfbGVuID09IEFRX01BQ1NFQ19LRVlfTEVOXzEyOF9CSVQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEwNS1cdFx0KCprZXkpWzBdID0gc3dhYjMyKHRtcFszXSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA4LVx0XHQoKmtleSlbM10gPSBzd2FiMzIodG1wWzBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwOTpcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBBUV9NQUNTRUNfS0VZX0xFTl8xOTJfQklUKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMTAtXHRcdCgqa2V5KVswXSA9IHN3YWIzMih0bXBbNV0pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExNS1cdFx0KCprZXkpWzVdID0gc3dhYjMyKHRtcFswXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTY6XHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gQVFfTUFDU0VDX0tFWV9MRU5fMjU2X0JJVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTE3LVx0XHQoKmtleSlbMF0gPSBzd2FiMzIodG1wWzddKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMzM9c3RhdGljIGludCBhcV9nZXRfbWFjc2VjX2NvbW1vbl9zdGF0cyhzdHJ1Y3QgYXFfaHdfcyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQwOlx0LyogTUFDU0VDIGNvdW50ZXJzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNDEtXHRyZXQgPSBhcV9tc3NfZ2V0X2luZ3Jlc3NfY29tbW9uX2NvdW50ZXJzKGh3LCBcdTAwMjZpbmdyZXNzX2NvdW50ZXJzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0zMDE9c3RhdGljIGludCBhcV9tZG9fZGV2X3N0b3Aoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMzA1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MzA2Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTMwNy1cdFx0aWYgKG5pYy1cdTAwM2VtYWNzZWNfY2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kgXHUwMDI2IEJJVChpKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0zMTU9c3RhdGljIGludCBhcV9zZXRfdHhzYyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHR4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2MC1cdHN3aXRjaCAoc2VjeS1cdTAwM2VrZXlfbGVuKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjE6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzEyOF9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjItXHRcdHNjX3JlYy5zYWtfbGVuID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2My1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjQ6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzE5Ml9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjUtXHRcdHNjX3JlYy5zYWtfbGVuID0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2Ni1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjc6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzI1Nl9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjgtXHRcdHNjX3JlYy5zYWtfbGVuID0gMjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00NDA9c3RhdGljIGludCBhcV9tZG9fYWRkX3NlY3koc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNDUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NDUyOlx0c2Nfc2EgPSBzY19zYV9mcm9tX251bV9hbihNQUNTRUNfTlVNX0FOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTQ1My1cdGlmIChzY19zYSA9PSBhcV9tYWNzZWNfc2Ffc2Nfbm90X3VzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNDU5LVx0dHhzY19pZHggPSBmZnooY2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NDYwOlx0aWYgKHR4c2NfaWR4ID09IEFRX01BQ1NFQ19NQVhfU0MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy00NjEtXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTQ5Mj1zdGF0aWMgaW50IGFxX2NsZWFyX3R4c2Moc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IGludCB0eHNjX2lkeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01MDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo1MDI6XHRmb3JfZWFjaF9zZXRfYml0IChzYV9udW0sIFx1MDAyNnR4X3NjLVx1MDAzZXR4X3NhX2lkeF9idXN5LCBBUV9NQUNTRUNfTUFYX1NBKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01MDMtXHRcdHJldCA9IGFxX2NsZWFyX3R4c2EobmljLCB0eF9zYywgc2FfbnVtLCBjbGVhcl90eXBlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz02NzA9c3RhdGljIGludCBhcV9yeHNjX3ZhbGlkYXRlX2ZyYW1lcyhjb25zdCBlbnVtIG1hY3NlY192YWxpZGF0aW9uX3R5cGUgdmFsaWRhdGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNjcyLVx0c3dpdGNoICh2YWxpZGF0ZSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NjczOlx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfRElTQUJMRUQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzQtXHRcdHJldHVybiAyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Njc1Olx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfQ0hFQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzYtXHRcdHJldHVybiAxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Njc3Olx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfU1RSSUNUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNjc4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz02ODY9c3RhdGljIGludCBhcV9zZXRfcnhzYyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgdTMyIHJ4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTcwMC1cdHByZV9jbGFzc19yZWNvcmQuc2NpX21hc2sgPSAweGZmO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzAxOlx0LyogbWF0Y2ggYWxsIE1BQ1NFQyBldGhlcnR5cGUgcGFja2V0cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzAyOlx0cHJlX2NsYXNzX3JlY29yZC5ldGhfdHlwZSA9IEVUSF9QX01BQ1NFQztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTcwMy1cdHByZV9jbGFzc19yZWNvcmQuZXRoX3R5cGVfbWFzayA9IDB4Mztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz03ODg9c3RhdGljIGludCBhcV9jbGVhcl9yeHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCBpbnQgcnhzY19pZHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzk1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Nzk2Olx0Zm9yX2VhY2hfc2V0X2JpdCAoc2FfbnVtLCBcdTAwMjZyeF9zYy1cdTAwM2VyeF9zYV9pZHhfYnVzeSwgQVFfTUFDU0VDX01BWF9TQSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzk3LVx0XHRyZXQgPSBhcV9jbGVhcl9yeHNhKG5pYywgcnhfc2MsIHNhX251bSwgY2xlYXJfdHlwZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9ODU0PXN0YXRpYyBpbnQgYXFfdXBkYXRlX3J4c2Eoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IHVuc2lnbmVkIGludCBzY19pZHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtODgxLVx0c3dpdGNoIChzZWN5LVx1MDAzZWtleV9sZW4pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjg4MjpcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTI4X0JJVDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTg4My1cdFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTg4NC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo4ODU6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzE5Ml9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODYtXHRcdHNhX2tleV9yZWNvcmQua2V5X2xlbiA9IDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODctXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODg4Olx0Y2FzZSBBUV9NQUNTRUNfS0VZX0xFTl8yNTZfQklUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtODg5LVx0XHRzYV9rZXlfcmVjb3JkLmtleV9sZW4gPSAyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTEwODE9c3RhdGljIGludCBhcV9tZG9fZ2V0X3J4X3NjX3N0YXRzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEwOTctXHRhcV9yeHNjID0gXHUwMDI2Y2ZnLVx1MDAzZWFxX3J4c2NbcnhzY19pZHhdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTA5ODpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BQ1NFQ19OVU1fQU47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMDk5LVx0XHRpZiAoIXRlc3RfYml0KGksIFx1MDAyNmFxX3J4c2MtXHUwMDNlcnhfc2FfaWR4X2J1c3kpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTExNjc9c3RhdGljIGludCBhcHBseV90eHNjX2NmZyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHR4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExODEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTgyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExODMtXHRcdHR4X3NhID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNlY3ktXHUwMDNldHhfc2Muc2FbaV0pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTExOTU9c3RhdGljIGludCBhcHBseV9yeHNjX2NmZyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHJ4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyMDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMjEwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyMTEtXHRcdHJ4X3NhID0gcmN1X2RlcmVmZXJlbmNlX2JoKGFxX3J4c2MtXHUwMDNlc3dfcnhzYy1cdTAwM2VzYVtpXSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9MTI3OD1zdGF0aWMgaW50IGFxX2FwcGx5X21hY3NlY19jZmcoc3RydWN0IGFxX25pY19zICpuaWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTI4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEyODM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTI4NC1cdFx0aWYgKG5pYy1cdTAwM2VtYWNzZWNfY2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kgXHUwMDI2IEJJVChpKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMjkxOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyOTItXHRcdGlmIChuaWMtXHUwMDNlbWFjc2VjX2NmZy1cdTAwM2VyeHNjX2lkeF9idXN5IFx1MDAyNiBCSVQoaSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMzMzPXN0YXRpYyB2b2lkIGFxX2NoZWNrX3R4c2FfZXhwaXJhdGlvbihzdHJ1Y3QgYXFfbmljX3MgKm5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTM1NjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0E7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzU3LVx0XHRpZiAoZWdyZXNzX3NhX2V4cGlyZWQgXHUwMDI2IEJJVChpKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE0NDg9aW50IGFxX21hY3NlY19pbml0KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNDU4Olx0aWYgKCEoY2Fwc19sbyBcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNDU5LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNDY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQ2NTpcdG5pYy1cdTAwM2VuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfTUFDU0VDO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTQ2Ni1cdG5pYy1cdTAwM2VuZGV2LVx1MDAzZW1hY3NlY19vcHMgPSBcdTAwMjZhcV9tYWNzZWNfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE0Nzg9aW50IGFxX21hY3NlY19lbmFibGUoc3RydWN0IGFxX25pY19zICpuaWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUyMC1cdFx0dHhfY3RsZl9yZWMubWF0Y2hfbWFzayA9IDB4ZjsgLyogbWF0Y2ggZm9yIGV0aF90eXBlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTIxOlx0XHR0eF9jdGxmX3JlYy5hY3Rpb24gPSAwOyAvKiBCeXBhc3MgTUFDU0VDIG1vZHVsZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE1MjItXHRcdHRibF9pZHggPSBOVU1ST1dTX0VHUkVTU0NUTEZSRUNPUkQgLSBudW1fY3RsX2V0aGVyX3R5cGVzIC0gMTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTI4LVx0XHRyeF9wcmVjdGxmX3JlYy5tYXRjaF9tYXNrID0gMHhmOyAvKiBtYXRjaCBmb3IgZXRoX3R5cGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE1Mjk6XHRcdHJ4X3ByZWN0bGZfcmVjLmFjdGlvbiA9IDA7IC8qIEJ5cGFzcyBNQUNTRUMgbW9kdWxlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUzMC1cdFx0dGJsX2lkeCA9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9MTU1Nz1pbnQgYXFfbWFjc2VjX3J4X3NhX2NudChzdHJ1Y3QgYXFfbmljX3MgKm5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTU2NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTY4LVx0XHRpZiAoIXRlc3RfYml0KGksIFx1MDAyNmNmZy1cdTAwM2VyeHNjX2lkeF9idXN5KSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNTkxPWludCBhcV9tYWNzZWNfdHhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjAxOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MDItXHRcdGlmICghdGVzdF9iaXQoaSwgXHUwMDI2Y2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE2MTE9c3RhdGljIGludCBhcV9tYWNzZWNfdXBkYXRlX3N0YXRzKHN0cnVjdCBhcV9uaWNfcyAqbmljKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjIyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MjMtXHRcdGlmICghKGNmZy1cdTAwM2V0eHNjX2lkeF9idXN5IFx1MDAyNiBCSVQoaSkpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjMyOlx0XHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYzMy1cdFx0XHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXHUwMDI2YXFfdHhzYy1cdTAwM2V0eF9zYV9pZHhfYnVzeSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE2NDM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0NC1cdFx0aWYgKCEodGVzdF9iaXQoaSwgXHUwMDI2Y2ZnLVx1MDAzZXJ4c2NfaWR4X2J1c3kpKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTY0ODpcdFx0Zm9yIChhc3NvY19udW0gPSAwOyBhc3NvY19udW0gXHUwMDNjIE1BQ1NFQ19OVU1fQU47IGFzc29jX251bSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2NDktXHRcdFx0aWYgKCF0ZXN0X2JpdChhc3NvY19udW0sIFx1MDAyNmFxX3J4c2MtXHUwMDNlcnhfc2FfaWR4X2J1c3kpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE2NjM9dTY0ICphcV9tYWNzZWNfZ2V0X3N0YXRzKHN0cnVjdCBhcV9uaWNfcyAqbmljLCB1NjQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTcwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MDc6XHRmb3IgKHNjX251bSA9IDA7IHNjX251bSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgc2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTcwOC1cdFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcdTAwMjZjZmctXHUwMDNldHhzY19pZHhfYnVzeSkpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNzE5Olx0XHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTcyMC1cdFx0XHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXHUwMDI2YXFfdHhzYy1cdTAwM2V0eF9zYV9pZHhfYnVzeSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTczMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MzI6XHRmb3IgKHNjX251bSA9IDA7IHNjX251bSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgc2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTczMy1cdFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcdTAwMjZjZmctXHUwMDNlcnhzY19pZHhfYnVzeSkpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNzM4Olx0XHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTczOS1cdFx0XHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXHUwMDI2YXFfcnhzYy1cdTAwM2VyeF9zYV9pZHhfYnVzeSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjY6I2lmbmRlZiBBUV9NQUNTRUNfSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6NzojZGVmaW5lIEFRX01BQ1NFQ19IXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTE0PXN0cnVjdCBhcV9uaWNfcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTY6I2RlZmluZSBBUV9NQUNTRUNfTUFYX1NDIDMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxNzojZGVmaW5lIEFRX01BQ1NFQ19NQVhfU0EgMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTE4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTkwPXN0cnVjdCBhcV9tYWNzZWNfdHhzYyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTMtXHRjb25zdCBzdHJ1Y3QgbWFjc2VjX3NlY3kgKnN3X3NlY3k7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDo5NDpcdHU4IHR4X3NhX2tleVtNQUNTRUNfTlVNX0FOXVtNQUNTRUNfTUFYX0tFWV9MRU5dO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTUtXHRzdHJ1Y3QgYXFfbWFjc2VjX3R4X3NjX3N0YXRzIHN0YXRzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6OTY6XHRzdHJ1Y3QgYXFfbWFjc2VjX3R4X3NhX3N0YXRzIHR4X3NhX3N0YXRzW01BQ1NFQ19OVU1fQU5dO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTctfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaD05OT1zdHJ1Y3QgYXFfbWFjc2VjX3J4c2Mge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTEwMy1cdGNvbnN0IHN0cnVjdCBtYWNzZWNfcnhfc2MgKnN3X3J4c2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxMDQ6XHR1OCByeF9zYV9rZXlbTUFDU0VDX05VTV9BTl1bTUFDU0VDX01BWF9LRVlfTEVOXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjEwNTpcdHN0cnVjdCBhcV9tYWNzZWNfcnhfc2Ffc3RhdHMgcnhfc2Ffc3RhdHNbTUFDU0VDX05VTV9BTl07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMDYtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaD0xMDg9c3RydWN0IGFxX21hY3NlY19jZmcge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExMS1cdHVuc2lnbmVkIGxvbmcgdHhzY19pZHhfYnVzeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjExMjpcdHN0cnVjdCBhcV9tYWNzZWNfdHhzYyBhcV90eHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtMTEzLVx0LyogSW5ncmVzcyBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExNC1cdHVuc2lnbmVkIGxvbmcgcnhzY19pZHhfYnVzeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjExNTpcdHN0cnVjdCBhcV9tYWNzZWNfcnhzYyBhcV9yeHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtMTE2LVx0LyogU3RhdGlzdGljcyAvIGNvdW50ZXJzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg9MTI5PWludCBhcV9tYWNzZWNfdHhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxMzM6I2VuZGlmIC8qIEFRX01BQ1NFQ19IICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM9MTY0PXN0YXRpYyBpbnQgYXFfbmljX3VwZGF0ZV9saW5rX3N0YXR1cyhzdHJ1Y3QgYXFfbmljX3MgKnNlbGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMjEwLVx0XHRuZXRpZl9jYXJyaWVyX29uKHNlbGYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzoyMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTIxMi1cdFx0YXFfbWFjc2VjX2VuYWJsZShzZWxmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYz0yNDM9c3RhdGljIHZvaWQgYXFfbmljX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMjU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM6MjU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yNTktXHRhcV9tYWNzZWNfd29yayhzZWxmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYz0zMTU9aW50IGFxX25pY19uZGV2X3JlZ2lzdGVyKHN0cnVjdCBhcV9uaWNfcyAqc2VsZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0zMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzozMjk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTMzMC1cdGFxX21hY3NlY19pbml0KHNlbGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTM3Ny1lcnJfZXhpdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jOjM3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMzc5LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaD0xMjc9c3RydWN0IGFxX25pY19zIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaC0xNTctXHRzdHJ1Y3QgbXV0ZXggZndyZXFfbXV0ZXg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaDoxNTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5oLTE1OS1cdHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3BjaV9mdW5jLmM9MzQyPXN0YXRpYyB2b2lkIGFxX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYy0zNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wY2lfZnVuYy5jOjM1MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYy0zNTItXHRcdGFxX21hY3NlY19mcmVlKHNlbGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHMuaD00NTE9ZW51bSBod19hdGxfZncyeF9jYXBzX2xvIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmgtNDY2LVx0Q0FQU19MT19TTUJVU19XUklURSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHMuaDo0Njc6XHRDQVBTX0xPX01BQ1NFQyAgICAgICAgICAgID0gMTUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmgtNDY4LVx0Q0FQU19MT19SRVNFUlZFRDEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYzo1OTojZGVmaW5lIEhXX0FUTF9GVzJYX0NBUF9NQUNTRUMgICAgICAgICAgIEJJVChDQVBTX0xPX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTYwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jPTY2ND1zdGF0aWMgaW50IGFxX2Z3Mnhfc2VuZF9tYWNzZWNfcmVxKHN0cnVjdCBhcV9od19zICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02NzctXHRjYXBzX2xvID0gYXFfZncyeF9nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njc4Olx0aWYgKCEoY2Fwc19sbyBcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02NzktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02ODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYzo2ODc6XHQvKiBUb2dnbGUgMHgzNjguQ0FQU19MT19NQUNTRUMgYml0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02ODgtXHRsb3dfcmVxID0gYXFfaHdfcmVhZF9yZWcoaHcsIEhXX0FUTF9GVzJYX01QSV9DT05UUk9MX0FERFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njg5Olx0bG93X3JlcSBePSBIV19BVExfRlcyWF9DQVBfTUFDU0VDO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjkwLVx0YXFfaHdfd3JpdGVfcmVnKGh3LCBIV19BVExfRlcyWF9NUElfQ09OVFJPTF9BRERSLCBsb3dfcmVxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02OTMtXHRlcnIgPSByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljKGFxX2Z3Mnhfc3RhdGVfZ2V0LCBodywgbG93X3N0YXR1cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jOjY5NDpcdFx0bG93X3JlcSAhPSAobG93X3N0YXR1cyBcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSksIDFVLCAxMDAwMFUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjk1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jPTQ5PXN0YXRpYyBpbnQgYXFfbXNzX21kaW9fd3JpdGUoc3RydWN0IGFxX2h3X3MgKmh3LCB1MTYgbW1kLCB1MTYgYWRkciwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuYy01NS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuYzo1NjogKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDU0VDIGNvbmZpZyBhbmQgc3RhdHVzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jLTU3LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDo2OiNpZm5kZWYgX19NQUNTRUNfQVBJX0hfX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDo3OiNkZWZpbmUgX19NQUNTRUNfQVBJX0hfX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC04LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmg9MzIwPWludCBhcV9tc3Nfc2V0X2VncmVzc19zYV90aHJlc2hvbGRfZXhwaXJlZChzdHJ1Y3QgYXFfaHdfcyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC0zMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oOjMyMzojZW5kaWYgLyogX19NQUNTRUNfQVBJX0hfXyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0LmgtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg6NjojaWZuZGVmIF9NQUNTRUNfU1RSVUNUX0hfXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oOjc6I2RlZmluZSBfTUFDU0VDX1NUUlVDVF9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC04LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg9NDU9c3RydWN0IGFxX21zc19lZ3Jlc3NfY2xhc3NfcmVjb3JkIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTE0NS1cdCAqICBOb3RlOiBJZiB0aGlzIGZpZWxkIGlzIG5vdCAwLCB0aGlzIG1lYW5zIHRoZSBpbnB1dCBwYWNrZXQmIzM5O3NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg6MTQ2Olx0ICogIFNFQ1RBRyBpcyBleHBsaWNpdGx5IHRhZ2dlZCBhbmQgTUFDU0VDIG1vZHVsZSB3aWxsIG9ubHkgdXBkYXRlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTE0Ny1cdCAqICB0aGUgTVNEVS5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oPTM1Mz1zdHJ1Y3QgYXFfbXNzX2luZ3Jlc3NfcHJlY2xhc3NfcmVjb3JkIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTQ2Mi1cdCAqICAxOiBQcm9jZXNzIGJ1dCBrZWVwIFNFQ1RBRzogRm9yd2FyZCB0byBuZXh0IHR3byBtb2R1bGVzIGZvclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaDo0NjM6XHQgKiAgICAgODAyLjFBRSBkZWNyeXB0aW9uIGJ1dCBrZWVwIHRoZSBNQUNTRUMgaGVhZGVyIHdpdGggYWRkZWQgZXJyb3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0LmgtNDY0LVx0ICogICAgIGNvZGUgaW5mb3JtYXRpb24uIElDViB3aWxsIGJlIHN0cmlwcGVkIGZvciBhbGwgY29udHJvbCBwYWNrZXRzLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3VuaW1hYy5oLTYwLSNkZWZpbmUgVU1BQ19SWF9JUEdfSU5WXHRcdFx0MHgwNzhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3VuaW1hYy5oOjYxOiNkZWZpbmUgVU1BQ19NQUNTRUNfUFJPR19UWF9DUkNcdFx0MHgzMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3VuaW1hYy5oOjYyOiNkZWZpbmUgVU1BQ19NQUNTRUNfQ1RSTFx0XHQweDMxNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdW5pbWFjLmgtNjMtI2RlZmluZSBVTUFDX1BBVVNFX0NUUkxcdFx0XHQweDMzMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguaD0zMDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZHBhYTJfZmFlYWQgKmRwYWEyX2dldF9mYWVhZCh2b2lkICpidWZfYWRkciwgYm9vbCBzd2EpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oLTMxNS0jZGVmaW5lIERQQUEyX0ZBU19ESVNDXHRcdFx0MHg4MDAwMDAwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oOjMxNjovKiBNQUNTRUMgZnJhbWUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguaC0zMTctI2RlZmluZSBEUEFBMl9GQVNfTVNcdFx0XHQweDQwMDAwMDAwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaD01Nj1zdHJ1Y3QgZHBrZ19tYXNrIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oLTM0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzQ4Oi8qIE1BQ1NFQyBmaWVsZHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzQ5OiNkZWZpbmUgTkhfRkxEX01BQ1NFQ19TRUNUQUdcdFx0XHRCSVQoMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzUwOiNkZWZpbmUgTkhfRkxEX01BQ1NFQ19BTExfRklFTERTXHRcdChCSVQoMSkgLSAxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zNTEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaD0zNTY9ZW51bSBuZXRfcHJvdCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zODQtXHRORVRfUFJPVF9VRFBfRU5DX0VTUCwgLyogUkZDIDM5NDggKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6Mzg1Olx0TkVUX1BST1RfTUFDU0VDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zODYtXHRORVRfUFJPVF9HUkUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC01Mi0jZGVmaW5lIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFcdFx0XHQweEEyMjJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6NTM6I2RlZmluZSBITkFFM19ERVZfSURfMjVHRV9SRE1BX01BQ1NFQ1x0XHQweEEyMjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNTQtI2RlZmluZSBITkFFM19ERVZfSURfNTBHRV9SRE1BXHRcdFx0MHhBMjI0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjU1OiNkZWZpbmUgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUNcdFx0MHhBMjI1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjU2OiNkZWZpbmUgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUNcdFx0MHhBMjI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTU3LSNkZWZpbmUgSE5BRTNfREVWX0lEXzIwMEdfUkRNQVx0XHRcdDB4QTIyOFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBobnMzX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy05OC1cdH0sIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjk5Olx0XHRQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwMC1cdFx0LmRyaXZlcl9kYXRhID0gSE5BRTNfREVWX1NVUFBPUlRfUk9DRV9EQ0JfQklUUyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0xMDQtXHR9LCB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzoxMDU6XHRcdFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUMpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMTA2LVx0XHQuZHJpdmVyX2RhdGEgPSBITkFFM19ERVZfU1VQUE9SVF9ST0NFX0RDQl9CSVRTLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMTA3LVx0fSwge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MTA4Olx0XHRQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8xMDBHX1JETUFfTUFDU0VDKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwOS1cdFx0LmRyaXZlcl9kYXRhID0gSE5BRTNfREVWX1NVUFBPUlRfUk9DRV9EQ0JfQklUUyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTAxPWJvb2wgaG5zM19pc19waHlzX2Z1bmMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzEwOC1cdGNhc2UgSE5BRTNfREVWX0lEXzI1R0VfUkRNQTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxMDk6XHRjYXNlIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzExMC1cdGNhc2UgSE5BRTNfREVWX0lEXzUwR0VfUkRNQTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxMTE6XHRjYXNlIEhOQUUzX0RFVl9JRF81MEdFX1JETUFfTUFDU0VDOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzExMjpcdGNhc2UgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTEzLVx0Y2FzZSBITkFFM19ERVZfSURfMjAwR19SRE1BOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oPTE3PWVudW0gaG5zM19uaWNfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oLTE2MS0jZGVmaW5lIEhOUzNfVFhEX09WTEFOX0JcdFx0XHQyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuaDoxNjI6I2RlZmluZSBITlMzX1RYRF9NQUNTRUNfQlx0XHRcdDNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oLTE2My0jZGVmaW5lIEhOUzNfVFhEX1RVTlRZUEVfU1x0XHRcdDRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZV9hbGdvX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTc0LVx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUEpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjc1Olx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy03Ni1cdHsgUENJX1ZERVZJQ0UoSFVBV0VJLCBITkFFM19ERVZfSURfNTBHRV9SRE1BKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo3NzpcdHsgUENJX1ZERVZJQ0UoSFVBV0VJLCBITkFFM19ERVZfSURfNTBHRV9SRE1BX01BQ1NFQykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6Nzg6XHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTc5LVx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yMDBHX1JETUEpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzY6XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM3LVx0ZGVwZW5kcyBvbiAoNjRCSVQgXHUwMDI2XHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQwLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0MTpcdGRlcGVuZHMgb24gTUFDU0VDIHx8ICFNQUNTRUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oPTU3Mj1zdHJ1Y3QgZ2V0X2h3X2NhcF9yc3Age1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaC01NzYtXHR1OCBucGNfaGFzaF9leHRyYWN0O1x0LyogSXMgaGFzaCBleHRyYWN0IHN1cHBvcnRlZCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oOjU3NzojZGVmaW5lIEhXX0NBUF9NQUNTRUNcdFx0QklUX1VMTCgxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oLTU3OC1cdHU2NCBod19jYXBzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTIxMTM9aW50IHJ2dV9tYm94X2hhbmRsZXJfZ2V0X2h3X2NhcChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMjEyMi1cdGlmIChydnUtXHUwMDNlbWNzX2Jsa19jbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzoyMTIzOlx0XHRyc3AtXHUwMDNlaHdfY2FwcyA9IEhXX0NBUF9NQUNTRUM7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDT05GSUdfTUFDU0VDKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19NQUNTRUNgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxOCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQsIGltcG9ydGFudGx5LCB3aGVyZSB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb3RoZXIgbmV0d29yayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLCBtYXliZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IG9wdGlvbnMsIG9yIGV2ZW4ga2VybmVsIGZlYXR1cmUgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBNQUNTRUNgIGNhbiBiZSBjb25zaWRlcmVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgdGhlIGBNQUNTRUNgIG9wdGlvbiB0byBldmVuIGJlIGF2YWlsYWJsZSwgbGV0IGFsb25lIGFjdHVhbGx5IGZ1bmN0aW9uYWwuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgZWZmaWNpZW50IGtlcm5lbCBjb25maWd1cmF0aW9uIHdvcmssIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0aXZlbHkgY29tcGxleCBsaWtlIE1BQ3NlYy4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGVsc2UgaXMgZ29pbmcgdG8gdHJpcCBtZSB1cC4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAzMTY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxuIDMxNzpcdFxuIDMxODpcdGNvbmZpZyBNQUNTRUNcbiAzMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjFBRSBNQUMtbGV2ZWwgZW5jcnlwdGlvbiAoTUFDc2VjKVwmIzM0O1xuIDMyMDpcdFx0c2VsZWN0IENSWVBUT1xuIDMyMTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAzMjI6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gMzIzOlx0XHRzZWxlY3QgR1JPX0NFTExTXG4gMzI0Olx0XHRoZWxwXG4gMzI1Olx0XHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXG4gMzI2Olx0XG4gMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1BQ3NlYyBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBjaGFuZ2VzLCBhbmQgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgTUFDc2VjIGltcGxlbWVudGF0aW9uIHJlc2lkZXMsIHNvIGFueSBzaWduaWZpY2FudCBhbHRlcmF0aW9ucyBhcmUgYm91bmQgdG8gYmUgY2VudGVyZWQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgb3IgYnVnIGZpeCB0aGlzIGNvbW1pdCBhZGRyZXNzZXMuIFRoZSBmaWxlJiMzOTtzIHN0cnVjdHVyZSBzaG91bGQgZ3VpZGUgbWUuIEkmIzM5O2xsIGxpa2VseSBiZWdpbiBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSB0b3AsIGxvb2tpbmcgZm9yIGluY2x1ZGUgZmlsZSBjaGFuZ2VzLCBuZXcgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBvciBnbG9iYWwgdmFyaWFibGUgdXBkYXRlcywgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbWlnaHQgYmUgbmV3IHdpdGhpbiB0aGUgd2hvbGUgaW1wbGVtZW50YXRpb24uIFRoZW4gSSB3aWxsIHN0YXJ0IGdvaW5nIHRocm91Z2ggc3BlY2lmaWMgZnVuY3Rpb25zIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkLiBUaGVuIEkgd2lsbCBjb21wYXJlIHRoZSBjaGFuZ2VzIG9uIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk0MDpcdFx0XHRpZiAoc2VjeS1cdTAwM2V4cG4gXHUwMDI2XHUwMDI2XG4zOTQxOlx0XHRcdCAgICByZXBsYXlfd2luZG93IFx1MDAzZSBNQUNTRUNfWFBOX01BWF9SRVBMQVlfV0lORE9XKVxuMzk0MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzk0MzpcdFx0XHRXUklURV9PTkNFKHNlY3ktXHUwMDNlcmVwbGF5X3dpbmRvdywgcmVwbGF5X3dpbmRvdyk7XG4zOTQ0Olx0XHR9XG4zOTQ1Olx0XG4zOTQ2Olx0XHRyZXR1cm4gMDtcbjM5NDc6XHR9XG4zOTQ4Olx0XG4zOTQ5Olx0LyogQm90aCBhIGNoYW5nZSBvZiB0aGUgb2ZmbG9hZCBzdGF0ZSAobWRvX2FkZF9zZWN5KCkvbWRvX2RlbF9zZWN5KCkpIGFuZFxuMzk1MDpcdCAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbjM5NTE6XHQgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxuMzk1MjpcdCAqIGZyb20gdGhlIG1hY3NlYyBkZXZpY2UuIFJlcXVpcmUgQ0FQX05FVF9BRE1JTiBvdmVyIHJlYWxfZGV2JiMzOTtzIG5hbWVzcGFjZVxuMzk1MzpcdCAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuMzk1NDpcdCAqL1xuMzk1NTpcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjM5NTY6XHRcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTc6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTg6XHR7XG4zOTU5Olx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NjA6XHRcdGJvb2wgcmVhY2hlc19yZWFsX2RldjtcbjM5NjE6XHRcbjM5NjI6XHRcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4zOTYzOlx0XHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcdTAwMjZcdTAwMjZcbjM5NjQ6XHRcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cdTAwM2VvZmZsb2FkKVxuMzk2NTpcdFx0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbjM5NjY6XHRcbjM5Njc6XHRcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxuMzk2ODpcdFx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuMzk2OTpcdFx0XHRyZXR1cm4gMDtcbjM5NzA6XHRcbjM5NzE6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjM5NzI6XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk3MzpcdFx0cmV0dXJuIC1FUEVSTTtcbjM5NzQ6XHR9XG4zOTc1Olx0XG4zOTc2Olx0c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMzk3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMzk3ODpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzk3OTpcdHtcbjM5ODA6XHRcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xuMzk4MTpcdFx0Ym9vbCBtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSBmYWxzZTtcbjM5ODI6XHRcdGVudW0gbWFjc2VjX29mZmxvYWQgb2ZmbG9hZDtcbjM5ODM6XHRcdHN0cnVjdCBtYWNzZWNfdHhfc2MgdHhfc2M7XG4zOTg0Olx0XHRzdHJ1Y3QgbWFjc2VjX3NlY3kgc2VjeTtcbjM5ODU6XHRcdGludCByZXQ7XG4zOTg2Olx0XG4zOTg3Olx0XHRpZiAoIWRhdGEpXG4zOTg4Olx0XHRcdHJldHVybiAwO1xuMzk4OTpcdFxuMzk5MDpcdFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuMzk5MTpcdFx0aWYgKHJldClcbjM5OTI6XHRcdFx0cmV0dXJuIHJldDtcbjM5OTM6XHRcbjM5OTQ6XHRcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbjM5OTU6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4zOTk2Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4zOTk3Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcbjM5OTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk5Olx0XG40MDAwOlx0XHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXG40MDAxOlx0XHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cbjQwMDI6XHRcdCAqL1xuNDAwMzpcdFx0bWVtY3B5KFx1MDAyNnNlY3ksIFx1MDAyNm1hY3NlYy1cdTAwM2VzZWN5LCBzaXplb2Yoc2VjeSkpO1xuNDAwNDpcdFx0bWVtY3B5KFx1MDAyNnR4X3NjLCBcdTAwMjZtYWNzZWMtXHUwMDNlc2VjeS50eF9zYywgc2l6ZW9mKHR4X3NjKSk7XG40MDA1Olx0XG40MDA2Olx0XHRyZXQgPSBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oZGV2LCBkYXRhKTtcbjQwMDc6XHRcdGlmIChyZXQpXG40MDA4Olx0XHRcdGdvdG8gY2xlYW51cDtcbjQwMDk6XHRcbjQwMTA6XHRcdGlmIChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdKSB7XG40MDExOlx0XHRcdG9mZmxvYWQgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xuNDAxMjpcdFx0XHRpZiAobWFjc2VjLVx1MDAzZW9mZmxvYWQgIT0gb2ZmbG9hZCkge1xuNDAxMzpcdFx0XHRcdG1hY3NlY19vZmZsb2FkX3N0YXRlX2NoYW5nZSA9IHRydWU7XG40MDE0Olx0XHRcdFx0cmV0ID0gbWFjc2VjX3VwZGF0ZV9vZmZsb2FkKGRldiwgb2ZmbG9hZCwgZXh0YWNrKTtcbjQwMTU6XHRcdFx0XHRpZiAocmV0KVxuNDAxNjpcdFx0XHRcdFx0Z290byBjbGVhbnVwO1xuNDAxNzpcdFx0XHR9XG40MDE4Olx0XHR9XG40MDE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBHaXQgTG9nOiBDb250ZXh0IGlzIEtleSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgb2YgdGhpcyBwYXRjaCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgZ2l0IGxvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcy4gVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBhbmQgb2Z0ZW4gbGVhdmVzIG91dCBjcnVjaWFsIGRldGFpbHMuIEkmIzM5O20gaG9waW5nIHRoZSBjb21taXQgaGlzdG9yeSB3aWxsIGlsbHVtaW5hdGUgdGhlIGF1dGhvciYjMzk7cyByYXRpb25hbGUsIG1heWJlIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHByb2JsZW0gdGhleSB3ZXJlIHRyeWluZyB0byBzb2x2ZSwgb3IgYW55IGRlc2lnbiBkZWNpc2lvbnMgdGhhdCB3ZXJlIGltcGxpY2l0IGJ1dCBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBjb2RlIGl0c2VsZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gcHJldmlvdXMgY29tbWl0cyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgd2hpY2ggY291bGQgc2hvdyB0aGUgZXZvbHV0aW9uIG9mIHRoZSBmZWF0dXJlIG9yIGJ1ZyBmaXguIERpZCB0aGV5IGxpbmsgYW4gaXNzdWU/IERpZCB0aGV5IHJlZmVyZW5jZSByZWxhdGVkIGRpc2N1c3Npb25zIG9yIGRlc2lnbiBkb2NzPyBBbGwgb2YgdGhpcyBoZWxwcyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIHdpbGwgYWxsb3cgbWUgdG8gcHJvdmlkZSBpbmZvcm1lZCBmZWVkYmFjay4gVW5kZXJzdGFuZGluZyB0aGUgYXV0aG9yJiMzOTtzIGludGVudCByZWR1Y2VzIHdhc3RlZCB0aW1lIGFuZCBtZW50YWwgZWZmb3J0LCBhbmQgaGVscHMgcHJldmVudCBhc3N1bXB0aW9ucyB0aGF0IGNhbiBsZWFkIHRvIGluY29ycmVjdCBjb25jbHVzaW9ucyBvciBtaXNkaXJlY3RlZCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jPTM4NzE9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTU0LSAqL1xuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk1NTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTU2LVx0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jPTM5NzY9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODktXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTkwOlx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk5MS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTc5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNYWNzZWMgVXNhZ2UgaW4gU3l6a2FsbGVyKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQ3NlYyBpcyBiZWluZyB1c2VkIGFuZCB0ZXN0ZWQgd2l0aGluIHRoZSBzeXprYWxsZXIgZnJhbWV3b3JrLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gcmVjZW50IGNvbW1pdHMgb3IgcmVsYXRlZCBhY3Rpdml0eSDigJMgZXNzZW50aWFsbHksIHRoZSBicmVhZGNydW1icyB0aGF0IG1pZ2h0IGxlYWQgbWUgdG8gcmVsZXZhbnQgZXhhbXBsZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgaG93IE1BQ3NlYyBpcyBpbnN0cnVtZW50ZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSB0ZXN0ZWQgd2l0aGluIHN5emthbGxlciYjMzk7cyBlY29zeXN0ZW0uCgpOZXh0LCBJIG5lZWQgdG8ga25vdyBpZiBzeXprYWxsZXIgaGFzIHNvbWUgc3BlY2lmaWMsIHRhaWxvcmVkIE1BQ3NlYyBkZXNjcmlwdGlvbnMsIG9yIGV2ZW4gbW9yZSB0ZWxsaW5nbHksIGlmIHRoZXJlIGFyZSBuZXRsaW5rIHJ0bmwgbGluayBvcGVyYXRpb25zIGltcGxlbWVudGVkIGZvciBpdC4gQWhhISBXYWl0IGEgbWludXRlLCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBzb21ldGhpbmcuIEkgcmVjYWxsIHNlZWluZyBgbWFjc2VjX2NoYW5nZWxpbmtgIGJlZm9yZSwgYW5kIHRoYXQgcmluZ3MgYSBiZWxsLi4uIENvdWxkIGl0IGJlPyBZZXMhIFRoYXQmIzM5O3MgaXQhIGBtYWNzZWNfY2hhbmdlbGlua2AgaXMgdGhlIGAuY2hhbmdlbGlua2AgY2FsbGJhY2sgd2l0aGluIHRoZSBgcnRubF9saW5rX29wc2Agc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGxlYWQhCgpOb3csIGxldCYjMzk7cyBpbW1lZGlhdGVseSBjb25maXJtIHRoaXMgYW5kIGV4cGxvcmUgYG1hY3NlY19saW5rX29wc2AuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBNQUNzZWMgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGxpbmsgb3BlcmF0aW9ucyB3aWxsIHRlbGwgbWUgaG93IHN5emthbGxlciBpcyBpbnRlcmFjdGluZyB3aXRoIE1BQ3NlYyBhdCBhIGxvdyBsZXZlbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3NlY19saW5rX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYz00NDE5PXN0YXRpYyBpbnQgbWFjc2VjX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0NjktXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDcwOnN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0NzEtXHQua2luZFx0XHQ9IFwmIzM0O21hY3NlY1wmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NTQ4PXN0YXRpYyBpbnQgX19pbml0IG1hY3NlY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU2MC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQ1NjE6XHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NjItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NzEtZXJyX3J0bmw6XG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NTcyOlx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NzMtZXJyX25vdGlmaWVyOlxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQ1ODQ9c3RhdGljIHZvaWQgX19leGl0IG1hY3NlY19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU4Ni1cdGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2bWFjc2VjX2ZhbSk7XG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NTg3Olx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1ODgtXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZtYWNzZWNfbm90aWZpZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1BQ3NlYyBJbnRlcmZhY2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1hY3NlY2AsIHdoaWNoIGZyb20gbXkgdW5kZXJzdGFuZGluZywgc2VlbXMgdG8gYmUgYSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlIGltcGxlbWVudGluZyBJRUVFIDgwMi4xQUUgTUFDc2VjLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBsYXllcmVkIG9uIHRvcCBvZiBhIHBoeXNpY2FsIG9yIHZpcnR1YWwgZGV2aWNlLCB3ZSYjMzk7bGwgY2FsbCBpdCBgcmVhbF9kZXZgIGZvciBub3cuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGlzIGludGVyZmFjZSBpcyBiZWluZyBtYW5hZ2VkLiBJdCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSBpcyBsaWtlbHkgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHJ0bmV0bGlua2AuIEkmIzM5O20gdGhpbmtpbmcgb2YgdGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMgaGVyZTogY3JlYXRpbmcsIGRlbGV0aW5nLCBhbmQgc2V0dGluZyBsaW5rIGNvbmZpZ3VyYXRpb25zIOKAkyBgUlRNX05FV0xJTktgLCBgUlRNX0RFTExJTktgLCBgUlRNX1NFVExJTktgIG9yIHBvdGVudGlhbGx5IGBtYWNzZWNfY2hhbmdlbGlua2AgaWYgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBjaGFuZ2UtaGFuZGxpbmcgbWVjaGFuaXNtLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgbWFjc2VjX2xpbmtfb3BzYCBkZWZpbml0aW9uIGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgbWVzc2FnZXMgYXJlIHRyYW5zbGF0ZWQgaW50byBhY3Rpb25zIG9uIHRoZSBgbWFjc2VjYCBpbnRlcmZhY2UgYW5kIHRoZSB1bmRlcmx5aW5nIGByZWFsX2RldmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0NjU6XHRcbjQ0NjY6XHRubGFfcHV0X2ZhaWx1cmU6XG40NDY3Olx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuNDQ2ODpcdH1cbjQ0Njk6XHRcbjQ0NzA6XHRzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjc2VjX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG40NDcxOlx0XHQua2luZFx0XHQ9IFwmIzM0O21hY3NlY1wmIzM0OyxcbjQ0NzI6XHRcdC5wcml2X3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBtYWNzZWNfZGV2KSxcbjQ0NzM6XHRcdC5tYXh0eXBlXHQ9IElGTEFfTUFDU0VDX01BWCxcbjQ0NzQ6XHRcdC5wb2xpY3lcdFx0PSBtYWNzZWNfcnRubF9wb2xpY3ksXG40NDc1Olx0XHQuc2V0dXBcdFx0PSBtYWNzZWNfc2V0dXAsXG40NDc2Olx0XHQudmFsaWRhdGVcdD0gbWFjc2VjX3ZhbGlkYXRlX2F0dHIsXG40NDc3Olx0XHQubmV3bGlua1x0PSBtYWNzZWNfbmV3bGluayxcbjQ0Nzg6XHRcdC5jaGFuZ2VsaW5rXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxuNDQ3OTpcdFx0LmRlbGxpbmtcdD0gbWFjc2VjX2RlbGxpbmssXG40NDgwOlx0XHQuZ2V0X3NpemVcdD0gbWFjc2VjX2dldF9zaXplLFxuNDQ4MTpcdFx0LmZpbGxfaW5mb1x0PSBtYWNzZWNfZmlsbF9pbmZvLFxuNDQ4MjpcdFx0LmdldF9saW5rX25ldFx0PSBtYWNzZWNfZ2V0X2xpbmtfbmV0LFxuNDQ4MzpcdH07XG40NDg0Olx0XG40NDg1Olx0c3RhdGljIGJvb2wgaXNfbWFjc2VjX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuNDQ4NjpcdHtcbjQ0ODc6XHRcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IG1hY3NlY19oYW5kbGVfZnJhbWU7XG40NDg4Olx0fVxuNDQ4OTpcdFxuNDQ5MDpcdHN0YXRpYyBpbnQgbWFjc2VjX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG40NDkxOlx0XHRcdFx0IHZvaWQgKnB0cilcbjQ0OTI6XHR7XG40NDkzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbjQ0OTQ6XHRcdHN0cnVjdCBtYWNzZWNfcnhoX2RhdGEgKnJ4ZDtcbjQ0OTU6XHRcdHN0cnVjdCBtYWNzZWNfZGV2ICptLCAqbjtcbjQ0OTY6XHRcdExJU1RfSEVBRChoZWFkKTtcbjQ0OTc6XHRcbjQ0OTg6XHRcdGlmICghaXNfbWFjc2VjX21hc3RlcihyZWFsX2RldikpXG40NDk5Olx0XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKk15IE1BQ3NlYyBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gYG1hY3NlY2AsIGFzIGV4cGVjdGVkLCBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggYHJ0bmV0bGlua2AuIEkgY2FuIG1hbmFnZSBpdCwgY3JlYXRlIG5ldyBpbnRlcmZhY2VzLCBhbmQgbW9kaWZ5IGV4aXN0aW5nIG9uZXMganVzdCBsaWtlIGFueSBvdGhlciBuZXR3b3JrIGludGVyZmFjZSB1c2luZyBgUlRNX05FV0xJTktgICh3aXRoIHRoZSBjcnVjaWFsIGBJRkxBX0lORk9fS0lORD0mIzM0O21hY3NlYyYjMzQ7YCBhdHRyaWJ1dGUpLCBgUlRNX1NFVExJTktgLCBvciBldmVuIHRocm91Z2ggYSBjaGFuZ2VsaW5rIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gZG8gdGhpbmdzLCBhbmQgaXQgbWVhbnMgSSBjYW4gcHJvZ3JhbW1hdGljYWxseSBjb250cm9sIHRoZXNlIE1BQ3NlYyBpbnRlcmZhY2VzLiBBbmQgdGhlIGJlc3QgcGFydD8gSXQmIzM5O3MgZGV2aWNlLWFnbm9zdGljLCB3b3JrcyBvbiAqZXZlcnl0aGluZyog4oCTIGR1bW15IGludGVyZmFjZXMsIGB2ZXRoYCBwYWlycywgZXZlbiBsb29wYmFjay4gVGhpcyBtYWtlcyBpdCBpbmNyZWRpYmx5IGZsZXhpYmxlIGZvciBhIHdob2xlIHJhbmdlIG9mIHVzZS1jYXNlcy4KCk5vdywgaG9sZCBvbi4gTGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cyBvbiB0aGUgKnVuZGVybHlpbmcqIGRldmljZS4gVGltZSB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGBtYWNzZWNfbmV3bGlua2AgY29kZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGByZWFsX2RldmAgcGFyYW1ldGVyIGFuZCB3aGF0IGtpbmQgb2YgZGV2aWNlcyBhcmUgYWN0dWFsbHkgKmFsbG93ZWQqIGFzIGl0cyBwYXJlbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2ZXJzYXRpbGUsIG9yIGxpbWl0ZWQsIHRoaXMgc2V0dXAgcmVhbGx5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNzZWNfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jPTQxOTU9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtYWNzZWNfbmV0ZGV2X2FkZHJfbG9ja19rZXk7XG5kcml2ZXJzL25ldC9tYWNzZWMuYy00MTk2LVxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDE5NzpzdGF0aWMgaW50IG1hY3NlY19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00MTk4LVx0XHRcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NDcwPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDc2LVx0LnZhbGlkYXRlXHQ9IG1hY3NlY192YWxpZGF0ZV9hdHRyLFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDQ3NzpcdC5uZXdsaW5rXHQ9IG1hY3NlY19uZXdsaW5rLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ3OC1cdC5jaGFuZ2VsaW5rXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUFDc2VjIE5ldyBMaW5rIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtYWNzZWNfbmV3bGlua2AgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBjcmVhdGluZyBvciBzZXR0aW5nIHVwIGEgbmV3IE1BQ3NlYyBsaW5rLCBuYXR1cmFsbHkuIEkgYmV0IGl0JiMzOTtzIGNhbGxlZCB3aGVuZXZlciBhIG5ldyBpbnRlcmZhY2Ugb3IgVkxBTiBpcyBjb25maWd1cmVkIHRvIHVzZSBNQUNzZWMuIE15IGh5cG90aGVzaXMgaXMgaXQmIzM5O2xsIGhhbmRsZSBhbGwgdGhlIGluaXRpYWxpemF0aW9uLCBrZXkgYXNzb2NpYXRpb24sIGFuZCBwb3RlbnRpYWxseSBldmVuIHNvbWUgb2YgdGhlIHNlY3VyaXR5IHBvbGljeSBzZXR1cCBmb3IgdGhlIG5ldyBsaW5rLiBJJiMzOTttIHRoaW5raW5nIGl0JiMzOTtsbCBpbnRlcmFjdCBjbG9zZWx5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLCBsaWtlbHkgdXNpbmcgbmV0bGluayBvciBvdGhlciBuZXR3b3JrLXNwZWNpZmljIHN0cnVjdHVyZXMuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBpdHMgaW50ZXJuYWwgc3RhdGUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhpcyBuZXcgbGluayBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTk3Olx0c3RhdGljIGludCBtYWNzZWNfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuNDE5ODpcdFx0XHRcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbjQxOTk6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjQyMDA6XHR7XG40MjAxOlx0XHRzdHJ1Y3QgbmV0ICpsaW5rX25ldCA9IHJ0bmxfbmV3bGlua19saW5rX25ldChwYXJhbXMpO1xuNDIwMjpcdFx0c3RydWN0IG1hY3NlY19kZXYgKm1hY3NlYyA9IG1hY3NlY19wcml2KGRldik7XG40MjAzOlx0XHRzdHJ1Y3QgbmxhdHRyICoqZGF0YSA9IHBhcmFtcy1cdTAwM2VkYXRhO1xuNDIwNDpcdFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVx1MDAzZXRiO1xuNDIwNTpcdFx0cnhfaGFuZGxlcl9mdW5jX3QgKnJ4X2hhbmRsZXI7XG40MjA2Olx0XHR1OCBpY3ZfbGVuID0gTUFDU0VDX0RFRkFVTFRfSUNWX0xFTjtcbjQyMDc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjtcbjQyMDg6XHRcdGludCBlcnIsIG10dTtcbjQyMDk6XHRcdHNjaV90IHNjaTtcbjQyMTA6XHRcbjQyMTE6XHRcdGlmICghdGJbSUZMQV9MSU5LXSlcbjQyMTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MjEzOlx0XHRyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChsaW5rX25ldCwgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xuNDIxNDpcdFx0aWYgKCFyZWFsX2RldilcbjQyMTU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40MjE2Olx0XHRpZiAocmVhbF9kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpXG40MjE3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDIxODpcdFxuNDIxOTpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX01BQ1NFQztcbjQyMjA6XHRcbjQyMjE6XHRcdG1hY3NlYy1cdTAwM2VyZWFsX2RldiA9IHJlYWxfZGV2O1xuNDIyMjpcdFxuNDIyMzpcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2IGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pXG40MjI0Olx0XHRcdG1hY3NlYy1cdTAwM2VvZmZsb2FkID0gbmxhX2dldF9vZmZsb2FkKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xuNDIyNTpcdFx0ZWxzZVxuNDIyNjpcdFx0XHQvKiBNQUNzZWMgb2ZmbG9hZGluZyBpcyBvZmYgYnkgZGVmYXVsdCAqL1xuNDIyNzpcdFx0XHRtYWNzZWMtXHUwMDNlb2ZmbG9hZCA9IE1BQ1NFQ19PRkZMT0FEX09GRjtcbjQyMjg6XHRcbjQyMjk6XHRcdC8qIENoZWNrIGlmIHRoZSBvZmZsb2FkaW5nIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGxheWVycyAqL1xuNDIzMDpcdFx0aWYgKG1hY3NlYy1cdTAwM2VvZmZsb2FkICE9IE1BQ1NFQ19PRkZMT0FEX09GRiBcdTAwMjZcdTAwMjZcbjQyMzE6XHRcdCAgICAhbWFjc2VjX2NoZWNrX29mZmxvYWQobWFjc2VjLVx1MDAzZW9mZmxvYWQsIG1hY3NlYykpXG40MjMyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjQyMzM6XHRcbjQyMzQ6XHRcdC8qIHNlbmRfc2NpIG11c3QgYmUgc2V0IHRvIHRydWUgd2hlbiB0cmFuc21pdCBzY2kgZXhwbGljaXRseSBpcyBzZXQgKi9cbjQyMzU6XHRcdGlmICgoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldKSBcdTAwMjZcdTAwMjZcbjQyMzY6XHRcdCAgICAoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1NFQ19JTkNfU0NJXSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1MTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodHMgb24gTmV0d29yayBOYW1lc3BhY2VzIGFuZCBNQUNzZWMgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgbmV0d29yayBuYW1lc3BhY2VzIChgbmV0bnNgKSBhZmZlY3QgTUFDc2VjIGRldmljZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBNQUNzZWMgZGV2aWNlIGl0c2VsZiBhbmQgaXRzIHVuZGVybHlpbmcgJiMzNDtyZWFsJiMzNDsgZGV2aWNlIChgcmVhbF9kZXZgKS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgYHJlYWxfZGV2YCBjYW4gcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCByaWdodD8gVGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIHRvIGFub3RoZXIgbmFtZXNwYWNlIG9yLCBpbnRlcmVzdGluZ2x5LCBjcmVhdGVkIGFjcm9zcyBuYW1lc3BhY2VzIHVzaW5nIGBJRkxBX0xJTktfTkVUTlNJRGAuCgpOb3csIEkmIzM5O20gbG9va2luZyBhdCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGNyaXRpY2FsIGZvciB2YWxpZGF0aW5nIGNoYW5nZXMgd2hlbiB0aGUgYHJlYWxfZGV2YCBpcyBwb3RlbnRpYWxseSBpbiBhbm90aGVyIG5hbWVzcGFjZS4gSXQgY2hlY2tzIGEgY291cGxlIG9mIGNvbmRpdGlvbnMuIEZpcnN0LCBpdCBkZXRlcm1pbmVzIGlmIHRoZSBkZXZpY2UgJiMzNDtyZWFjaGVzJiMzNDsgdGhlIHJlYWwgZGV2aWNlIChjb25zaWRlcmluZyBvZmZsb2FkaW5nIGFuZCBjaGFuZ2VzIHRvIHRoZSBvZmZsb2FkIHN0YXRlKS4gVGhlbiwgYW5kIHRoaXMgaXMgdGhlIGNvcmUgb2YgaXQsIGlmIHRoZSByZWFsIGRldmljZSAqY2FuKiBiZSByZWFjaGVkLCBpdCBjYWxscyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAuIElmIHRoaXMgY2hlY2sgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSByZXF1aXJpbmcgYENBUF9ORVRfQURNSU5gIGluIHRoYXQgb3RoZXIgbmV0d29yayBuYW1lc3BhY2UuCgpCdXQsIHdhaXQuLi4gd2hhdCBleGFjdGx5ICppcyogYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgPyBUaGF0JiMzOTtzIHRoZSBwaWVjZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIExldCBtZSBkbyBhIHF1aWNrIHNlYXJjaCBhbmQgZmluZCBvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0yNDY1PXN0YXRpYyBpbnQgZ2VuZXZlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDczLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjQ3NDpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGdlbmV2ZS1cdTAwM2VuZXQpKVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ3NS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0zOTU1PXN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTY3LVx0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTY4Olx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk2OS1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTE0NzM9aW50IG1hY3ZsYW5fY29tbW9uX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTQ5OC1cdFx0bG93ZXJkZXYgPSBtYWN2bGFuX2Rldl9yZWFsX2Rldihsb3dlcmRldik7XG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTQ5OTpcdFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChsb3dlcmRldikpKSB7XG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTUwMC1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTE2MzM9c3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTY0NC1cdCAgICAoZGF0YVtJRkxBX01BQ1ZMQU5fQkNfUVVFVUVfTEVOXSB8fCBkYXRhW0lGTEFfTUFDVkxBTl9CQ19DVVRPRkZdKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxNjQ1Olx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldCh2bGFuLVx1MDAzZWxvd2VyZGV2KSkpIHtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ2LVx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTQ0NDA9c3RhdGljIGludCB2eGxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0NTAtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDQ1MTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHZ4bGFuLVx1MDAzZW5ldCkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1Mi1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaD0yNTg9c3RydWN0IG5ldCAqcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbmV0bnNpZCk7XG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaDoyNTk6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaC0yNjAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXQgKmxpbmtfbmV0KTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNDk1PUVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI0OTYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNDk3OmJvb2wgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjQ5OC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldCAqbGlua19uZXQpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjUwMi19XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTAzOkVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjUwNC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDU1PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjMtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDY0Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2NS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDg3PXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk1LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NjpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTctXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjQvaXBfdnRpLmM9NTkxPXN0YXRpYyBpbnQgdnRpX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy01OTgtXG5uZXQvaXB2NC9pcF92dGkuYzo1OTk6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2NC9pcF92dGkuYy02MDAtXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjQvaXBpcC5jPTQ5Nz1zdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy01MDYtXG5uZXQvaXB2NC9pcGlwLmM6NTA3Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjQvaXBpcC5jLTUwOC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjA0Mz1zdGF0aWMgaW50IGlwNmdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTAtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjA1MTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDUyLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjY1PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3Mi1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjczOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNzQtXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIxMDk9c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjExOC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTE5Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTIwLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L2lwNl92dGkuYz0xMDQwPXN0YXRpYyBpbnQgdnRpNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTEwNDgtXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTA0OTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTA1MC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xNjAxPXN0YXRpYyBpbnQgaXBpcDZfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L3NpdC5jLTE2MTUtXG5uZXQvaXB2Ni9zaXQuYzoxNjE2Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC9pcHY2L3NpdC5jLTE2MTctXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTg2ND1zdGF0aWMgaW50IHhmcm1pX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtODcxLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjg3MjpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtODczLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBJIHNlZSBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAgYmVpbmcgdXNlZCBhY3Jvc3MgdmFyaW91cyB2aXJ0dWFsIG5ldCBkZXZpY2VzLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIE5vdywgbGV0JiMzOTtzIHJpZ29yb3VzbHkgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIFRoZSBndWlkZWxpbmVzIGVtcGhhc2l6ZSB0aGF0IGZ1enppbmcgaXMgb25seSBhcHBsaWNhYmxlIHRvIGNvZGUgdGhhdCYjMzk7cyBleGVjdXRhYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIGBtYWNzZWNgLCBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIsIGlzIGFjY2Vzc2libGUgdmlhIHJ0bmV0bGluayAoYFJUTV9TRVRMSU5LYCwgYFJUTV9ORVdMSU5LYCB3aXRoIGEgY2hhbmdlbGluayBmbGFnKS4gU28sIHRoYXQmIzM5O3MgYSBjaGVjay4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSwgaXQgY2FuIGJlIHJlYWNoZWQgaW4gdGhlIHJlYWwtd29ybGQgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZTogYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBpcyBjYWxsZWQgd2l0aGluIGBtYWNzZWNfY2hhbmdlbGlua2AuIEV2ZW4gaWYgb2ZmbG9hZCBpc24mIzM5O3Qgc3VwcG9ydGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlcywgdGhpcyBjaGVjayBydW5zIHVuY29uZGl0aW9uYWxseSB3aXRoIGBkYXRhYCwgd2hpY2ggaXMgdGhlIGNoYW5nZWxpbmsgZGF0YSBwYXNzZWQgaW4gdmlhIG5ldGxpbmsuIFRoaXMgbWVhbnMsIGFzIGxvbmcgYXMgYGRhdGFgIGlzIHByZXNlbnQsIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgY2FsbGVkIGV2ZXJ5IHNpbmdsZSB0aW1lLgoKVGhpcyBtZWFucyBpdCB3aWxsICphbHdheXMqIGV4ZWN1dGUuIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGNoYW5nZWxpbmsgZGF0YSBpcyBwYXNzZWQgdG8gYSBtYWNzZWMgbmV0IGRldmljZS4gSXQgY2hlY2tzIGlmIHRoZXJlIGlzIGEgcmVhbCBkZXZpY2UgYXR0YWNoZWQsIGFuZCBhbHNvIGEgbmV0bnMgY2hlY2sgd2hlbiB0aGUgcmVhbCBkZXZpY2UgbW92ZXMuIFRodXMsIG1ha2luZyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAgY2FsbGFibGUuCgpUaGlzIGlzIGNsZWFybHkgcmVhY2hhYmxlIGNvZGUgd2l0aGluIGEgbmV0bGluay1hY2Nlc3NpYmxlIGRyaXZlci4gVGhlcmVmb3JlLCBpdCAqZG9lc24mIzM5O3QqIGZhbGwgdW5kZXIgYW55IG9mIHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsgb3V0bGluZWQgaW4gU2VjdGlvbiAyOiB0aGUgY29kZSBpc24mIzM5O3Qgbm9uLWtlcm5lbCwgaXNuJiMzOTt0IHJlbGF0ZWQgdG8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIGFuZCB0aGUgZXhlY3V0aW9uIHBhdGhzIGFyZSByZWFjaGFibGUuCgpTZWN0aW9uIDMgbWFrZXMgaXQgY2xlYXI6IHRoaXMgY29kZSBmYWxscyBzcXVhcmVseSB1bmRlciAmIzM0O1JlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMuJiMzNDsgU28gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGNvbmZpZ3VyaW5nIHRoZSBmdXp6ZXIuIEkgbmVlZCB0byBkZWZpbmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpGb3IgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSB0byBpZGVudGlmeSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGltcGxlbWVudGluZyBhbHRlcmVkIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHByaW1hcnkgZm9jdXMgaXMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCwgdGhlIGFkZGVkIGZ1bmN0aW9uLiBXaGlsZSBpdCBpcyBzdGF0aWMsIGl0IGlzIGNhbGxlZCBkaXJlY3RseSBieSBgbWFjc2VjX2NoYW5nZWxpbmtgIGFuZCBpdCBkb2VzIG5vdCBzZWVtIHRvIGJlIGlubGluZWQgaW50byBpdC4gVGhhdCYjMzk7cyBnb29kLiBgbWFjc2VjX2NoYW5nZWxpbmtgIGl0c2VsZiBpcyBhbHNvIG1vZGlmaWVkIHRvIGNhbGwgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZXNlIHR3bywgbWFraW5nIHRoZW0gYm90aCBnb29kIGZvY3VzIHN5bWJvbHMuIE5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuCgpGaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUbyBmdXp6IHRoZSBgbWFjc2VjYCBjb2RlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L01ha2VmaWxlYCwgSSBzZWUgYG9iai0kKENPTkZJR19NQUNTRUMpICYjNDM7PSBtYWNzZWMub2AuIFRoZW4sIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBJIGZpbmQgdGhlIGBDT05GSUdfTUFDU0VDYCBvcHRpb24gZGVmaW5lZCBhcyBhIHRyaXN0YXRlIHRoYXQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvZ3JhcGhpYyBvcHRpb25zLiBJdCBoYXMgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbHMuCgpJbiBjb25jbHVzaW9uLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZSBwYXRjaCBpcyBmdXp6YWJsZSBhbmQgdGhlIGZ1enplciBjYW4gYmUgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGBGb2N1c1N5bWJvbHNgIGFzIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgYW5kIGBtYWNzZWNfY2hhbmdlbGlua2AsIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXMgYENPTkZJR19NQUNTRUNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUREVWSUNFU1xuICAgNzpcdFx0ZGVmYXVsdCB5IGlmIFVNTFxuICAgODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgIDk6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvbiYjMzk7dCBpbnRlbmQgdG8gY29ubmVjdCB5b3VyIExpbnV4IGJveCB0b1xuICAxMjpcdFx0ICBhbnkgb3RoZXIgY29tcHV0ZXIgYXQgYWxsLlxuICAxMzpcdFxuICAxNDpcdFx0ICBZb3UmIzM5O2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhIG5ldHdvcmsgY2FyZCB0aGF0XG4gIDE1Olx0XHQgIHlvdSB3YW50IHRvIHVzZSB1bmRlciBMaW51eC4gSWYgeW91IGFyZSBnb2luZyB0byBydW4gU0xJUCBvciBQUFAgb3ZlclxuICAxNjpcdFx0ICB0ZWxlcGhvbmUgbGluZSBvciBudWxsIG1vZGVtIGNhYmxlIHlvdSBuZWVkIHNheSBZIGhlcmUuIENvbm5lY3RpbmdcbiAgMTc6XHRcdCAgdHdvIG1hY2hpbmVzIHdpdGggcGFyYWxsZWwgcG9ydHMgdXNpbmcgUExJUCBuZWVkcyB0aGlzLCBhcyB3ZWxsIGFzXG4gIDE4Olx0XHQgIEFYLjI1L0tJU1MgZm9yIHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIGFtYXRldXIgcmFkaW8gbGlua3MuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNlZSBhbHNvIFwmIzM0O1RoZSBMaW51eCBOZXR3b3JrIEFkbWluaXN0cmF0b3ImIzM5O3MgR3VpZGVcJiMzNDsgYnkgT2xhZiBLaXJjaCBhbmRcbiAgMjE6XHRcdCAgVGVycnkgRGF3c29uLiBBdmFpbGFibGUgYXQgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9ndWlkZXMuaHRtbFx1MDAzZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjQ6XHRcbiAgMjU6XHQjIEFsbCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXJlIGRlcGVuZGVudCBvbiBORVRERVZJQ0VTIC0gZG8gbm90IHJlcGVhdFxuICAyNjpcdCMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy5cbiAgMjc6XHRpZiBORVRERVZJQ0VTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIE1JSVxuICAzMDpcdFx0dHJpc3RhdGVcbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgTkVUX0NPUkVcbiAgMzM6XHRcdGRlZmF1bHQgeVxuICAzNDpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIGNvcmUgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXG4gIDM3Olx0XHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxuICAzODpcdFxuICAzOTpcdGlmIE5FVF9DT1JFXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJPTkRJTkdcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNDM6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0NDpcdFx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICYjMzk7Ym9uZCYjMzk7IG11bHRpcGxlIEV0aGVybmV0XG4gIDQ3Olx0XHQgIENoYW5uZWxzIHRvZ2V0aGVyLiBUaGlzIGlzIGNhbGxlZCAmIzM5O0V0aGVyY2hhbm5lbCYjMzk7IGJ5IENpc2NvLFxuICA0ODpcdFx0ICAmIzM5O1RydW5raW5nJiMzOTsgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJiMzOTtCb25kaW5nJiMzOTsgaW4gTGludXguXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgaGVyZSB3ZSBnby4gVGltZSB0byBidXJyb3cgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW5kIG9mIHRoZSBgaWYgTkVUX0NPUkVgIGNvbmRpdGlvbmFsIGJsb2NrLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbmV0d29yayBkcml2ZXJzLCBhbmQgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgZ2V0cyBpbmNsdWRlZCBvciBleGNsdWRlZCBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB3ZSYjMzk7cmUgYnVpbGRpbmcgZm9yIC5ORVQgQ29yZS4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCB0cmFjaW5nIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhhdCBwYXJ0aWN1bGFyIGNvbmRpdGlvbmFsLiBLbm93aW5nIHRoZSBleGFjdCBzY29wZSBpcyBjcnVjaWFsIGZvciBwcm9wZXJseSBzZXR0aW5nIHVwIG15IHByb2plY3QgYW5kIGF2b2lkaW5nIGFueSB1bndhbnRlZCBzdXJwcmlzZXMuIFNvLCBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmRpZi4qTkVUX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5NzplbmRpZiAjIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBNQUNTRUNgLiBJdCBsb29rcyBsaWtlIGBORVRfQ09SRWAgaXMgbmVzdGVkIGluc2lkZSBgaWYgTkVUREVWSUNFU2AsIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYE5FVGAuIEFuZCBgTUFDU0VDYCBzaG93cyB1cCBhcm91bmQgbGluZSAzMTgsIGRpcmVjdGx5IHdpdGhpbiBgaWYgTkVUX0NPUkVgLiBTbywgdGhlIGhpZXJhcmNoeSBpcyBgTkVUREVWSUNFU2AsIHRoZW4gYE5FVF9DT1JFYCwgYW5kIGZpbmFsbHkgYE1BQ1NFQ2AuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IGJlaGF2aW9ycyBoZXJlLCBhbmQgbXkgZ3V0IGNoZWNrIHRlbGxzIG1lIHRoYXQgYE5FVERFVklDRVNgIGFuZCBgTkVUX0NPUkVgIGFyZSBwcmV0dHkgc3RhbmRhcmQgY29tcG9uZW50cyBpbiBzeXprYWxsZXIgb3IgdHlwaWNhbCBMaW51eCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBKdXN0IHRvIGJlIGNlcnRhaW4sIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgTkVUX0NPUkVgIGlzIGluZGVlZCBzZXQgdG8gJiMzNDt5JiMzNDsgKHllcykgYnkgZGVmYXVsdCB3aGVuIGBORVRERVZJQ0VTYCBpcyBhbHNvIHNldCB0byAmIzM0O3kmIzM0Oy4gQW5kIEkgcmVjYWxsIG5vdyB0aGF0IGBNQUNTRUNgIGlzIHRoZSBzcGVjaWZpYyBjb25maWcgZW5hYmxpbmcgYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGlmIGBORVRfQ09SRWAgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJdCBhcHBlYXJzIGl0IGRvZXNuJiMzOTt0OyBpdCYjMzk7cyBqdXN0IGNvbnRyb2xsZWQgYnkgdGhhdCBvdXRlciBgaWYgTkVUREVWSUNFU2AuIFRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBzeW1ib2wgZm9yIGBNQUNTRUNgLCB3aGljaCBpcyBgQ09ORklHX01BQ1NFQ2AuCgpBbmQgbm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gYmUgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bGwgc2NhbiBgZHJpdmVycy9uZXQvbWFjc2VjLmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGxpa2UgYCNpZmRlZiBDT05GSUdfYCBvciBgSVNfRU5BQkxFRCguLi4pYCBjaGVja3MuIEp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbmZpcm0gdGhhdCBgTUFDU0VDYCBpcyB0aGUgb25seSBjb25maWcgcmVxdWlyZWQgdG8gZW5hYmxlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lTX0VOQUJMRUR8Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWNzZWMuYyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtYWNzZWMuY2AgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZzogbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyDigJMgbm8gYCNpZmRlZmBzIG9yIGBJU19FTkFCTEVEYCBtYWNyb3Mgd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gVGhpcyBpcyB1bnVzdWFsLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHVzYWdlLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIG5ldHdvcmsgbmFtZXNwYWNlcy4gU2luY2UgdGhpcyBwYXRjaCBzZWVtcyB0byB0b3VjaCBvbiBuZXR3b3JrIG5hbWVzcGFjZXMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ0FQX05FVF9BRE1JTmAgd2l0aGluIHRob3NlIG5hbWVzcGFjZXMsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgQ09ORklHX05FVF9OU2AgaXMgYSBwcmVyZXF1aXNpdGUgb3IgaXMgYXQgYWxsIGludm9sdmVkIGhlcmUuIFRoZSBmYWN0IHRoaXMgZmlsZSBpcyBiZWluZyBjaGFuZ2VkIG1lYW5zIEkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLgoKQWgsIGFuZCB0aGVyZSBpdCBpcy4gVGhpbmtpbmcgYWJvdXQgYENPTkZJR19ORVRfTlNgLCB3aGljaCBwZXJtaXRzIG11bHRpcGxlIG5ldHdvcmsgbmFtZXNwYWNlcywgdGhlIGNvZ3MgYXJlIHR1cm5pbmcuIFRoaXMgaXMgd2hlcmUgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBhY3R1YWxseSBoYXMgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcyBiZXR3ZWVuIHRoZSBtYWNzZWMgZGV2aWNlIGFuZCB0aGUgYHJlYWxfZGV2YC4gTm93IEkga25vdyB3aHkgdGhpcyBpcyBpbXBvcnRhbnQgdG8gY2hlY2suCgpUbyBiZSBzdXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBgaW5pdC9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCBmaWxlcyBhcmUgbXkgbmV4dCBzdG9wLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX05FVF9OU2AgaXMgcHJlc2VudCBhbmQgaWYgaXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGVuYWJsZXMgbXVsdGlwbGUgbmV0d29yayBuYW1lc3BhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0NjA9Y29uZmlnIFBJRF9OU1xuLS1cbmluaXQvS2NvbmZpZy0xNDY3LVxuaW5pdC9LY29uZmlnOjE0Njg6Y29uZmlnIE5FVF9OU1xuaW5pdC9LY29uZmlnLTE0NjktXHRib29sIFwmIzM0O05ldHdvcmsgbmFtZXNwYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTE2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgY29uZmlndXJlZCBhdCBib290LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIGZvciB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMuIExldCBtZSBqdW1wIHRoZXJlIGFuZCBsb29rIGZvciB0aGUgYE5FVF9OU2Agc3ltYm9sLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IGRlZmluZSB3aGV0aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgaXMgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBjb21wbGV0ZWx5IGRpc2FibGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbmFsIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBwb3RlbnRpYWxseSB0aGUgcmVsZXZhbnQgYm9vdCBhcmd1bWVudHMgb3Iga2VybmVsIG1vZHVsZXMgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2NTpcdFx0ICBwcm9jZXNzZXMgd2l0aCB0aGUgc2FtZSBwaWQgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiBkaWZmZXJlbnRcbjE0NjY6XHRcdCAgcGlkIG5hbWVzcGFjZXMuICBUaGlzIGlzIGEgYnVpbGRpbmcgYmxvY2sgb2YgY29udGFpbmVycy5cbjE0Njc6XHRcbjE0Njg6XHRjb25maWcgTkVUX05TXG4xNDY5Olx0XHRib29sIFwmIzM0O05ldHdvcmsgbmFtZXNwYWNlXCYjMzQ7XG4xNDcwOlx0XHRkZXBlbmRzIG9uIE5FVFxuMTQ3MTpcdFx0ZGVmYXVsdCB5XG4xNDcyOlx0XHRoZWxwXG4xNDczOlx0XHQgIEFsbG93IHVzZXIgc3BhY2UgdG8gY3JlYXRlIHdoYXQgYXBwZWFyIHRvIGJlIG11bHRpcGxlIGluc3RhbmNlc1xuMTQ3NDpcdFx0ICBvZiB0aGUgbmV0d29yayBzdGFjay5cbjE0NzU6XHRcbjE0NzY6XHRlbmRpZiAjIE5BTUVTUEFDRVNcbjE0Nzc6XHRcbjE0Nzg6XHRjb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXG4xNDc5Olx0XHRib29sIFwmIzM0O0NoZWNrcG9pbnQvcmVzdG9yZSBzdXBwb3J0XCYjMzQ7XG4xNDgwOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbjE0ODE6XHRcdHNlbGVjdCBQUk9DX0NISUxEUkVOXG4xNDgyOlx0XHRzZWxlY3QgS0NNUFxuMTQ4MzpcdFx0ZGVmYXVsdCBuXG4xNDg0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzc0CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTUFDc2VjIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIHJlbGV2YW5jZSBvZiBgQ09ORklHX01BQ1NFQ2AgYW5kIGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCBiYXNlcywgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBydG5ldGxpbmsgb3IgTUFDc2VjLCBqdXN0IGluIGNhc2UuIEkga25vdyBgcnRuZXRsaW5rLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBhbHNvIHJlY2FsbCB0aGF0IGBkcml2ZXJzL25ldC9tYWNzZWMuY2Agc2VsZWN0cyBhIGJ1bmNoIG9mIGNyeXB0by1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zOiBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGFuZCBgR1JPX0NFTExTYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIG9mIGl0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1hY3NlY19jaGFuZ2VsaW5rYCBhbmQgaW50cm9kdWNlcyBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUga2V5IGhlcmUgaXMgdGhlIG5hbWVzcGFjZSBjaGVjazsgaXQmIzM5O3MgZGVzaWduZWQgdG8gdmVyaWZ5IGNhcGFiaWxpdGllcyB3aGVuZXZlciB3ZSBjaGFuZ2UgYXR0cmlidXRlcyBvZiBhIE1BQ3NlYyBkZXZpY2UsIGVzcGVjaWFsbHkgd2hlbiBpdHMgdW5kZXJseWluZyAmIzM5O3JlYWwmIzM5OyBkZXZpY2UgbWlnaHQgcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCBvciB3aGVuIHRoZSBvZmZsb2FkIHN0YXRlIGNoYW5nZXMuCgpMb29raW5nIGF0IHRoZSBjb250ZXh0LCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBJdOKAmXMgdHJpZ2dlcmVkIHZpYSBydG5ldGxpbmsgY2FsbHPigJRzcGVjaWZpY2FsbHkgYFJUTV9ORVdMSU5LYCBhbmQgYFJUTV9TRVRMSU5LYC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBhdHRhY2sgc3VyZmFjZSBmcm9tIHVzZXJzcGFjZS4gR2l2ZW4gdGhlIHNlbnNpdGl2aXR5IG9mIG5hbWVzcGFjZSBwZXJtaXNzaW9ucyBhbmQgdGhlIHBvdGVudGlhbCBmb3Igb2ZmbG9hZCBtYW5pcHVsYXRpb25zLCBpdCYjMzk7cyBzY3JlYW1pbmcgJiMzNDtXb3J0aEZ1enppbmchJiMzNDsuCgpTbywgZm9yIGZ1enppbmcsIHRoZSBjcml0aWNhbCBzeW1ib2xzIGFyZTogYG1hY3NlY19jaGFuZ2VsaW5rYCBhbmQgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYC4gVGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgd2lsbCBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgYXJlIGBNQUNTRUNgIGFuZCBgTkVUX05TYC4KCkluIHNob3J0LCB0aGUgcGF0Y2ggYWRkcyBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGFuZCBjYWxscyBpdCBmcm9tIGBtYWNzZWNfY2hhbmdlbGlua2AgdG8gdmFsaWRhdGUgYENBUF9ORVRfQURNSU5gIHByaXZpbGVnZXMgb3ZlciBhIGByZWFsX2RldmDigJlzIG5ldHdvcmsgbmFtZXNwYWNlIHdoZW4gYWx0ZXJpbmcgb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2VzIG9yIGNoYW5naW5nIG9mZmxvYWQgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgcmVzaWRlcyBpbiB0aGUgTUFDc2VjIG5ldHdvcmsgZHJpdmVyLCBhbmQgY2FuIGJlIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZCBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChgUlRNX05FV0xJTktgL2BSVE1fU0VUTElOS2ApIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSYjMzk7bSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBmdXp6aW5nIGlzIGFwcHJvcHJpYXRlIHRvIHRlc3QgbGluayBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGFuZCBuYW1lc3BhY2UgcGVybWlzc2lvbiBoYW5kbGluZy4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZy4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1NFQyYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyYjMzQ7LAogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKCkgYW5kIGNhbGxzIGl0IHdpdGhpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIGVuZm9yY2UgbmFtZXNwYWNlIHBlcm1pc3Npb24gY2hlY2tzIChyZXF1aXJpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbF9kZXYgbmV0d29yayBuYW1lc3BhY2UpIHdoZW4gY2hhbmdpbmcgTUFDc2VjIG9mZmxvYWQgc3RhdGUgb3IgdXBkYXRpbmcgb2ZmbG9hZGVkIGRldmljZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29kZSBpbiB0aGUgdmlydHVhbCBNQUNzZWMgbmV0d29ya2luZyBkcml2ZXIsIGV4ZXJjaXNhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ORVdMSU5LIC8gUlRNX1NFVExJTkspIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDU0VDJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zJiMzNDssCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoKSBhbmQgY2FsbHMgaXQgd2l0aGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gZW5mb3JjZSBuYW1lc3BhY2UgcGVybWlzc2lvbiBjaGVja3MgKHJlcXVpcmluZyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsX2RldiBuZXR3b3JrIG5hbWVzcGFjZSkgd2hlbiBjaGFuZ2luZyBNQUNzZWMgb2ZmbG9hZCBzdGF0ZSBvciB1cGRhdGluZyBvZmZsb2FkZWQgZGV2aWNlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIHRoZSB2aXJ0dWFsIE1BQ3NlYyBuZXR3b3JraW5nIGRyaXZlciwgZXhlcmNpc2FibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX05FV0xJTksgLyBSVE1fU0VUTElOSykgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDIxOjQ4OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwppbmRleCA2ZjlmM2FjZWZmYWFkLi5lMDE5ZTdhMjVjYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvZ3JvX2NlbGxzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hY3NlYy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgmZ3Q7CkBAIC0zOTQ1LDYgJiM0MzszOTQ2LDMzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kCiYjNDM7ICogYW55IHJlcXVlc3QgYWdhaW5zdCBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UgKG1kb191cGRfc2VjeSgpKSByZWFjaAomIzQzOyAqIHRoZSBkcml2ZXIgb2YgcmVhbF9kZXYsIHdoaWNoIG1heSBsaXZlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYmIzM5O3MgbmFtZXNwYWNlCiYjNDM7ICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJIHN0cnVjdCBubGF0dHIgKmRhdGFbXSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTsKJiM0MzsJYm9vbCByZWFjaGVzX3JlYWxfZGV2OwomIzQzOwomIzQzOwlyZWFjaGVzX3JlYWxfZGV2ID0gbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpOwomIzQzOwlpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy0mZ3Q7b2ZmbG9hZCkKJiM0MzsJCXJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoIXJlYWNoZXNfcmVhbF9kZXYgfHwKJiM0MzsJICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy0mZ3Q7cmVhbF9kZXYpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkgICAgICAgJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwlyZXR1cm4gLUVQRVJNOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCSAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLAogCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCkBAIC0zOTU5LDYgJiM0MzszOTg3LDEwIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAwOwogCiYjNDM7CXJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJaWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fAogCSAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSYjMzk7bGwgYW5hbHl6ZSB0aGUgY29kZSBjaGFuZ2VzLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUgZnVuY3Rpb24gY2hlY2tzIGlmIGNoYW5nZXMgdG8gdGhlIE1BQ3NlYyBkZXZpY2UgY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIG9mZmxvYWRpbmcsIGFmZmVjdCB0aGUgdW5kZXJseWluZyAmIzM0O3JlYWwgZGV2aWNlLCYjMzQ7IHdoaWNoIG1pZ2h0IHJlc2lkZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZS4gSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIGEgc2VwYXJhdGUgbmFtZXNwYWNlLCB0aGUgcGF0Y2ggZW5mb3JjZXMgYENBUF9ORVRfQURNSU5gIG92ZXIgdGhhdCBvdGhlciBuYW1lc3BhY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgcGVybWlzc2lvbiBjaGVjayByZWxhdGVkIHRvIGNyb3NzLW5hbWVzcGFjZSBvcGVyYXRpb25zLiBUaGUgYWRkZWQgY29kZSBpcyBhIGdhdGVrZWVwZXIgdGhhdCBlbnN1cmVzIHRoZSBjYWxsZXIgaGFzIHRoZSBuZWNlc3NhcnkgcHJpdmlsZWdlcyB0byBtb2RpZnkgYSBNQUNzZWMgZGV2aWNlIHRoYXQgaGFzIGl0cyByZWFsIGRldmljZSBpbiBhIHNlcGFyYXRlIG5hbWVzcGFjZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgY2hhbmdlcyB0byB0aGUgb2ZmbG9hZCBzdGF0ZSBvciBhbnkgb3BlcmF0aW9ucyBvbiBhbiBvZmZsb2FkZWQgZGV2aWNlIHdoZXJlIHRoZSAmIzM5O3JlYWwmIzM5OyBkZXZpY2UgaXMgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLCB0aGlzIHNob3VsZCBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZiBhbmQgY292ZXJlZCBieSBleGlzdGluZyBmdXp6aW5nIHN0cmF0ZWdpZXMuIFNpbmNlIHRoaXMgaXMgYW4gYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtLCBpdCBtYXkgbm90IGludHJvZHVjZSBuZXcsIGVhc2lseSBleHBsb2l0YWJsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIE15IGluc3RpbmN0cyBzdWdnZXN0IHRoYXQgZXhpc3RpbmcgZnV6emluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSB3b3VsZCBjaGVjayBhbnkgZXhpc3RpbmcgZnV6emluZyBjb3ZlcmFnZSBvZiBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlcmFjdGlvbiBpbiB0aGlzIGFyZWEsIGFuZCBwZXJoYXBzIGFkZCBhIHRlc3RjYXNlIGZvciB0aGlzIHNwZWNpZmljIGNoZWNrLCBpZiBpdCBkb2VzIG5vdCBleGlzdC4gSG93ZXZlciwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBhIGRlZGljYXRlZCBzZXNzaW9uIGRvZXNuJiMzOTt0IHNlZW0gc3RyaWN0bHkgbmVjZXNzYXJ5ICphdCB0aGlzIHBvaW50Ki4gSSYjMzk7bGwgbmVlZCB0byBkbyBtb3JlIGRpZ2dpbmcgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk0MDpcdFx0XHRpZiAoc2VjeS1cdTAwM2V4cG4gXHUwMDI2XHUwMDI2XG4zOTQxOlx0XHRcdCAgICByZXBsYXlfd2luZG93IFx1MDAzZSBNQUNTRUNfWFBOX01BWF9SRVBMQVlfV0lORE9XKVxuMzk0MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzk0MzpcdFx0XHRXUklURV9PTkNFKHNlY3ktXHUwMDNlcmVwbGF5X3dpbmRvdywgcmVwbGF5X3dpbmRvdyk7XG4zOTQ0Olx0XHR9XG4zOTQ1Olx0XG4zOTQ2Olx0XHRyZXR1cm4gMDtcbjM5NDc6XHR9XG4zOTQ4Olx0XG4zOTQ5Olx0LyogQm90aCBhIGNoYW5nZSBvZiB0aGUgb2ZmbG9hZCBzdGF0ZSAobWRvX2FkZF9zZWN5KCkvbWRvX2RlbF9zZWN5KCkpIGFuZFxuMzk1MDpcdCAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbjM5NTE6XHQgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxuMzk1MjpcdCAqIGZyb20gdGhlIG1hY3NlYyBkZXZpY2UuIFJlcXVpcmUgQ0FQX05FVF9BRE1JTiBvdmVyIHJlYWxfZGV2JiMzOTtzIG5hbWVzcGFjZVxuMzk1MzpcdCAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuMzk1NDpcdCAqL1xuMzk1NTpcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjM5NTY6XHRcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTc6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTg6XHR7XG4zOTU5Olx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NjA6XHRcdGJvb2wgcmVhY2hlc19yZWFsX2RldjtcbjM5NjE6XHRcbjM5NjI6XHRcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4zOTYzOlx0XHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcdTAwMjZcdTAwMjZcbjM5NjQ6XHRcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cdTAwM2VvZmZsb2FkKVxuMzk2NTpcdFx0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbjM5NjY6XHRcbjM5Njc6XHRcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxuMzk2ODpcdFx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuMzk2OTpcdFx0XHRyZXR1cm4gMDtcbjM5NzA6XHRcbjM5NzE6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjM5NzI6XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk3MzpcdFx0cmV0dXJuIC1FUEVSTTtcbjM5NzQ6XHR9XG4zOTc1Olx0XG4zOTc2Olx0c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMzk3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMzk3ODpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzk3OTpcdHtcbjM5ODA6XHRcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xuMzk4MTpcdFx0Ym9vbCBtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSBmYWxzZTtcbjM5ODI6XHRcdGVudW0gbWFjc2VjX29mZmxvYWQgb2ZmbG9hZDtcbjM5ODM6XHRcdHN0cnVjdCBtYWNzZWNfdHhfc2MgdHhfc2M7XG4zOTg0Olx0XHRzdHJ1Y3QgbWFjc2VjX3NlY3kgc2VjeTtcbjM5ODU6XHRcdGludCByZXQ7XG4zOTg2Olx0XG4zOTg3Olx0XHRpZiAoIWRhdGEpXG4zOTg4Olx0XHRcdHJldHVybiAwO1xuMzk4OTpcdFxuMzk5MDpcdFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuMzk5MTpcdFx0aWYgKHJldClcbjM5OTI6XHRcdFx0cmV0dXJuIHJldDtcbjM5OTM6XHRcbjM5OTQ6XHRcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbjM5OTU6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4zOTk2Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4zOTk3Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcbjM5OTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDUKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1BQ3NlYyBMaW5rIEF0dHJpYnV0ZSBDaGFuZ2UgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgcHJldHR5IGNsZWFuIGFkZGl0aW9uLCByZWFsbHkuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBjcnVjaWFsIHBlcm1pc3Npb24gY2hlY2s6IGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhkZXYsIGRhdGEsIGV4dGFjaylgLiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCB3aGVuZXZlciBzb21lb25lIGF0dGVtcHRzIHRvIGNoYW5nZSBsaW5rIGF0dHJpYnV0ZXMgb24gYSBNQUNzZWMgZGV2aWNlLCAqYW5kKiB0aGF0IGRldmljZSYjMzk7cyB1bmRlcmx5aW5nICYjMzQ7cmVhbCYjMzQ7IGRldmljZSBsaXZlcyBpbiBhICpkaWZmZXJlbnQqIG5ldHdvcmsgbmFtZXNwYWNlLiBDcnVjaWFsbHksIHRoaXMgY2hlY2sgZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gY2hhbmdlcyB0aGF0IHRvdWNoIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb3IgcmVhY2ggdGhlIHJlYWwgZGV2aWNlLCBhbmQgdGhlIGNoZWNrIHJlcXVpcmVzIGBDQVBfTkVUX0FETUlOYCBpbiB0aGF0ICpyZWFsX2RldiogbmFtZXNwYWNlLCB1c2luZyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSgpYC4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm5zLCB3aGVuIGxvb2tpbmcgYXQgYSBwYXRjaCBsaWtlIHRoaXMsIGFyZSBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IGZyb20gYSBzZWN1cml0eSBwb2ludCBvZiB2aWV3LgoKKiAgICoqVXNlci1TcGFjZSBEYXRhIFN0cnVjdHVyZXM6KiogTm8uIEl0JiMzOTtzIGp1c3Qgc2V0dGluZyBhbiBlcnJvciBtZXNzYWdlIHZpYSBgTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAuLi4pYCBpZiB0aGUgcGVybWlzc2lvbiBjaGVjayBmYWlscy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGV4aXN0aW5nIG9uZXMgYXJlIGJlaW5nIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaXNzdWVzLgoqICAgKipDb25kaXRpb25hbCBMb2dpYyBhbmQgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogTm9wZS4gVGhlIGNvZGUgYWNjZXNzZXMgYSBgbWFjc2VjYCBwb2ludGVyIHRocm91Z2ggYG1hY3NlY19wcml2KGRldilgLCB3aGljaCBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBgZGF0YWAgYXJyYXkgY29tZXMgZGlyZWN0bHkgZnJvbSBgcnRubGAgd2hpY2ggcGFyc2VzIG5ldGxpbmsgYXR0cmlidXRlcyBzbyBpdCBpcyBpbml0aWFsaXplZC4gYG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKWAgYW5kIGBtYWNzZWMtJmd0O29mZmxvYWRgIGFyZSBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzLiBTbywgbm8gY29uY2VybnMgdGhlcmUuCiogICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb246KiogTm90IGhhcHBlbmluZy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB3ZSYjMzk7ZCBuZWVkIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyLgoqICAgKipCb3VuZHMgQ2hlY2tzL0J1ZmZlciBNYW5pcHVsYXRpb246KiogTm9wZS4gTm8gbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBidWZmZXIgY2hlY2tzLCBsZW5ndGhzLCBvciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4KClNvLCBpbiBlc3NlbmNlLCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcyBjb250cm9sIG1lYXN1cmUgd2l0aGluIHRoZSBgcnRubGAgY2hhbmdlbGluayBjYWxsYmFjayBmb3IgTUFDc2VjLiBJdCYjMzk7cyBhIHBlcm1pc3Npb24gZ2F0ZSwgbm90IGEgZGF0YSBtYW5pcHVsYXRpb24gb3IgYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBleHBvc2VkIGhlcmUuCgpUaGVyZWZvcmUsIGFmdGVyIGdvaW5nIHRocm91Z2ggaXQsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouCgpGaW5hbGx5LCBsZXQgbWUgY2xhcmlmeSB0aGUgcmF0aW9uYWxlIGFuZCBjb250cmFzdCBpdCB3aXRoIEtBU0FOOgoKKiAgICoqS0FTQU46KiogV2UgdXNlIHRoaXMgdG8gaHVudCBmb3IgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIC0gdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHRoYXQga2luZCBvZiB0aGluZy4KKiAgICoqS01TQU46KiogVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2VyIHNwYWNlLgoKVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgc2ltcGx5IGFib3V0IG5hbWVzcGFjZSBjYXBhYmlsaXR5IHZhbGlkYXRpb24sIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpYCwgdXNpbmcgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoKWAgd2hlbiBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gbWlnaHQgcmVhY2ggYHJlYWxfZGV2YCBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZCwgYW5kIGltcG9ydGFudGx5LCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBvbmx5IGNoZWNrcyB0aGUgcGVybWlzc2lvbiBvbiB0aGUgbmFtZXNwYWNlLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZS4gSXQmIzM5O3MgYSBzb2xpZCwgY2xlYW4sIHBlcm1pc3Npb24gY2hlY2ssIGFuZCBubyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoxNy44ODIzOTkwMTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQ4MDgzMTMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNTRUNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zXCIsXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSdzIG5ldHdvcmsgbmFtZXNwYWNlIHdoZW4gbW9kaWZ5aW5nIG9mZmxvYWQgY29uZmlndXJhdGlvbiBvbiBhIE1BQ3NlYyBuZXRkZXZpY2UgYWNyb3NzIG5hbWVzcGFjZXMuIEl0IG9ubHkgaW5zcGVjdHMgZXhpc3RpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9pbnRlcnMgYW5kIHN0cnVjdCBtYWNzZWNfZGV2IGZpZWxkcywgYW5kIGNvbmRpdGlvbmFsbHkgZW1pdHMgYSBzdGF0aWMgbmV0bGluayBleHRlbmRlZCBBQ0sgZXJyb3Igc3RyaW5nIG9uIHBlcm1pc3Npb24gZGVuaWFsLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3B5aW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS9pbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpIGFuZCBjYWxscyBpdCB3aXRoaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byBlbmZvcmNlIG5hbWVzcGFjZSBwZXJtaXNzaW9uIGNoZWNrcyAocmVxdWlyaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHJlYWxfZGV2IG5ldHdvcmsgbmFtZXNwYWNlKSB3aGVuIGNoYW5naW5nIE1BQ3NlYyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0aW5nIG9mZmxvYWRlZCBkZXZpY2VzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIHZpcnR1YWwgTUFDc2VjIG5ldHdvcmtpbmcgZHJpdmVyLCBleGVyY2lzYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fTkVXTElOSyAvIFJUTV9TRVRMSU5LKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjE3Ljg4MjQwNTUwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NjY0OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAyMTo0ODoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXFxuaW5kZXggNmY5ZjNhY2VmZmFhZC4uZTAxOWU3YTI1Y2M5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ncm9fY2VsbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXFx1MDAzZVxcbkBAIC0zOTQ1LDYgKzM5NDYsMzMgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIEJvdGggYSBjaGFuZ2Ugb2YgdGhlIG9mZmxvYWQgc3RhdGUgKG1kb19hZGRfc2VjeSgpL21kb19kZWxfc2VjeSgpKSBhbmRcXG4rICogYW55IHJlcXVlc3QgYWdhaW5zdCBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UgKG1kb191cGRfc2VjeSgpKSByZWFjaFxcbisgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxcbisgKiBmcm9tIHRoZSBtYWNzZWMgZGV2aWNlLiBSZXF1aXJlIENBUF9ORVRfQURNSU4gb3ZlciByZWFsX2RldidzIG5hbWVzcGFjZVxcbisgKiBmb3IgdGhvc2U7IGxvY2FsIGF0dHJpYnV0ZXMgb2YgYSBub24tb2ZmbG9hZGVkIGRldmljZSBhcmUgdW5hZmZlY3RlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcXG4rXFx0Ym9vbCByZWFjaGVzX3JlYWxfZGV2O1xcbitcXG4rXFx0cmVhY2hlc19yZWFsX2RldiA9IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKTtcXG4rXFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVxcdTAwM2VvZmZsb2FkKVxcbitcXHRcXHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcXG4rXFxuK1xcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxcbitcXHQgICAgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVxcdTAwM2VyZWFsX2RldikpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0ICAgICAgIFxcXCJDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXFxcIik7XFxuK1xcdHJldHVybiAtRVBFUk07XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbkBAIC0zOTU5LDYgKzM5ODcsMTAgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXHRpZiAoIWRhdGEpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxcbiBcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxcbiBcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjE4LjM4MDgxNTEzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Njk4NTk4MzI1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDU0VDXCIsXG4gICAgXCJORVRfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc1wiLFxuICAgIFwibWFjc2VjX2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKCkgYW5kIGNhbGxzIGl0IHdpdGhpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIGVuZm9yY2UgbmFtZXNwYWNlIHBlcm1pc3Npb24gY2hlY2tzIChyZXF1aXJpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbF9kZXYgbmV0d29yayBuYW1lc3BhY2UpIHdoZW4gY2hhbmdpbmcgTUFDc2VjIG9mZmxvYWQgc3RhdGUgb3IgdXBkYXRpbmcgb2ZmbG9hZGVkIGRldmljZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29kZSBpbiB0aGUgdmlydHVhbCBNQUNzZWMgbmV0d29ya2luZyBkcml2ZXIsIGV4ZXJjaXNhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ORVdMSU5LIC8gUlRNX1NFVExJTkspIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTI1Nzc1MGE0ZGY0YTJhMjY3ZjdjM2Y4MmI3YzRkMGVhNjdlOTcwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjE6NDg6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5pbmRleCA2ZjlmM2FjZWZmYWFkLi5lMDE5ZTdhMjVjYzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWFjc2VjLmNcbisrKyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9ncm9fY2VsbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk0NSw2ICszOTQ2LDMzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQm90aCBhIGNoYW5nZSBvZiB0aGUgb2ZmbG9hZCBzdGF0ZSAobWRvX2FkZF9zZWN5KCkvbWRvX2RlbF9zZWN5KCkpIGFuZFxuKyAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbisgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxuKyAqIGZyb20gdGhlIG1hY3NlYyBkZXZpY2UuIFJlcXVpcmUgQ0FQX05FVF9BRE1JTiBvdmVyIHJlYWxfZGV2J3MgbmFtZXNwYWNlXG4rICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuXG4rICovXG4rc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuK1x0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xuK1x0Ym9vbCByZWFjaGVzX3JlYWxfZGV2O1xuK1xuK1x0cmVhY2hlc19yZWFsX2RldiA9IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKTtcbitcdGlmIChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVx1MDAzZW9mZmxvYWQpXG4rXHRcdHJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlO1xuK1xuK1x0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XG4rXHQgICAgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHQgICAgICAgXCJDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXCIpO1xuK1x0cmV0dXJuIC1FUEVSTTtcbit9XG4rXG4gc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuQEAgLTM5NTksNiArMzk4NywxMCBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoxOC4zODA4MTczNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjU3ODAxMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDc2VjIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbiBgZHJpdmVycy9uZXQvbWFjc2VjLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IHJldmlldyB3aGF0J3MgYmVpbmcgY2hhbmdlZC4gVGhlIGRpZmYgc2hvd3MgYSBuZXcgZnVuY3Rpb24sIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AsIGFuZCBhIGNhbGwgdG8gaXQgd2l0aGluIGBtYWNzZWNfY2hhbmdlbGlua2AuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjb21tZW50IGFib3ZlIGl0IGlzIGtleTogaXQgc2VlbXMgdG8gYmUgYWJvdXQgYWNjZXNzIGNvbnRyb2wgd2hlbiBkZWFsaW5nIHdpdGggb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2VzIGFuZCB0aGVpciBcInJlYWxcIiB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggbWlnaHQgcmVzaWRlIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblRoZSBjb3JlIGlkZWEgYXBwZWFycyB0byBiZSBjaGVja2luZyB3aGV0aGVyIGEgY2hhbmdlIHRvIHRoZSBNQUNzZWMgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG9mZmxvYWQgc3RhdGUgb3IgdXBkYXRlcyB0byBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UsIGludGVyYWN0cyB3aXRoIHRoZSBcInJlYWxcIiBkZXZpY2UuIElmIGl0ICpkb2VzKiB0b3VjaCB0aGUgcmVhbCBkZXZpY2UsIGFuZCB0aGF0IGRldmljZSBsaXZlcyBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZSwgdGhlbiBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSB3aXRoaW4gdGhhdCB0YXJnZXQgbmFtZXNwYWNlIGlzIHJlcXVpcmVkLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgYSBjcnVjaWFsIGlzb2xhdGlvbiBtZWNoYW5pc20sIGFuZCB3ZSBzaG91bGRuJ3QgYWxsb3cgb3BlcmF0aW9ucyBvbiBvbmUgbmFtZXNwYWNlIHRvIGltcGxpY2l0bHkgYWZmZWN0IGFub3RoZXIgd2l0aG91dCBleHBsaWNpdCBwZXJtaXNzaW9uLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGNoZWNrcyB0d28gY29uZGl0aW9uczogd2hldGhlciB0aGUgTUFDc2VjIGRldmljZSBpcyBvZmZsb2FkZWQgKHdoaWNoIGltcGxpZXMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVhbCBkZXZpY2UpIG9yIHdoZXRoZXIgdGhlIG9mZmxvYWQgc3RhdGUgaXMgY2hhbmdpbmcuIFRoZSBwYXRjaCB0aGVuIHNlZW1zIHRvIHZlcmlmeSB0aGUgY2FwYWJpbGl0eSwgYW5kIHJldHVybnMgYC1FUEVSTWAgd2l0aCBhbiBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZhaWxzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzZWN1cml0eSBtZWFzdXJlIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGNyb3NzLW5hbWVzcGFjZSBvcGVyYXRpb25zLlxuXG5UbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGRldGVybWluZSBob3cgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC9kaXNhYmxlZC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgd2hldGhlciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQsIHRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoyMy42Mzg2MjE1MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDQ1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BQ1NFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNzYwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMxODpjb25maWcgTUFDU0VDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMTktXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjFBRSBNQUMtbGV2ZWwgZW5jcnlwdGlvbiAoTUFDc2VjKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19JRkIpICs9IGlmYi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01BQ1NFQykgKz0gbWFjc2VjLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQU1UKSArPSBhbXQub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZz0xOT1jb25maWcgQVFUSU9OXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZzoyMjpcXHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCBNQUNTRUM9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGU9MTM9YXRsYW50aWMtb2JqcyA6PSBhcV9tYWluLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGUtMzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGU6MzQ6YXRsYW50aWMtJChDT05GSUdfTUFDU0VDKSArPSBhcV9tYWNzZWMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL01ha2VmaWxlLTM1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jPTExND1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfdHhfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTEyMC1zdGF0aWMgY29uc3QgY2hhciBhcV9tYWNzZWNfc3RhdF9uYW1lc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MTgzPXN0YXRpYyB1MzIgYXFfZXRodG9vbF9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTE5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTk3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTE5OC1cXHRpZiAobmljLVxcdTAwM2VtYWNzZWNfY2ZnKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MjEyPXN0YXRpYyB2b2lkIGFxX2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjIxLSNlbmRpZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzoyMjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjIzLVxcdGRhdGEgPSBhcV9tYWNzZWNfZ2V0X3N0YXRzKGFxX25pYywgZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MjUyPXN0YXRpYyB2b2lkIGFxX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjU4LVxcdGludCBpLCBzaTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MjU5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTI2MC1cXHRpbnQgc2E7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzIyLSNlbmRpZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozMjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzI0LVxcdFxcdGlmICghbmljLVxcdTAwM2VtYWNzZWNfY2ZnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMyOC1cXHRcXHRwID0gcCArIHNpemVvZihhcV9tYWNzZWNfc3RhdF9uYW1lcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjMyOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMzMC1cXHRcXHRcXHRzdHJ1Y3QgYXFfbWFjc2VjX3R4c2MgKmFxX3R4c2M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzQxLVxcdFxcdFxcdGFxX3R4c2MgPSBcXHUwMDI2bmljLVxcdTAwM2VtYWNzZWNfY2ZnLVxcdTAwM2VhcV90eHNjW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozNDI6XFx0XFx0XFx0Zm9yIChzYSA9IDA7IHNhIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgc2ErKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNDMtXFx0XFx0XFx0XFx0aWYgKCEodGVzdF9iaXQoc2EsIFxcdTAwMjZhcV90eHNjLVxcdTAwM2V0eF9zYV9pZHhfYnVzeSkpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM1My1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjM1NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM1NS1cXHRcXHRcXHRzdHJ1Y3QgYXFfbWFjc2VjX3J4c2MgKmFxX3J4c2M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzYwLVxcdFxcdFxcdGFxX3J4c2MgPSBcXHUwMDI2bmljLVxcdTAwM2VtYWNzZWNfY2ZnLVxcdTAwM2VhcV9yeHNjW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozNjE6XFx0XFx0XFx0Zm9yIChzYSA9IDA7IHNhIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgc2ErKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNjItXFx0XFx0XFx0XFx0aWYgKCEodGVzdF9iaXQoc2EsIFxcdTAwMjZhcV9yeHNjLVxcdTAwM2VyeF9zYV9pZHhfYnVzeSkpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTAtI2luY2x1ZGUgXFxcIm1hY3NlYy9tYWNzZWNfYXBpLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTE6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8xMjhfQklUIDE2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTI6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8xOTJfQklUIDI0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTM6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8yNTZfQklUIDMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00OT1zdGF0aWMgaW50IGFxX2dldF90eHNjX2lkeF9mcm9tX3NlY3koc3RydWN0IGFxX21hY3NlY19jZmcgKm1hY3NlY19jZmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo1NzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNTgtXFx0XFx0aWYgKG1hY3NlY19jZmctXFx1MDAzZWFxX3R4c2NbaV0uc3dfc2VjeSA9PSBzZWN5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9NjQ9c3RhdGljIGludCBhcV9nZXRfcnhzY19pZHhfZnJvbV9yeHNjKHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTczLVxcdFxcdGlmIChtYWNzZWNfY2ZnLVxcdTAwM2VhcV9yeHNjW2ldLnN3X3J4c2MgPT0gcnhzYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTk3PXN0YXRpYyB2b2lkIGFxX3JvdGF0ZV9rZXlzKHUzMiAoKmtleSlbOF0sIGNvbnN0IGludCBrZXlfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwNDpcXHRpZiAoa2V5X2xlbiA9PSBBUV9NQUNTRUNfS0VZX0xFTl8xMjhfQklUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA1LVxcdFxcdCgqa2V5KVswXSA9IHN3YWIzMih0bXBbM10pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA4LVxcdFxcdCgqa2V5KVszXSA9IHN3YWIzMih0bXBbMF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwOTpcXHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gQVFfTUFDU0VDX0tFWV9MRU5fMTkyX0JJVCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExMC1cXHRcXHQoKmtleSlbMF0gPSBzd2FiMzIodG1wWzVdKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExNS1cXHRcXHQoKmtleSlbNV0gPSBzd2FiMzIodG1wWzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTY6XFx0fSBlbHNlIGlmIChrZXlfbGVuID09IEFRX01BQ1NFQ19LRVlfTEVOXzI1Nl9CSVQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMTctXFx0XFx0KCprZXkpWzBdID0gc3dhYjMyKHRtcFs3XSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMzM9c3RhdGljIGludCBhcV9nZXRfbWFjc2VjX2NvbW1vbl9zdGF0cyhzdHJ1Y3QgYXFfaHdfcyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQwOlxcdC8qIE1BQ1NFQyBjb3VudGVycyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0MS1cXHRyZXQgPSBhcV9tc3NfZ2V0X2luZ3Jlc3NfY29tbW9uX2NvdW50ZXJzKGh3LCBcXHUwMDI2aW5ncmVzc19jb3VudGVycyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0zMDE9c3RhdGljIGludCBhcV9tZG9fZGV2X3N0b3Aoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MzA2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zMDctXFx0XFx0aWYgKG5pYy1cXHUwMDNlbWFjc2VjX2NmZy1cXHUwMDNldHhzY19pZHhfYnVzeSBcXHUwMDI2IEJJVChpKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTMxNT1zdGF0aWMgaW50IGFxX3NldF90eHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCBpbnQgdHhzY19pZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjAtXFx0c3dpdGNoIChzZWN5LVxcdTAwM2VrZXlfbGVuKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MzYxOlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTI4X0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjItXFx0XFx0c2NfcmVjLnNha19sZW4gPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2My1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjQ6XFx0Y2FzZSBBUV9NQUNTRUNfS0VZX0xFTl8xOTJfQklUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2NS1cXHRcXHRzY19yZWMuc2FrX2xlbiA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMzY2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjM2NzpcXHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzI1Nl9CSVQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMzY4LVxcdFxcdHNjX3JlYy5zYWtfbGVuID0gMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTQ0MD1zdGF0aWMgaW50IGFxX21kb19hZGRfc2VjeShzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTQ1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo0NTI6XFx0c2Nfc2EgPSBzY19zYV9mcm9tX251bV9hbihNQUNTRUNfTlVNX0FOKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy00NTMtXFx0aWYgKHNjX3NhID09IGFxX21hY3NlY19zYV9zY19ub3RfdXNlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTQ1OS1cXHR0eHNjX2lkeCA9IGZmeihjZmctXFx1MDAzZXR4c2NfaWR4X2J1c3kpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjQ2MDpcXHRpZiAodHhzY19pZHggPT0gQVFfTUFDU0VDX01BWF9TQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy00NjEtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00OTI9c3RhdGljIGludCBhcV9jbGVhcl90eHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCBpbnQgdHhzY19pZHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01MDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NTAyOlxcdGZvcl9lYWNoX3NldF9iaXQgKHNhX251bSwgXFx1MDAyNnR4X3NjLVxcdTAwM2V0eF9zYV9pZHhfYnVzeSwgQVFfTUFDU0VDX01BWF9TQSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTUwMy1cXHRcXHRyZXQgPSBhcV9jbGVhcl90eHNhKG5pYywgdHhfc2MsIHNhX251bSwgY2xlYXJfdHlwZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz02NzA9c3RhdGljIGludCBhcV9yeHNjX3ZhbGlkYXRlX2ZyYW1lcyhjb25zdCBlbnVtIG1hY3NlY192YWxpZGF0aW9uX3R5cGUgdmFsaWRhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzItXFx0c3dpdGNoICh2YWxpZGF0ZSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjY3MzpcXHRjYXNlIE1BQ1NFQ19WQUxJREFURV9ESVNBQkxFRDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzQtXFx0XFx0cmV0dXJuIDI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Njc1OlxcdGNhc2UgTUFDU0VDX1ZBTElEQVRFX0NIRUNLOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTY3Ni1cXHRcXHRyZXR1cm4gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo2Nzc6XFx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfU1RSSUNUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTY3OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTY4Nj1zdGF0aWMgaW50IGFxX3NldF9yeHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCB1MzIgcnhzY19pZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy03MDAtXFx0cHJlX2NsYXNzX3JlY29yZC5zY2lfbWFzayA9IDB4ZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzAxOlxcdC8qIG1hdGNoIGFsbCBNQUNTRUMgZXRoZXJ0eXBlIHBhY2tldHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo3MDI6XFx0cHJlX2NsYXNzX3JlY29yZC5ldGhfdHlwZSA9IEVUSF9QX01BQ1NFQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy03MDMtXFx0cHJlX2NsYXNzX3JlY29yZC5ldGhfdHlwZV9tYXNrID0gMHgzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9Nzg4PXN0YXRpYyBpbnQgYXFfY2xlYXJfcnhzYyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHJ4c2NfaWR4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjc5NjpcXHRmb3JfZWFjaF9zZXRfYml0IChzYV9udW0sIFxcdTAwMjZyeF9zYy1cXHUwMDNlcnhfc2FfaWR4X2J1c3ksIEFRX01BQ1NFQ19NQVhfU0EpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy03OTctXFx0XFx0cmV0ID0gYXFfY2xlYXJfcnhzYShuaWMsIHJ4X3NjLCBzYV9udW0sIGNsZWFyX3R5cGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9ODU0PXN0YXRpYyBpbnQgYXFfdXBkYXRlX3J4c2Eoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IHVuc2lnbmVkIGludCBzY19pZHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODEtXFx0c3dpdGNoIChzZWN5LVxcdTAwM2VrZXlfbGVuKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODgyOlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTI4X0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODMtXFx0XFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODg1OlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTkyX0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODYtXFx0XFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODctXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODg4OlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMjU2X0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODktXFx0XFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTEwODE9c3RhdGljIGludCBhcV9tZG9fZ2V0X3J4X3NjX3N0YXRzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA5Ny1cXHRhcV9yeHNjID0gXFx1MDAyNmNmZy1cXHUwMDNlYXFfcnhzY1tyeHNjX2lkeF07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTA5ODpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA5OS1cXHRcXHRpZiAoIXRlc3RfYml0KGksIFxcdTAwMjZhcV9yeHNjLVxcdTAwM2VyeF9zYV9pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMTY3PXN0YXRpYyBpbnQgYXBwbHlfdHhzY19jZmcoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IGludCB0eHNjX2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTE4MjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTE4My1cXHRcXHR0eF9zYSA9IHJjdV9kZXJlZmVyZW5jZV9iaChzZWN5LVxcdTAwM2V0eF9zYy5zYVtpXSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMTk1PXN0YXRpYyBpbnQgYXBwbHlfcnhzY19jZmcoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IGludCByeHNjX2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyMDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTIxMDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTIxMS1cXHRcXHRyeF9zYSA9IHJjdV9kZXJlZmVyZW5jZV9iaChhcV9yeHNjLVxcdTAwM2Vzd19yeHNjLVxcdTAwM2VzYVtpXSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMjc4PXN0YXRpYyBpbnQgYXFfYXBwbHlfbWFjc2VjX2NmZyhzdHJ1Y3QgYXFfbmljX3MgKm5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTI4MzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTI4NC1cXHRcXHRpZiAobmljLVxcdTAwM2VtYWNzZWNfY2ZnLVxcdTAwM2V0eHNjX2lkeF9idXN5IFxcdTAwMjYgQklUKGkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEyOTE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyOTItXFx0XFx0aWYgKG5pYy1cXHUwMDNlbWFjc2VjX2NmZy1cXHUwMDNlcnhzY19pZHhfYnVzeSBcXHUwMDI2IEJJVChpKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9MTMzMz1zdGF0aWMgdm9pZCBhcV9jaGVja190eHNhX2V4cGlyYXRpb24oc3RydWN0IGFxX25pY19zICpuaWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEzNTY6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0E7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEzNTctXFx0XFx0aWYgKGVncmVzc19zYV9leHBpcmVkIFxcdTAwMjYgQklUKGkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNDQ4PWludCBhcV9tYWNzZWNfaW5pdChzdHJ1Y3QgYXFfbmljX3MgKm5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQ1ODpcXHRpZiAoIShjYXBzX2xvIFxcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTQ1OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQ2NTpcXHRuaWMtXFx1MDAzZW5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfTUFDU0VDO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NjYtXFx0bmljLVxcdTAwM2VuZGV2LVxcdTAwM2VtYWNzZWNfb3BzID0gXFx1MDAyNmFxX21hY3NlY19vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNDc4PWludCBhcV9tYWNzZWNfZW5hYmxlKHN0cnVjdCBhcV9uaWNfcyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUyMC1cXHRcXHR0eF9jdGxmX3JlYy5tYXRjaF9tYXNrID0gMHhmOyAvKiBtYXRjaCBmb3IgZXRoX3R5cGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTIxOlxcdFxcdHR4X2N0bGZfcmVjLmFjdGlvbiA9IDA7IC8qIEJ5cGFzcyBNQUNTRUMgbW9kdWxlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE1MjItXFx0XFx0dGJsX2lkeCA9IE5VTVJPV1NfRUdSRVNTQ1RMRlJFQ09SRCAtIG51bV9jdGxfZXRoZXJfdHlwZXMgLSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUyOC1cXHRcXHRyeF9wcmVjdGxmX3JlYy5tYXRjaF9tYXNrID0gMHhmOyAvKiBtYXRjaCBmb3IgZXRoX3R5cGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTI5OlxcdFxcdHJ4X3ByZWN0bGZfcmVjLmFjdGlvbiA9IDA7IC8qIEJ5cGFzcyBNQUNTRUMgbW9kdWxlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE1MzAtXFx0XFx0dGJsX2lkeCA9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNTU3PWludCBhcV9tYWNzZWNfcnhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTU2Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTY3OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTY4LVxcdFxcdGlmICghdGVzdF9iaXQoaSwgXFx1MDAyNmNmZy1cXHUwMDNlcnhzY19pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNTkxPWludCBhcV9tYWNzZWNfdHhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjAxOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjAyLVxcdFxcdGlmICghdGVzdF9iaXQoaSwgXFx1MDAyNmNmZy1cXHUwMDNldHhzY19pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNjExPXN0YXRpYyBpbnQgYXFfbWFjc2VjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgYXFfbmljX3MgKm5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTYyMjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYyMy1cXHRcXHRpZiAoIShjZmctXFx1MDAzZXR4c2NfaWR4X2J1c3kgXFx1MDAyNiBCSVQoaSkpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYzMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjMyOlxcdFxcdGZvciAoYXNzb2NfbnVtID0gMDsgYXNzb2NfbnVtIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjMzLVxcdFxcdFxcdGlmICghdGVzdF9iaXQoYXNzb2NfbnVtLCBcXHUwMDI2YXFfdHhzYy1cXHUwMDNldHhfc2FfaWR4X2J1c3kpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjQzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjQ0LVxcdFxcdGlmICghKHRlc3RfYml0KGksIFxcdTAwMjZjZmctXFx1MDAzZXJ4c2NfaWR4X2J1c3kpKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTY0ODpcXHRcXHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcXHUwMDNjIE1BQ1NFQ19OVU1fQU47IGFzc29jX251bSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0OS1cXHRcXHRcXHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXFx1MDAyNmFxX3J4c2MtXFx1MDAzZXJ4X3NhX2lkeF9idXN5KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE2NjM9dTY0ICphcV9tYWNzZWNfZ2V0X3N0YXRzKHN0cnVjdCBhcV9uaWNfcyAqbmljLCB1NjQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MDc6XFx0Zm9yIChzY19udW0gPSAwOyBzY19udW0gXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBzY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MDgtXFx0XFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcXHUwMDI2Y2ZnLVxcdTAwM2V0eHNjX2lkeF9idXN5KSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MTk6XFx0XFx0Zm9yIChhc3NvY19udW0gPSAwOyBhc3NvY19udW0gXFx1MDAzYyBNQUNTRUNfTlVNX0FOOyBhc3NvY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MjAtXFx0XFx0XFx0aWYgKCF0ZXN0X2JpdChhc3NvY19udW0sIFxcdTAwMjZhcV90eHNjLVxcdTAwM2V0eF9zYV9pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MzI6XFx0Zm9yIChzY19udW0gPSAwOyBzY19udW0gXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBzY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MzMtXFx0XFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcXHUwMDI2Y2ZnLVxcdTAwM2VyeHNjX2lkeF9idXN5KSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3Mzg6XFx0XFx0Zm9yIChhc3NvY19udW0gPSAwOyBhc3NvY19udW0gXFx1MDAzYyBNQUNTRUNfTlVNX0FOOyBhc3NvY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MzktXFx0XFx0XFx0aWYgKCF0ZXN0X2JpdChhc3NvY19udW0sIFxcdTAwMjZhcV9yeHNjLVxcdTAwM2VyeF9zYV9pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjY6I2lmbmRlZiBBUV9NQUNTRUNfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjc6I2RlZmluZSBBUV9NQUNTRUNfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTE0PXN0cnVjdCBhcV9uaWNfcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxNjojZGVmaW5lIEFRX01BQ1NFQ19NQVhfU0MgMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxNzojZGVmaW5lIEFRX01BQ1NFQ19NQVhfU0EgMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTkwPXN0cnVjdCBhcV9tYWNzZWNfdHhzYyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC05My1cXHRjb25zdCBzdHJ1Y3QgbWFjc2VjX3NlY3kgKnN3X3NlY3k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6OTQ6XFx0dTggdHhfc2Ffa2V5W01BQ1NFQ19OVU1fQU5dW01BQ1NFQ19NQVhfS0VZX0xFTl07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTUtXFx0c3RydWN0IGFxX21hY3NlY190eF9zY19zdGF0cyBzdGF0cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDo5NjpcXHRzdHJ1Y3QgYXFfbWFjc2VjX3R4X3NhX3N0YXRzIHR4X3NhX3N0YXRzW01BQ1NFQ19OVU1fQU5dO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTk3LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaD05OT1zdHJ1Y3QgYXFfbWFjc2VjX3J4c2Mge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtMTAzLVxcdGNvbnN0IHN0cnVjdCBtYWNzZWNfcnhfc2MgKnN3X3J4c2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTA0OlxcdHU4IHJ4X3NhX2tleVtNQUNTRUNfTlVNX0FOXVtNQUNTRUNfTUFYX0tFWV9MRU5dO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjEwNTpcXHRzdHJ1Y3QgYXFfbWFjc2VjX3J4X3NhX3N0YXRzIHJ4X3NhX3N0YXRzW01BQ1NFQ19OVU1fQU5dO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTEwNi19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg9MTA4PXN0cnVjdCBhcV9tYWNzZWNfY2ZnIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExMS1cXHR1bnNpZ25lZCBsb25nIHR4c2NfaWR4X2J1c3k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTEyOlxcdHN0cnVjdCBhcV9tYWNzZWNfdHhzYyBhcV90eHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExMy1cXHQvKiBJbmdyZXNzIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExNC1cXHR1bnNpZ25lZCBsb25nIHJ4c2NfaWR4X2J1c3k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTE1OlxcdHN0cnVjdCBhcV9tYWNzZWNfcnhzYyBhcV9yeHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExNi1cXHQvKiBTdGF0aXN0aWNzIC8gY291bnRlcnMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTEyOT1pbnQgYXFfbWFjc2VjX3R4X3NhX2NudChzdHJ1Y3QgYXFfbmljX3MgKm5pYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTMzOiNlbmRpZiAvKiBBUV9NQUNTRUNfSCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM9MTY0PXN0YXRpYyBpbnQgYXFfbmljX3VwZGF0ZV9saW5rX3N0YXR1cyhzdHJ1Y3QgYXFfbmljX3MgKnNlbGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yMTAtXFx0XFx0bmV0aWZfY2Fycmllcl9vbihzZWxmLVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzoyMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yMTItXFx0XFx0YXFfbWFjc2VjX2VuYWJsZShzZWxmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jPTI0Mz1zdGF0aWMgdm9pZCBhcV9uaWNfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzoyNTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yNTktXFx0YXFfbWFjc2VjX3dvcmsoc2VsZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYz0zMTU9aW50IGFxX25pY19uZGV2X3JlZ2lzdGVyKHN0cnVjdCBhcV9uaWNfcyAqc2VsZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTMyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzozMjk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0zMzAtXFx0YXFfbWFjc2VjX2luaXQoc2VsZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0zNzctZXJyX2V4aXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM6Mzc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMzc5LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaD0xMjc9c3RydWN0IGFxX25pY19zIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5oLTE1Ny1cXHRzdHJ1Y3QgbXV0ZXggZndyZXFfbXV0ZXg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmg6MTU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmgtMTU5LVxcdHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYz0zNDI9c3RhdGljIHZvaWQgYXFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3BjaV9mdW5jLmMtMzUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3BjaV9mdW5jLmM6MzUxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYy0zNTItXFx0XFx0YXFfbWFjc2VjX2ZyZWUoc2VsZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmg9NDUxPWVudW0gaHdfYXRsX2Z3MnhfY2Fwc19sbyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmgtNDY2LVxcdENBUFNfTE9fU01CVVNfV1JJVEUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlscy5oOjQ2NzpcXHRDQVBTX0xPX01BQ1NFQyAgICAgICAgICAgID0gMTUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlscy5oLTQ2OC1cXHRDQVBTX0xPX1JFU0VSVkVEMSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jOjU5OiNkZWZpbmUgSFdfQVRMX0ZXMlhfQ0FQX01BQ1NFQyAgICAgICAgICAgQklUKENBUFNfTE9fTUFDU0VDKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM9NjY0PXN0YXRpYyBpbnQgYXFfZncyeF9zZW5kX21hY3NlY19yZXEoc3RydWN0IGFxX2h3X3MgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjc3LVxcdGNhcHNfbG8gPSBhcV9mdzJ4X2dldF9saW5rX2NhcGFiaWxpdGllcyhodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njc4OlxcdGlmICghKGNhcHNfbG8gXFx1MDAyNiBCSVQoQ0FQU19MT19NQUNTRUMpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02NzktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jOjY4NzpcXHQvKiBUb2dnbGUgMHgzNjguQ0FQU19MT19NQUNTRUMgYml0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjg4LVxcdGxvd19yZXEgPSBhcV9od19yZWFkX3JlZyhodywgSFdfQVRMX0ZXMlhfTVBJX0NPTlRST0xfQUREUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njg5OlxcdGxvd19yZXEgXj0gSFdfQVRMX0ZXMlhfQ0FQX01BQ1NFQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02OTAtXFx0YXFfaHdfd3JpdGVfcmVnKGh3LCBIV19BVExfRlcyWF9NUElfQ09OVFJPTF9BRERSLCBsb3dfcmVxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTY5My1cXHRlcnIgPSByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljKGFxX2Z3Mnhfc3RhdGVfZ2V0LCBodywgbG93X3N0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYzo2OTQ6XFx0XFx0bG93X3JlcSAhPSAobG93X3N0YXR1cyBcXHUwMDI2IEJJVChDQVBTX0xPX01BQ1NFQykpLCAxVSwgMTAwMDBVKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02OTUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmM9NDk9c3RhdGljIGludCBhcV9tc3NfbWRpb193cml0ZShzdHJ1Y3QgYXFfaHdfcyAqaHcsIHUxNiBtbWQsIHUxNiBhZGRyLCB1MTYgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmMtNTUtLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jOjU2OiAqICAgICAgICAgICAgICAgICAgICAgICAgICBNQUNTRUMgY29uZmlnIGFuZCBzdGF0dXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jLTU3LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDo2OiNpZm5kZWYgX19NQUNTRUNfQVBJX0hfX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmg6NzojZGVmaW5lIF9fTUFDU0VDX0FQSV9IX19cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oPTMyMD1pbnQgYXFfbXNzX3NldF9lZ3Jlc3Nfc2FfdGhyZXNob2xkX2V4cGlyZWQoc3RydWN0IGFxX2h3X3MgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC0zMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDozMjM6I2VuZGlmIC8qIF9fTUFDU0VDX0FQSV9IX18gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0LmgtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oOjY6I2lmbmRlZiBfTUFDU0VDX1NUUlVDVF9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg6NzojZGVmaW5lIF9NQUNTRUNfU1RSVUNUX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC04LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaD00NT1zdHJ1Y3QgYXFfbXNzX2VncmVzc19jbGFzc19yZWNvcmQge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC0xNDUtXFx0ICogIE5vdGU6IElmIHRoaXMgZmllbGQgaXMgbm90IDAsIHRoaXMgbWVhbnMgdGhlIGlucHV0IHBhY2tldCdzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaDoxNDY6XFx0ICogIFNFQ1RBRyBpcyBleHBsaWNpdGx5IHRhZ2dlZCBhbmQgTUFDU0VDIG1vZHVsZSB3aWxsIG9ubHkgdXBkYXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC0xNDctXFx0ICogIHRoZSBNU0RVLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaD0zNTM9c3RydWN0IGFxX21zc19pbmdyZXNzX3ByZWNsYXNzX3JlY29yZCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTQ2Mi1cXHQgKiAgMTogUHJvY2VzcyBidXQga2VlcCBTRUNUQUc6IEZvcndhcmQgdG8gbmV4dCB0d28gbW9kdWxlcyBmb3JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oOjQ2MzpcXHQgKiAgICAgODAyLjFBRSBkZWNyeXB0aW9uIGJ1dCBrZWVwIHRoZSBNQUNTRUMgaGVhZGVyIHdpdGggYWRkZWQgZXJyb3JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTQ2NC1cXHQgKiAgICAgY29kZSBpbmZvcm1hdGlvbi4gSUNWIHdpbGwgYmUgc3RyaXBwZWQgZm9yIGFsbCBjb250cm9sIHBhY2tldHMuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS91bmltYWMuaC02MC0jZGVmaW5lIFVNQUNfUlhfSVBHX0lOVlxcdFxcdFxcdDB4MDc4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdW5pbWFjLmg6NjE6I2RlZmluZSBVTUFDX01BQ1NFQ19QUk9HX1RYX0NSQ1xcdFxcdDB4MzEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdW5pbWFjLmg6NjI6I2RlZmluZSBVTUFDX01BQ1NFQ19DVFJMXFx0XFx0MHgzMTRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS91bmltYWMuaC02My0jZGVmaW5lIFVNQUNfUEFVU0VfQ1RSTFxcdFxcdFxcdDB4MzMwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLmg9MzA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGRwYWEyX2ZhZWFkICpkcGFhMl9nZXRfZmFlYWQodm9pZCAqYnVmX2FkZHIsIGJvb2wgc3dhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oLTMxNS0jZGVmaW5lIERQQUEyX0ZBU19ESVNDXFx0XFx0XFx0MHg4MDAwMDAwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguaDozMTY6LyogTUFDU0VDIGZyYW1lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oLTMxNy0jZGVmaW5lIERQQUEyX0ZBU19NU1xcdFxcdFxcdDB4NDAwMDAwMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg9NTY9c3RydWN0IGRwa2dfbWFzayB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oLTM0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oOjM0ODovKiBNQUNTRUMgZmllbGRzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaDozNDk6I2RlZmluZSBOSF9GTERfTUFDU0VDX1NFQ1RBR1xcdFxcdFxcdEJJVCgwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzUwOiNkZWZpbmUgTkhfRkxEX01BQ1NFQ19BTExfRklFTERTXFx0XFx0KEJJVCgxKSAtIDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zNTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oPTM1Nj1lbnVtIG5ldF9wcm90IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmgtMzg0LVxcdE5FVF9QUk9UX1VEUF9FTkNfRVNQLCAvKiBSRkMgMzk0OCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6Mzg1OlxcdE5FVF9QUk9UX01BQ1NFQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oLTM4Ni1cXHRORVRfUFJPVF9HUkUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTUyLSNkZWZpbmUgSE5BRTNfREVWX0lEXzI1R0VfUkRNQVxcdFxcdFxcdDB4QTIyMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6NTM6I2RlZmluZSBITkFFM19ERVZfSURfMjVHRV9SRE1BX01BQ1NFQ1xcdFxcdDB4QTIyM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNTQtI2RlZmluZSBITkFFM19ERVZfSURfNTBHRV9SRE1BXFx0XFx0XFx0MHhBMjI0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaDo1NTojZGVmaW5lIEhOQUUzX0RFVl9JRF81MEdFX1JETUFfTUFDU0VDXFx0XFx0MHhBMjI1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaDo1NjojZGVmaW5lIEhOQUUzX0RFVl9JRF8xMDBHX1JETUFfTUFDU0VDXFx0XFx0MHhBMjI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC01Ny0jZGVmaW5lIEhOQUUzX0RFVl9JRF8yMDBHX1JETUFcXHRcXHRcXHQweEEyMjhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBobnMzX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTk4LVxcdH0sIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzo5OTpcXHRcXHRQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0xMDAtXFx0XFx0LmRyaXZlcl9kYXRhID0gSE5BRTNfREVWX1NVUFBPUlRfUk9DRV9EQ0JfQklUUyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwNC1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MTA1OlxcdFxcdFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUMpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwNi1cXHRcXHQuZHJpdmVyX2RhdGEgPSBITkFFM19ERVZfU1VQUE9SVF9ST0NFX0RDQl9CSVRTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwNy1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MTA4OlxcdFxcdFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUMpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwOS1cXHRcXHQuZHJpdmVyX2RhdGEgPSBITkFFM19ERVZfU1VQUE9SVF9ST0NFX0RDQl9CSVRTLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzEwMT1ib29sIGhuczNfaXNfcGh5c19mdW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzEwOC1cXHRjYXNlIEhOQUUzX0RFVl9JRF8yNUdFX1JETUE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzEwOTpcXHRjYXNlIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxMTAtXFx0Y2FzZSBITkFFM19ERVZfSURfNTBHRV9SRE1BOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxMTE6XFx0Y2FzZSBITkFFM19ERVZfSURfNTBHRV9SRE1BX01BQ1NFQzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTEyOlxcdGNhc2UgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUM6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzExMy1cXHRjYXNlIEhOQUUzX0RFVl9JRF8yMDBHX1JETUE6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuaD0xNz1lbnVtIGhuczNfbmljX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oLTE2MS0jZGVmaW5lIEhOUzNfVFhEX09WTEFOX0JcXHRcXHRcXHQyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0Lmg6MTYyOiNkZWZpbmUgSE5TM19UWERfTUFDU0VDX0JcXHRcXHRcXHQzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmgtMTYzLSNkZWZpbmUgSE5TM19UWERfVFVOVFlQRV9TXFx0XFx0XFx0NFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWVfYWxnb19wY2lfdGJsW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTc0LVxcdHsgUENJX1ZERVZJQ0UoSFVBV0VJLCBITkFFM19ERVZfSURfMjVHRV9SRE1BKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6NzU6XFx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtNzYtXFx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF81MEdFX1JETUEpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo3NzpcXHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo3ODpcXHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy03OS1cXHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzIwMEdfUkRNQSkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNjpcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNy1cXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQwLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQxOlxcdGRlcGVuZHMgb24gTUFDU0VDIHx8ICFNQUNTRUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaD01NzI9c3RydWN0IGdldF9od19jYXBfcnNwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaC01NzYtXFx0dTggbnBjX2hhc2hfZXh0cmFjdDtcXHQvKiBJcyBoYXNoIGV4dHJhY3Qgc3VwcG9ydGVkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oOjU3NzojZGVmaW5lIEhXX0NBUF9NQUNTRUNcXHRcXHRCSVRfVUxMKDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oLTU3OC1cXHR1NjQgaHdfY2FwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTIxMTM9aW50IHJ2dV9tYm94X2hhbmRsZXJfZ2V0X2h3X2NhcChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0yMTIyLVxcdGlmIChydnUtXFx1MDAzZW1jc19ibGtfY250KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjIxMjM6XFx0XFx0cnNwLVxcdTAwM2Vod19jYXBzID0gSFdfQ0FQX01BQ1NFQztcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MjMuNzkyNjczMjM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEwMDI1NTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIENPTkZJR19NQUNTRUMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTUFDU0VDYC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIEtjb25maWcgZmlsZS4gSSdsbCB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxOCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCwgaW1wb3J0YW50bHksIHdoZXJlIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIG90aGVyIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9ucywgbWF5YmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCBvcHRpb25zLCBvciBldmVuIGtlcm5lbCBmZWF0dXJlIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgTUFDU0VDYCBjYW4gYmUgY29uc2lkZXJlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgaW4gcGxhY2UgZm9yIHRoZSBgTUFDU0VDYCBvcHRpb24gdG8gZXZlbiBiZSBhdmFpbGFibGUsIGxldCBhbG9uZSBhY3R1YWxseSBmdW5jdGlvbmFsLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGVmZmljaWVudCBrZXJuZWwgY29uZmlndXJhdGlvbiB3b3JrLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGl2ZWx5IGNvbXBsZXggbGlrZSBNQUNzZWMuIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyBlbHNlIGlzIGdvaW5nIHRvIHRyaXAgbWUgdXAuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjI1Ljg5MjkzMDk1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzE2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxcbiAzMTc6XFx0XFxuIDMxODpcXHRjb25maWcgTUFDU0VDXFxuIDMxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXFxcIlxcbiAzMjA6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAzMjE6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gMzIyOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuIDMyMzpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDMyNDpcXHRcXHRoZWxwXFxuIDMyNTpcXHRcXHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXFxuIDMyNjpcXHRcXG4gMzI3OlxcdGNvbmZpZyBORVRDT05TT0xFXFxuIDMyODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4gMzI5OlxcdFxcdGRlcGVuZHMgb24gUFJJTlRLXFxuIDMzMDpcXHRcXHRoZWxwXFxuIDMzMTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXFxuIDMzMjpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuIDMzNTpcXHRcXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuIDMzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlMgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAzMzc6XFx0XFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4gMzM4OlxcdFxcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxcbiAzMzk6XFx0XFx0aGVscFxcbiAzNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxcbiAzNDE6XFx0XFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxcbiAzNDI6XFx0XFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxcbiAzNDM6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoyNS44OTMwMTI2NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODYzMTIxNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDc2VjIERyaXZlcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBjaGFuZ2VzLCBhbmQgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBNQUNzZWMgaW1wbGVtZW50YXRpb24gcmVzaWRlcywgc28gYW55IHNpZ25pZmljYW50IGFsdGVyYXRpb25zIGFyZSBib3VuZCB0byBiZSBjZW50ZXJlZCB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIG9yIGJ1ZyBmaXggdGhpcyBjb21taXQgYWRkcmVzc2VzLiBUaGUgZmlsZSdzIHN0cnVjdHVyZSBzaG91bGQgZ3VpZGUgbWUuIEknbGwgbGlrZWx5IGJlZ2luIGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIHRvcCwgbG9va2luZyBmb3IgaW5jbHVkZSBmaWxlIGNoYW5nZXMsIG5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIG9yIGdsb2JhbCB2YXJpYWJsZSB1cGRhdGVzLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBuZXcgd2l0aGluIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbi4gVGhlbiBJIHdpbGwgc3RhcnQgZ29pbmcgdGhyb3VnaCBzcGVjaWZpYyBmdW5jdGlvbnMgd2hpY2ggaGFzIGJlZW4gbW9kaWZpZWQuIFRoZW4gSSB3aWxsIGNvbXBhcmUgdGhlIGNoYW5nZXMgb24gdGhlIGNvZGUsIGxpbmUgYnkgbGluZS4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjI4Ljc1NjEzNjAyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTQwOlxcdFxcdFxcdGlmIChzZWN5LVxcdTAwM2V4cG4gXFx1MDAyNlxcdTAwMjZcXG4zOTQxOlxcdFxcdFxcdCAgICByZXBsYXlfd2luZG93IFxcdTAwM2UgTUFDU0VDX1hQTl9NQVhfUkVQTEFZX1dJTkRPVylcXG4zOTQyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5NDM6XFx0XFx0XFx0V1JJVEVfT05DRShzZWN5LVxcdTAwM2VyZXBsYXlfd2luZG93LCByZXBsYXlfd2luZG93KTtcXG4zOTQ0OlxcdFxcdH1cXG4zOTQ1OlxcdFxcbjM5NDY6XFx0XFx0cmV0dXJuIDA7XFxuMzk0NzpcXHR9XFxuMzk0ODpcXHRcXG4zOTQ5OlxcdC8qIEJvdGggYSBjaGFuZ2Ugb2YgdGhlIG9mZmxvYWQgc3RhdGUgKG1kb19hZGRfc2VjeSgpL21kb19kZWxfc2VjeSgpKSBhbmRcXG4zOTUwOlxcdCAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcXG4zOTUxOlxcdCAqIHRoZSBkcml2ZXIgb2YgcmVhbF9kZXYsIHdoaWNoIG1heSBsaXZlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlXFxuMzk1MjpcXHQgKiBmcm9tIHRoZSBtYWNzZWMgZGV2aWNlLiBSZXF1aXJlIENBUF9ORVRfQURNSU4gb3ZlciByZWFsX2RldidzIG5hbWVzcGFjZVxcbjM5NTM6XFx0ICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuXFxuMzk1NDpcXHQgKi9cXG4zOTU1OlxcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4zOTU2OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMzk1NzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjM5NTg6XFx0e1xcbjM5NTk6XFx0XFx0c3RydWN0IG1hY3NlY19kZXYgKm1hY3NlYyA9IG1hY3NlY19wcml2KGRldik7XFxuMzk2MDpcXHRcXHRib29sIHJlYWNoZXNfcmVhbF9kZXY7XFxuMzk2MTpcXHRcXG4zOTYyOlxcdFxcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XFxuMzk2MzpcXHRcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcXHUwMDI2XFx1MDAyNlxcbjM5NjQ6XFx0XFx0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVxcdTAwM2VvZmZsb2FkKVxcbjM5NjU6XFx0XFx0XFx0cmVhY2hlc19yZWFsX2RldiA9IHRydWU7XFxuMzk2NjpcXHRcXG4zOTY3OlxcdFxcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxcbjM5Njg6XFx0XFx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cXHUwMDNlcmVhbF9kZXYpKSlcXG4zOTY5OlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NzA6XFx0XFxuMzk3MTpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzk3MjpcXHRcXHRcXHQgICAgICAgXFxcIkNoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcXFwiKTtcXG4zOTczOlxcdFxcdHJldHVybiAtRVBFUk07XFxuMzk3NDpcXHR9XFxuMzk3NTpcXHRcXG4zOTc2OlxcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4zOTc3OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjM5Nzg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzk3OTpcXHR7XFxuMzk4MDpcXHRcXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcXG4zOTgxOlxcdFxcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XFxuMzk4MjpcXHRcXHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XFxuMzk4MzpcXHRcXHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xcbjM5ODQ6XFx0XFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XFxuMzk4NTpcXHRcXHRpbnQgcmV0O1xcbjM5ODY6XFx0XFxuMzk4NzpcXHRcXHRpZiAoIWRhdGEpXFxuMzk4ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zOTg5OlxcdFxcbjM5OTA6XFx0XFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xcbjM5OTE6XFx0XFx0aWYgKHJldClcXG4zOTkyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzk5MzpcXHRcXG4zOTk0OlxcdFxcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcXG4zOTk1OlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XFxuMzk5NjpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XFxuMzk5NzpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcXG4zOTk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5OTk6XFx0XFxuNDAwMDpcXHRcXHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXFxuNDAwMTpcXHRcXHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cXG40MDAyOlxcdFxcdCAqL1xcbjQwMDM6XFx0XFx0bWVtY3B5KFxcdTAwMjZzZWN5LCBcXHUwMDI2bWFjc2VjLVxcdTAwM2VzZWN5LCBzaXplb2Yoc2VjeSkpO1xcbjQwMDQ6XFx0XFx0bWVtY3B5KFxcdTAwMjZ0eF9zYywgXFx1MDAyNm1hY3NlYy1cXHUwMDNlc2VjeS50eF9zYywgc2l6ZW9mKHR4X3NjKSk7XFxuNDAwNTpcXHRcXG40MDA2OlxcdFxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbjQwMDc6XFx0XFx0aWYgKHJldClcXG40MDA4OlxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG40MDA5OlxcdFxcbjQwMTA6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcXG40MDExOlxcdFxcdFxcdG9mZmxvYWQgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xcbjQwMTI6XFx0XFx0XFx0aWYgKG1hY3NlYy1cXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XFxuNDAxMzpcXHRcXHRcXHRcXHRtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSB0cnVlO1xcbjQwMTQ6XFx0XFx0XFx0XFx0cmV0ID0gbWFjc2VjX3VwZGF0ZV9vZmZsb2FkKGRldiwgb2ZmbG9hZCwgZXh0YWNrKTtcXG40MDE1OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuNDAxNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNDAxNzpcXHRcXHRcXHR9XFxuNDAxODpcXHRcXHR9XFxuNDAxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MjguNzU2MzMyMzA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAxMjM0NjUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgR2l0IExvZzogQ29udGV4dCBpcyBLZXkqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgb2YgdGhpcyBwYXRjaCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgZ2l0IGxvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcy4gVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBhbmQgb2Z0ZW4gbGVhdmVzIG91dCBjcnVjaWFsIGRldGFpbHMuIEknbSBob3BpbmcgdGhlIGNvbW1pdCBoaXN0b3J5IHdpbGwgaWxsdW1pbmF0ZSB0aGUgYXV0aG9yJ3MgcmF0aW9uYWxlLCBtYXliZSBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBwcm9ibGVtIHRoZXkgd2VyZSB0cnlpbmcgdG8gc29sdmUsIG9yIGFueSBkZXNpZ24gZGVjaXNpb25zIHRoYXQgd2VyZSBpbXBsaWNpdCBidXQgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgY29kZSBpdHNlbGYuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gcHJldmlvdXMgY29tbWl0cyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgd2hpY2ggY291bGQgc2hvdyB0aGUgZXZvbHV0aW9uIG9mIHRoZSBmZWF0dXJlIG9yIGJ1ZyBmaXguIERpZCB0aGV5IGxpbmsgYW4gaXNzdWU/IERpZCB0aGV5IHJlZmVyZW5jZSByZWxhdGVkIGRpc2N1c3Npb25zIG9yIGRlc2lnbiBkb2NzPyBBbGwgb2YgdGhpcyBoZWxwcyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIHdpbGwgYWxsb3cgbWUgdG8gcHJvdmlkZSBpbmZvcm1lZCBmZWVkYmFjay4gVW5kZXJzdGFuZGluZyB0aGUgYXV0aG9yJ3MgaW50ZW50IHJlZHVjZXMgd2FzdGVkIHRpbWUgYW5kIG1lbnRhbCBlZmZvcnQsIGFuZCBoZWxwcyBwcmV2ZW50IGFzc3VtcHRpb25zIHRoYXQgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IGNvbmNsdXNpb25zIG9yIG1pc2RpcmVjdGVkIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NzUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjMxLjc2ODY4MzI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2NzgwOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21hY3NlYy5jPTM4NzE9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NTQtICovXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk1NTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk1Ni1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzk3Nj1zdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTg5LVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5OTA6XFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5OTEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MzMuNjg1NDgxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE5NzI1Mzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1hY3NlYyBVc2FnZSBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQ3NlYyBpcyBiZWluZyB1c2VkIGFuZCB0ZXN0ZWQgd2l0aGluIHRoZSBzeXprYWxsZXIgZnJhbWV3b3JrLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gcmVjZW50IGNvbW1pdHMgb3IgcmVsYXRlZCBhY3Rpdml0eSDigJMgZXNzZW50aWFsbHksIHRoZSBicmVhZGNydW1icyB0aGF0IG1pZ2h0IGxlYWQgbWUgdG8gcmVsZXZhbnQgZXhhbXBsZXMuIEknbGwgc2VhcmNoIGZvciBob3cgTUFDc2VjIGlzIGluc3RydW1lbnRlZCBhbmQgaG93IHRoZXkncmUgdGVzdGVkIHdpdGhpbiBzeXprYWxsZXIncyBlY29zeXN0ZW0uXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWZpYywgdGFpbG9yZWQgTUFDc2VjIGRlc2NyaXB0aW9ucywgb3IgZXZlbiBtb3JlIHRlbGxpbmdseSwgaWYgdGhlcmUgYXJlIG5ldGxpbmsgcnRubCBsaW5rIG9wZXJhdGlvbnMgaW1wbGVtZW50ZWQgZm9yIGl0LiBBaGEhIFdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSd2ZSBnb3Qgc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgYG1hY3NlY19jaGFuZ2VsaW5rYCBiZWZvcmUsIGFuZCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBDb3VsZCBpdCBiZT8gWWVzISBUaGF0J3MgaXQhIGBtYWNzZWNfY2hhbmdlbGlua2AgaXMgdGhlIGAuY2hhbmdlbGlua2AgY2FsbGJhY2sgd2l0aGluIHRoZSBgcnRubF9saW5rX29wc2Agc3RydWN0dXJlLiBUaGF0J3MgYSBzdHJvbmcgbGVhZCFcblxuTm93LCBsZXQncyBpbW1lZGlhdGVseSBjb25maXJtIHRoaXMgYW5kIGV4cGxvcmUgYG1hY3NlY19saW5rX29wc2AuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBNQUNzZWMgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGxpbmsgb3BlcmF0aW9ucyB3aWxsIHRlbGwgbWUgaG93IHN5emthbGxlciBpcyBpbnRlcmFjdGluZyB3aXRoIE1BQ3NlYyBhdCBhIGxvdyBsZXZlbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTc5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MzcuODgyNzM3OTI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAxNTg0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY3NlY19saW5rX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuYz00NDE5PXN0YXRpYyBpbnQgbWFjc2VjX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ2OS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDcwOnN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDcxLVxcdC5raW5kXFx0XFx0PSBcXFwibWFjc2VjXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQ1NDg9c3RhdGljIGludCBfX2luaXQgbWFjc2VjX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NjAtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDU2MTpcXHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXFx1MDAyNm1hY3NlY19saW5rX29wcyk7XFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU2Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU3MS1lcnJfcnRubDpcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NTcyOlxcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFxcdTAwMjZtYWNzZWNfbGlua19vcHMpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NzMtZXJyX25vdGlmaWVyOlxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDU4ND1zdGF0aWMgdm9pZCBfX2V4aXQgbWFjc2VjX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1ODYtXFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2bWFjc2VjX2ZhbSk7XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDU4NzpcXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NTg4LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZtYWNzZWNfbm90aWZpZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODozOS41ODQzMjcxOThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI1OTQyODUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1BQ3NlYyBJbnRlcmZhY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtYWNzZWNgLCB3aGljaCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIHNlZW1zIHRvIGJlIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSBpbXBsZW1lbnRpbmcgSUVFRSA4MDIuMUFFIE1BQ3NlYy4gSXQncyBlc3NlbnRpYWxseSBsYXllcmVkIG9uIHRvcCBvZiBhIHBoeXNpY2FsIG9yIHZpcnR1YWwgZGV2aWNlLCB3ZSdsbCBjYWxsIGl0IGByZWFsX2RldmAgZm9yIG5vdy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoaXMgaW50ZXJmYWNlIGlzIGJlaW5nIG1hbmFnZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgbWVjaGFuaXNtIGlzIGxpa2VseSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgcnRuZXRsaW5rYC4gSSdtIHRoaW5raW5nIG9mIHRoZSBzdGFuZGFyZCBvcGVyYXRpb25zIGhlcmU6IGNyZWF0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcgbGluayBjb25maWd1cmF0aW9ucyDigJMgYFJUTV9ORVdMSU5LYCwgYFJUTV9ERUxMSU5LYCwgYFJUTV9TRVRMSU5LYCBvciBwb3RlbnRpYWxseSBgbWFjc2VjX2NoYW5nZWxpbmtgIGlmIHRoZXJlJ3MgYSBzcGVjaWZpYyBjaGFuZ2UtaGFuZGxpbmcgbWVjaGFuaXNtLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgbWFjc2VjX2xpbmtfb3BzYCBkZWZpbml0aW9uIGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgbWVzc2FnZXMgYXJlIHRyYW5zbGF0ZWQgaW50byBhY3Rpb25zIG9uIHRoZSBgbWFjc2VjYCBpbnRlcmZhY2UgYW5kIHRoZSB1bmRlcmx5aW5nIGByZWFsX2RldmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjQzLjg0Mzc1ODUxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ2NTpcXHRcXG40NDY2OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG40NDY3OlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuNDQ2ODpcXHR9XFxuNDQ2OTpcXHRcXG40NDcwOlxcdHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG40NDcxOlxcdFxcdC5raW5kXFx0XFx0PSBcXFwibWFjc2VjXFxcIixcXG40NDcyOlxcdFxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgbWFjc2VjX2RldiksXFxuNDQ3MzpcXHRcXHQubWF4dHlwZVxcdD0gSUZMQV9NQUNTRUNfTUFYLFxcbjQ0NzQ6XFx0XFx0LnBvbGljeVxcdFxcdD0gbWFjc2VjX3J0bmxfcG9saWN5LFxcbjQ0NzU6XFx0XFx0LnNldHVwXFx0XFx0PSBtYWNzZWNfc2V0dXAsXFxuNDQ3NjpcXHRcXHQudmFsaWRhdGVcXHQ9IG1hY3NlY192YWxpZGF0ZV9hdHRyLFxcbjQ0Nzc6XFx0XFx0Lm5ld2xpbmtcXHQ9IG1hY3NlY19uZXdsaW5rLFxcbjQ0Nzg6XFx0XFx0LmNoYW5nZWxpbmtcXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxcbjQ0Nzk6XFx0XFx0LmRlbGxpbmtcXHQ9IG1hY3NlY19kZWxsaW5rLFxcbjQ0ODA6XFx0XFx0LmdldF9zaXplXFx0PSBtYWNzZWNfZ2V0X3NpemUsXFxuNDQ4MTpcXHRcXHQuZmlsbF9pbmZvXFx0PSBtYWNzZWNfZmlsbF9pbmZvLFxcbjQ0ODI6XFx0XFx0LmdldF9saW5rX25ldFxcdD0gbWFjc2VjX2dldF9saW5rX25ldCxcXG40NDgzOlxcdH07XFxuNDQ4NDpcXHRcXG40NDg1OlxcdHN0YXRpYyBib29sIGlzX21hY3NlY19tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG40NDg2OlxcdHtcXG40NDg3OlxcdFxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBtYWNzZWNfaGFuZGxlX2ZyYW1lO1xcbjQ0ODg6XFx0fVxcbjQ0ODk6XFx0XFxuNDQ5MDpcXHRzdGF0aWMgaW50IG1hY3NlY19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbjQ0OTE6XFx0XFx0XFx0XFx0IHZvaWQgKnB0cilcXG40NDkyOlxcdHtcXG40NDkzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbjQ0OTQ6XFx0XFx0c3RydWN0IG1hY3NlY19yeGhfZGF0YSAqcnhkO1xcbjQ0OTU6XFx0XFx0c3RydWN0IG1hY3NlY19kZXYgKm0sICpuO1xcbjQ0OTY6XFx0XFx0TElTVF9IRUFEKGhlYWQpO1xcbjQ0OTc6XFx0XFxuNDQ5ODpcXHRcXHRpZiAoIWlzX21hY3NlY19tYXN0ZXIocmVhbF9kZXYpKVxcbjQ0OTk6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODo0My44NDQwNjgyMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcxMzQ5MzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipNeSBNQUNzZWMgQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gYG1hY3NlY2AsIGFzIGV4cGVjdGVkLCBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggYHJ0bmV0bGlua2AuIEkgY2FuIG1hbmFnZSBpdCwgY3JlYXRlIG5ldyBpbnRlcmZhY2VzLCBhbmQgbW9kaWZ5IGV4aXN0aW5nIG9uZXMganVzdCBsaWtlIGFueSBvdGhlciBuZXR3b3JrIGludGVyZmFjZSB1c2luZyBgUlRNX05FV0xJTktgICh3aXRoIHRoZSBjcnVjaWFsIGBJRkxBX0lORk9fS0lORD1cIm1hY3NlY1wiYCBhdHRyaWJ1dGUpLCBgUlRNX1NFVExJTktgLCBvciBldmVuIHRocm91Z2ggYSBjaGFuZ2VsaW5rIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gRXhjZWxsZW50LCB0aGF0J3MgdGhlIHN0YW5kYXJkIHdheSB0byBkbyB0aGluZ3MsIGFuZCBpdCBtZWFucyBJIGNhbiBwcm9ncmFtbWF0aWNhbGx5IGNvbnRyb2wgdGhlc2UgTUFDc2VjIGludGVyZmFjZXMuIEFuZCB0aGUgYmVzdCBwYXJ0PyBJdCdzIGRldmljZS1hZ25vc3RpYywgd29ya3Mgb24gKmV2ZXJ5dGhpbmcqIOKAkyBkdW1teSBpbnRlcmZhY2VzLCBgdmV0aGAgcGFpcnMsIGV2ZW4gbG9vcGJhY2suIFRoaXMgbWFrZXMgaXQgaW5jcmVkaWJseSBmbGV4aWJsZSBmb3IgYSB3aG9sZSByYW5nZSBvZiB1c2UtY2FzZXMuXG5cbk5vdywgaG9sZCBvbi4gTGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIG9uIHRoZSAqdW5kZXJseWluZyogZGV2aWNlLiBUaW1lIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYG1hY3NlY19uZXdsaW5rYCBjb2RlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgcmVhbF9kZXZgIHBhcmFtZXRlciBhbmQgd2hhdCBraW5kIG9mIGRldmljZXMgYXJlIGFjdHVhbGx5ICphbGxvd2VkKiBhcyBpdHMgcGFyZW50LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2ZXJzYXRpbGUsIG9yIGxpbWl0ZWQsIHRoaXMgc2V0dXAgcmVhbGx5IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDYuNTU3NTY0MTc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNzZWNfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuYz00MTk1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbWFjc2VjX25ldGRldl9hZGRyX2xvY2tfa2V5O1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQxOTYtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDE5NzpzdGF0aWMgaW50IG1hY3NlY19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDE5OC1cXHRcXHRcXHQgIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NDcwPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0NzYtXFx0LnZhbGlkYXRlXFx0PSBtYWNzZWNfdmFsaWRhdGVfYXR0cixcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDc3OlxcdC5uZXdsaW5rXFx0PSBtYWNzZWNfbmV3bGluayxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDc4LVxcdC5jaGFuZ2VsaW5rXFx0PSBtYWNzZWNfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDYuNjAzOTgzODM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzc3NTMzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUNzZWMgTmV3IExpbmsgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbWFjc2VjX25ld2xpbmtgIGZ1bmN0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBjcmVhdGluZyBvciBzZXR0aW5nIHVwIGEgbmV3IE1BQ3NlYyBsaW5rLCBuYXR1cmFsbHkuIEkgYmV0IGl0J3MgY2FsbGVkIHdoZW5ldmVyIGEgbmV3IGludGVyZmFjZSBvciBWTEFOIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIE1BQ3NlYy4gTXkgaHlwb3RoZXNpcyBpcyBpdCdsbCBoYW5kbGUgYWxsIHRoZSBpbml0aWFsaXphdGlvbiwga2V5IGFzc29jaWF0aW9uLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzb21lIG9mIHRoZSBzZWN1cml0eSBwb2xpY3kgc2V0dXAgZm9yIHRoZSBuZXcgbGluay4gSSdtIHRoaW5raW5nIGl0J2xsIGludGVyYWN0IGNsb3NlbHkgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgbGlrZWx5IHVzaW5nIG5ldGxpbmsgb3Igb3RoZXIgbmV0d29yay1zcGVjaWZpYyBzdHJ1Y3R1cmVzLiBJJ20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBpdHMgaW50ZXJuYWwgc3RhdGUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhpcyBuZXcgbGluayBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gTGV0J3Mgc2VlIGlmIG15IGluaXRpYWwgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTQ2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDguNzQxNzQwMTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTk3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTk3OlxcdHN0YXRpYyBpbnQgbWFjc2VjX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG40MTk4OlxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG40MTk5OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjQyMDA6XFx0e1xcbjQyMDE6XFx0XFx0c3RydWN0IG5ldCAqbGlua19uZXQgPSBydG5sX25ld2xpbmtfbGlua19uZXQocGFyYW1zKTtcXG40MjAyOlxcdFxcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xcbjQyMDM6XFx0XFx0c3RydWN0IG5sYXR0ciAqKmRhdGEgPSBwYXJhbXMtXFx1MDAzZWRhdGE7XFxuNDIwNDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBwYXJhbXMtXFx1MDAzZXRiO1xcbjQyMDU6XFx0XFx0cnhfaGFuZGxlcl9mdW5jX3QgKnJ4X2hhbmRsZXI7XFxuNDIwNjpcXHRcXHR1OCBpY3ZfbGVuID0gTUFDU0VDX0RFRkFVTFRfSUNWX0xFTjtcXG40MjA3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjtcXG40MjA4OlxcdFxcdGludCBlcnIsIG10dTtcXG40MjA5OlxcdFxcdHNjaV90IHNjaTtcXG40MjEwOlxcdFxcbjQyMTE6XFx0XFx0aWYgKCF0YltJRkxBX0xJTktdKVxcbjQyMTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDIxMzpcXHRcXHRyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChsaW5rX25ldCwgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xcbjQyMTQ6XFx0XFx0aWYgKCFyZWFsX2RldilcXG40MjE1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQyMTY6XFx0XFx0aWYgKHJlYWxfZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUilcXG40MjE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQyMTg6XFx0XFxuNDIxOTpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX01BQ1NFQztcXG40MjIwOlxcdFxcbjQyMjE6XFx0XFx0bWFjc2VjLVxcdTAwM2VyZWFsX2RldiA9IHJlYWxfZGV2O1xcbjQyMjI6XFx0XFxuNDIyMzpcXHRcXHRpZiAoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdKVxcbjQyMjQ6XFx0XFx0XFx0bWFjc2VjLVxcdTAwM2VvZmZsb2FkID0gbmxhX2dldF9vZmZsb2FkKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xcbjQyMjU6XFx0XFx0ZWxzZVxcbjQyMjY6XFx0XFx0XFx0LyogTUFDc2VjIG9mZmxvYWRpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi9cXG40MjI3OlxcdFxcdFxcdG1hY3NlYy1cXHUwMDNlb2ZmbG9hZCA9IE1BQ1NFQ19PRkZMT0FEX09GRjtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0LyogQ2hlY2sgaWYgdGhlIG9mZmxvYWRpbmcgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgbGF5ZXJzICovXFxuNDIzMDpcXHRcXHRpZiAobWFjc2VjLVxcdTAwM2VvZmZsb2FkICE9IE1BQ1NFQ19PRkZMT0FEX09GRiBcXHUwMDI2XFx1MDAyNlxcbjQyMzE6XFx0XFx0ICAgICFtYWNzZWNfY2hlY2tfb2ZmbG9hZChtYWNzZWMtXFx1MDAzZW9mZmxvYWQsIG1hY3NlYykpXFxuNDIzMjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuNDIzMzpcXHRcXG40MjM0OlxcdFxcdC8qIHNlbmRfc2NpIG11c3QgYmUgc2V0IHRvIHRydWUgd2hlbiB0cmFuc21pdCBzY2kgZXhwbGljaXRseSBpcyBzZXQgKi9cXG40MjM1OlxcdFxcdGlmICgoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDU0VDX1NDSV0pIFxcdTAwMjZcXHUwMDI2XFxuNDIzNjpcXHRcXHQgICAgKGRhdGEgXFx1MDAyNlxcdTAwMjYgZGF0YVtJRkxBX01BQ1NFQ19JTkNfU0NJXSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDguNzQyMTEzOTE1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MDE2Nzc5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodHMgb24gTmV0d29yayBOYW1lc3BhY2VzIGFuZCBNQUNzZWMgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IG5ldHdvcmsgbmFtZXNwYWNlcyAoYG5ldG5zYCkgYWZmZWN0IE1BQ3NlYyBkZXZpY2UgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBNQUNzZWMgZGV2aWNlIGl0c2VsZiBhbmQgaXRzIHVuZGVybHlpbmcgXCJyZWFsXCIgZGV2aWNlIChgcmVhbF9kZXZgKS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgYHJlYWxfZGV2YCBjYW4gcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCByaWdodD8gVGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIHRvIGFub3RoZXIgbmFtZXNwYWNlIG9yLCBpbnRlcmVzdGluZ2x5LCBjcmVhdGVkIGFjcm9zcyBuYW1lc3BhY2VzIHVzaW5nIGBJRkxBX0xJTktfTkVUTlNJRGAuXG5cbk5vdywgSSdtIGxvb2tpbmcgYXQgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYC4gVGhpcyBmdW5jdGlvbiBzZWVtcyBjcml0aWNhbCBmb3IgdmFsaWRhdGluZyBjaGFuZ2VzIHdoZW4gdGhlIGByZWFsX2RldmAgaXMgcG90ZW50aWFsbHkgaW4gYW5vdGhlciBuYW1lc3BhY2UuIEl0IGNoZWNrcyBhIGNvdXBsZSBvZiBjb25kaXRpb25zLiBGaXJzdCwgaXQgZGV0ZXJtaW5lcyBpZiB0aGUgZGV2aWNlIFwicmVhY2hlc1wiIHRoZSByZWFsIGRldmljZSAoY29uc2lkZXJpbmcgb2ZmbG9hZGluZyBhbmQgY2hhbmdlcyB0byB0aGUgb2ZmbG9hZCBzdGF0ZSkuIFRoZW4sIGFuZCB0aGlzIGlzIHRoZSBjb3JlIG9mIGl0LCBpZiB0aGUgcmVhbCBkZXZpY2UgKmNhbiogYmUgcmVhY2hlZCwgaXQgY2FsbHMgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLiBJZiB0aGlzIGNoZWNrIGZhaWxzLCBpdCByZXR1cm5zIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgcmVxdWlyaW5nIGBDQVBfTkVUX0FETUlOYCBpbiB0aGF0IG90aGVyIG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5CdXQsIHdhaXQuLi4gd2hhdCBleGFjdGx5ICppcyogYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgPyBUaGF0J3MgdGhlIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgYWxsIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjUyLjQ0Mzc5NDMyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNjI0NjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI0NjU9c3RhdGljIGludCBnZW5ldmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ3My1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNDc0OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGdlbmV2ZS1cXHUwMDNlbmV0KSlcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDc1LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0zOTU1PXN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NjctXFx0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk2ODpcXHQgICAgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVxcdTAwM2VyZWFsX2RldikpKVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NjktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTQ3Mz1pbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE0OTgtXFx0XFx0bG93ZXJkZXYgPSBtYWN2bGFuX2Rldl9yZWFsX2Rldihsb3dlcmRldik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjE0OTk6XFx0XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChsb3dlcmRldikpKSB7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE1MDAtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTE2MzM9c3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ0LVxcdCAgICAoZGF0YVtJRkxBX01BQ1ZMQU5fQkNfUVVFVUVfTEVOXSB8fCBkYXRhW0lGTEFfTUFDVkxBTl9CQ19DVVRPRkZdKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxNjQ1OlxcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQodmxhbi1cXHUwMDNlbG93ZXJkZXYpKSkge1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ2LVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00NDQwPXN0YXRpYyBpbnQgdnhsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0NTAtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQ0NTE6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdnhsYW4tXFx1MDAzZW5ldCkpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0NTItXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oPTI1OD1zdHJ1Y3QgbmV0ICpydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzdHJ1Y3Qgc29jayAqc2ssIGludCBuZXRuc2lkKTtcXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaDoyNTk6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgtMjYwLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0ICpsaW5rX25ldCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNDk1PUVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNDk2LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI0OTc6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjQ5OC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5ldCAqbGlua19uZXQpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTAyLX1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTAzOkVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1MDQtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDU1PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2My1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDY0OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXFx1MDAzZW5ldCkpXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2NS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQ4Nz1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0OTY6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk3LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz01OTE9c3RhdGljIGludCB2dGlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNTk4LVxcbm5ldC9pcHY0L2lwX3Z0aS5jOjU5OTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTYwMC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTQ5Nz1zdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTUwNi1cXG5uZXQvaXB2NC9pcGlwLmM6NTA3OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXFx1MDAzZW5ldCkpXFxubmV0L2lwdjQvaXBpcC5jLTUwOC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIwNDM9c3RhdGljIGludCBpcDZncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTAtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNTE6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1Mi1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjU9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNzItXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNzM6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3NC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIxMDk9c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTE4LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTE5OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMjAtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9pcHY2L2lwNl92dGkuYz0xMDQwPXN0YXRpYyBpbnQgdnRpNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTA0OC1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTA0OTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDUwLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNjAxPXN0YXRpYyBpbnQgaXBpcDZfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTYxNS1cXG5uZXQvaXB2Ni9zaXQuYzoxNjE2OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L2lwdjYvc2l0LmMtMTYxNy1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTg2ND1zdGF0aWMgaW50IHhmcm1pX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzEtXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjg3MjpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzMtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NTMuOTgwMDQ4MTIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1Mjc4MTIxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy4gSSBzZWUgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgIGJlaW5nIHVzZWQgYWNyb3NzIHZhcmlvdXMgdmlydHVhbCBuZXQgZGV2aWNlcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBOb3csIGxldCdzIHJpZ29yb3VzbHkgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gVGhlIGd1aWRlbGluZXMgZW1waGFzaXplIHRoYXQgZnV6emluZyBpcyBvbmx5IGFwcGxpY2FibGUgdG8gY29kZSB0aGF0J3MgZXhlY3V0YWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBgbWFjc2VjYCwgYSB2aXJ0dWFsIG5ldHdvcmtpbmcgZHJpdmVyLCBpcyBhY2Nlc3NpYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fU0VUTElOS2AsIGBSVE1fTkVXTElOS2Agd2l0aCBhIGNoYW5nZWxpbmsgZmxhZykuIFNvLCB0aGF0J3MgYSBjaGVjay4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSwgaXQgY2FuIGJlIHJlYWNoZWQgaW4gdGhlIHJlYWwtd29ybGQgZW52aXJvbm1lbnQuXG5cbkxldCdzIGRpc3NlY3QgdGhlIGNvZGU6IGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgY2FsbGVkIHdpdGhpbiBgbWFjc2VjX2NoYW5nZWxpbmtgLiBFdmVuIGlmIG9mZmxvYWQgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlcywgdGhpcyBjaGVjayBydW5zIHVuY29uZGl0aW9uYWxseSB3aXRoIGBkYXRhYCwgd2hpY2ggaXMgdGhlIGNoYW5nZWxpbmsgZGF0YSBwYXNzZWQgaW4gdmlhIG5ldGxpbmsuIFRoaXMgbWVhbnMsIGFzIGxvbmcgYXMgYGRhdGFgIGlzIHByZXNlbnQsIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgY2FsbGVkIGV2ZXJ5IHNpbmdsZSB0aW1lLlxuXG5UaGlzIG1lYW5zIGl0IHdpbGwgKmFsd2F5cyogZXhlY3V0ZS4gYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBpcyBhbHdheXMgY2FsbGVkIHdoZW4gY2hhbmdlbGluayBkYXRhIGlzIHBhc3NlZCB0byBhIG1hY3NlYyBuZXQgZGV2aWNlLiBJdCBjaGVja3MgaWYgdGhlcmUgaXMgYSByZWFsIGRldmljZSBhdHRhY2hlZCwgYW5kIGFsc28gYSBuZXRucyBjaGVjayB3aGVuIHRoZSByZWFsIGRldmljZSBtb3Zlcy4gVGh1cywgbWFraW5nIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCBjYWxsYWJsZS5cblxuVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSBjb2RlIHdpdGhpbiBhIG5ldGxpbmstYWNjZXNzaWJsZSBkcml2ZXIuIFRoZXJlZm9yZSwgaXQgKmRvZXNuJ3QqIGZhbGwgdW5kZXIgYW55IG9mIHRoZSBcIm5lZ2F0aXZlIGNyaXRlcmlhXCIgb3V0bGluZWQgaW4gU2VjdGlvbiAyOiB0aGUgY29kZSBpc24ndCBub24ta2VybmVsLCBpc24ndCByZWxhdGVkIHRvIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdGhlIGV4ZWN1dGlvbiBwYXRocyBhcmUgcmVhY2hhYmxlLlxuXG5TZWN0aW9uIDMgbWFrZXMgaXQgY2xlYXI6IHRoaXMgY29kZSBmYWxscyBzcXVhcmVseSB1bmRlciBcIlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMuXCIgU28gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byBjb25maWd1cmluZyB0aGUgZnV6emVyLiBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Gb3IgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSB0byBpZGVudGlmeSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGltcGxlbWVudGluZyBhbHRlcmVkIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHByaW1hcnkgZm9jdXMgaXMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCwgdGhlIGFkZGVkIGZ1bmN0aW9uLiBXaGlsZSBpdCBpcyBzdGF0aWMsIGl0IGlzIGNhbGxlZCBkaXJlY3RseSBieSBgbWFjc2VjX2NoYW5nZWxpbmtgIGFuZCBpdCBkb2VzIG5vdCBzZWVtIHRvIGJlIGlubGluZWQgaW50byBpdC4gVGhhdCdzIGdvb2QuIGBtYWNzZWNfY2hhbmdlbGlua2AgaXRzZWxmIGlzIGFsc28gbW9kaWZpZWQgdG8gY2FsbCB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlc2UgdHdvLCBtYWtpbmcgdGhlbSBib3RoIGdvb2QgZm9jdXMgc3ltYm9scy4gTm8gb3RoZXIgZnVuY3Rpb25zIGFyZSBhZGRlZCBvciBtb2RpZmllZC5cblxuRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYC4gVG8gZnV6eiB0aGUgYG1hY3NlY2AgY29kZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMb29raW5nIGF0IGBkcml2ZXJzL25ldC9NYWtlZmlsZWAsIEkgc2VlIGBvYmotJChDT05GSUdfTUFDU0VDKSArPSBtYWNzZWMub2AuIFRoZW4sIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBJIGZpbmQgdGhlIGBDT05GSUdfTUFDU0VDYCBvcHRpb24gZGVmaW5lZCBhcyBhIHRyaXN0YXRlIHRoYXQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvZ3JhcGhpYyBvcHRpb25zLiBJdCBoYXMgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbHMuXG5cbkluIGNvbmNsdXNpb24sIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHBhdGNoIGlzIGZ1enphYmxlIGFuZCB0aGUgZnV6emVyIGNhbiBiZSBwcm9wZXJseSBjb25maWd1cmVkIHdpdGggYEZvY3VzU3ltYm9sc2AgYXMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBhbmQgYG1hY3NlY19jaGFuZ2VsaW5rYCwgYW5kIGBFbmFibGVDb25maWdzYCBhcyBgQ09ORklHX01BQ1NFQ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzQ4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTowMi41MDc4NjIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5FVERFVklDRVNcXG4gICA3OlxcdFxcdGRlZmF1bHQgeSBpZiBVTUxcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuICAgOTpcXHRcXHRib29sIFxcXCJOZXR3b3JrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvbid0IGludGVuZCB0byBjb25uZWN0IHlvdXIgTGludXggYm94IHRvXFxuICAxMjpcXHRcXHQgIGFueSBvdGhlciBjb21wdXRlciBhdCBhbGwuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgWW91J2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhIG5ldHdvcmsgY2FyZCB0aGF0XFxuICAxNTpcXHRcXHQgIHlvdSB3YW50IHRvIHVzZSB1bmRlciBMaW51eC4gSWYgeW91IGFyZSBnb2luZyB0byBydW4gU0xJUCBvciBQUFAgb3ZlclxcbiAgMTY6XFx0XFx0ICB0ZWxlcGhvbmUgbGluZSBvciBudWxsIG1vZGVtIGNhYmxlIHlvdSBuZWVkIHNheSBZIGhlcmUuIENvbm5lY3RpbmdcXG4gIDE3OlxcdFxcdCAgdHdvIG1hY2hpbmVzIHdpdGggcGFyYWxsZWwgcG9ydHMgdXNpbmcgUExJUCBuZWVkcyB0aGlzLCBhcyB3ZWxsIGFzXFxuICAxODpcXHRcXHQgIEFYLjI1L0tJU1MgZm9yIHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIGFtYXRldXIgcmFkaW8gbGlua3MuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgU2VlIGFsc28gXFxcIlRoZSBMaW51eCBOZXR3b3JrIEFkbWluaXN0cmF0b3IncyBHdWlkZVxcXCIgYnkgT2xhZiBLaXJjaCBhbmRcXG4gIDIxOlxcdFxcdCAgVGVycnkgRGF3c29uLiBBdmFpbGFibGUgYXQgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZ3VpZGVzLmh0bWxcXHUwMDNlLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICAyNDpcXHRcXG4gIDI1OlxcdCMgQWxsIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcmUgZGVwZW5kZW50IG9uIE5FVERFVklDRVMgLSBkbyBub3QgcmVwZWF0XFxuICAyNjpcXHQjIHRoYXQgZm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMuXFxuICAyNzpcXHRpZiBORVRERVZJQ0VTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBNSUlcXG4gIDMwOlxcdFxcdHRyaXN0YXRlXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBORVRfQ09SRVxcbiAgMzM6XFx0XFx0ZGVmYXVsdCB5XFxuICAzNDpcXHRcXHRib29sIFxcXCJOZXR3b3JrIGNvcmUgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxcbiAgMzc6XFx0XFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTowMi41MDc5NDQzOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTE5MzYwMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgaGVyZSB3ZSBnby4gVGltZSB0byBidXJyb3cgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW5kIG9mIHRoZSBgaWYgTkVUX0NPUkVgIGNvbmRpdGlvbmFsIGJsb2NrLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JrIGRyaXZlcnMsIGFuZCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCBnZXRzIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGJ1aWxkaW5nIGZvciAuTkVUIENvcmUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoYXQgcGFydGljdWxhciBjb25kaXRpb25hbC4gS25vd2luZyB0aGUgZXhhY3Qgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgc2V0dGluZyB1cCBteSBwcm9qZWN0IGFuZCBhdm9pZGluZyBhbnkgdW53YW50ZWQgc3VycHJpc2VzLiBTbywgbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MDQuMDI3MzA4MDA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzNDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmRpZi4qTkVUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTQ4OT1jb25maWcgTUhJX05FVFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0OTc6ZW5kaWYgIyBORVRfQ09SRVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTowNC4wNzI5NTE5MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcyNDYyODg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBNQUNTRUNgLiBJdCBsb29rcyBsaWtlIGBORVRfQ09SRWAgaXMgbmVzdGVkIGluc2lkZSBgaWYgTkVUREVWSUNFU2AsIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYE5FVGAuIEFuZCBgTUFDU0VDYCBzaG93cyB1cCBhcm91bmQgbGluZSAzMTgsIGRpcmVjdGx5IHdpdGhpbiBgaWYgTkVUX0NPUkVgLiBTbywgdGhlIGhpZXJhcmNoeSBpcyBgTkVUREVWSUNFU2AsIHRoZW4gYE5FVF9DT1JFYCwgYW5kIGZpbmFsbHkgYE1BQ1NFQ2AuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3JzIGhlcmUsIGFuZCBteSBndXQgY2hlY2sgdGVsbHMgbWUgdGhhdCBgTkVUREVWSUNFU2AgYW5kIGBORVRfQ09SRWAgYXJlIHByZXR0eSBzdGFuZGFyZCBjb21wb25lbnRzIGluIHN5emthbGxlciBvciB0eXBpY2FsIExpbnV4IG5ldHdvcmsgY29uZmlndXJhdGlvbnMuIEp1c3QgdG8gYmUgY2VydGFpbiwgSSdsbCBjb25maXJtIHRoYXQgYE5FVF9DT1JFYCBpcyBpbmRlZWQgc2V0IHRvIFwieVwiICh5ZXMpIGJ5IGRlZmF1bHQgd2hlbiBgTkVUREVWSUNFU2AgaXMgYWxzbyBzZXQgdG8gXCJ5XCIuIEFuZCBJIHJlY2FsbCBub3cgdGhhdCBgTUFDU0VDYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIGVuYWJsaW5nIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYE5FVF9DT1JFYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEl0IGFwcGVhcnMgaXQgZG9lc24ndDsgaXQncyBqdXN0IGNvbnRyb2xsZWQgYnkgdGhhdCBvdXRlciBgaWYgTkVUREVWSUNFU2AuIFRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHN5bWJvbCBmb3IgYE1BQ1NFQ2AsIHdoaWNoIGlzIGBDT05GSUdfTUFDU0VDYC5cblxuQW5kIG5vdywgYmVmb3JlIEkgbW92ZSBvbiwgSSB3YW50IHRvIGJlIGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBzY2FuIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZSBgI2lmZGVmIENPTkZJR19gIG9yIGBJU19FTkFCTEVEKC4uLilgIGNoZWNrcy4gSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY29uZmlybSB0aGF0IGBNQUNTRUNgIGlzIHRoZSBvbmx5IGNvbmZpZyByZXF1aXJlZCB0byBlbmFibGUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjA3Ljc5NzU4NDMzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzc0OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklTX0VOQUJMRUR8Q09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MDcuODQ0NjI5MTM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTc1MDY4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWNzZWMuYyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgbWFjc2VjLmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMg4oCTIG5vIGAjaWZkZWZgcyBvciBgSVNfRU5BQkxFRGAgbWFjcm9zIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIFRoaXMgaXMgdW51c3VhbCwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGl0cyB1c2FnZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIG5ldHdvcmsgbmFtZXNwYWNlcy4gU2luY2UgdGhpcyBwYXRjaCBzZWVtcyB0byB0b3VjaCBvbiBuZXR3b3JrIG5hbWVzcGFjZXMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ0FQX05FVF9BRE1JTmAgd2l0aGluIHRob3NlIG5hbWVzcGFjZXMsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgQ09ORklHX05FVF9OU2AgaXMgYSBwcmVyZXF1aXNpdGUgb3IgaXMgYXQgYWxsIGludm9sdmVkIGhlcmUuIFRoZSBmYWN0IHRoaXMgZmlsZSBpcyBiZWluZyBjaGFuZ2VkIG1lYW5zIEkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLlxuXG5BaCwgYW5kIHRoZXJlIGl0IGlzLiBUaGlua2luZyBhYm91dCBgQ09ORklHX05FVF9OU2AsIHdoaWNoIHBlcm1pdHMgbXVsdGlwbGUgbmV0d29yayBuYW1lc3BhY2VzLCB0aGUgY29ncyBhcmUgdHVybmluZy4gVGhpcyBpcyB3aGVyZSBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGFjdHVhbGx5IGhhcyBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIGJldHdlZW4gdGhlIG1hY3NlYyBkZXZpY2UgYW5kIHRoZSBgcmVhbF9kZXZgLiBOb3cgSSBrbm93IHdoeSB0aGlzIGlzIGltcG9ydGFudCB0byBjaGVjay5cblxuVG8gYmUgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBgaW5pdC9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCBmaWxlcyBhcmUgbXkgbmV4dCBzdG9wLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX05FVF9OU2AgaXMgcHJlc2VudCBhbmQgaWYgaXQncyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgZW5hYmxlcyBtdWx0aXBsZSBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjEwLjQ2MjE0MDExNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDk3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQ2MD1jb25maWcgUElEX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ2Ny1cXG5pbml0L0tjb25maWc6MTQ2ODpjb25maWcgTkVUX05TXFxuaW5pdC9LY29uZmlnLTE0NjktXFx0Ym9vbCBcXFwiTmV0d29yayBuYW1lc3BhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjEwLjUwOTIwMDkzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzE2NzcwMzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBjb25maWd1cmVkIGF0IGJvb3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGluaXQvS2NvbmZpZ2AuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlIGNvcmUgZmVhdHVyZSB0b2dnbGVzLiBMZXQgbWUganVtcCB0aGVyZSBhbmQgbG9vayBmb3IgdGhlIGBORVRfTlNgIHN5bWJvbC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IGRlZmluZSB3aGV0aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgaXMgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBjb21wbGV0ZWx5IGRpc2FibGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbmFsIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBwb3RlbnRpYWxseSB0aGUgcmVsZXZhbnQgYm9vdCBhcmd1bWVudHMgb3Iga2VybmVsIG1vZHVsZXMgaW52b2x2ZWQuIExldCdzIHNlZSB3aGF0IGBLY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTE2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MjMuNjc2OTA1ODU5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ2NTpcXHRcXHQgIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIHBpZCBhcyBsb25nIGFzIHRoZXkgYXJlIGluIGRpZmZlcmVudFxcbjE0NjY6XFx0XFx0ICBwaWQgbmFtZXNwYWNlcy4gIFRoaXMgaXMgYSBidWlsZGluZyBibG9jayBvZiBjb250YWluZXJzLlxcbjE0Njc6XFx0XFxuMTQ2ODpcXHRjb25maWcgTkVUX05TXFxuMTQ2OTpcXHRcXHRib29sIFxcXCJOZXR3b3JrIG5hbWVzcGFjZVxcXCJcXG4xNDcwOlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuMTQ3MTpcXHRcXHRkZWZhdWx0IHlcXG4xNDcyOlxcdFxcdGhlbHBcXG4xNDczOlxcdFxcdCAgQWxsb3cgdXNlciBzcGFjZSB0byBjcmVhdGUgd2hhdCBhcHBlYXIgdG8gYmUgbXVsdGlwbGUgaW5zdGFuY2VzXFxuMTQ3NDpcXHRcXHQgIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxcbjE0NzU6XFx0XFxuMTQ3NjpcXHRlbmRpZiAjIE5BTUVTUEFDRVNcXG4xNDc3OlxcdFxcbjE0Nzg6XFx0Y29uZmlnIENIRUNLUE9JTlRfUkVTVE9SRVxcbjE0Nzk6XFx0XFx0Ym9vbCBcXFwiQ2hlY2twb2ludC9yZXN0b3JlIHN1cHBvcnRcXFwiXFxuMTQ4MDpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4xNDgxOlxcdFxcdHNlbGVjdCBQUk9DX0NISUxEUkVOXFxuMTQ4MjpcXHRcXHRzZWxlY3QgS0NNUFxcbjE0ODM6XFx0XFx0ZGVmYXVsdCBuXFxuMTQ4NDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjIzLjY3NzAxODUzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDg0NjIzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNQUNzZWMgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIHJlbGV2YW5jZSBvZiBgQ09ORklHX01BQ1NFQ2AgYW5kIGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gY292ZXJpbmcgYWxsIGJhc2VzLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gcnRuZXRsaW5rIG9yIE1BQ3NlYywganVzdCBpbiBjYXNlLiBJIGtub3cgYHJ0bmV0bGluay5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWxzbyByZWNhbGwgdGhhdCBgZHJpdmVycy9uZXQvbWFjc2VjLmNgIHNlbGVjdHMgYSBidW5jaCBvZiBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uczogYENSWVBUT2AsIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBhbmQgYEdST19DRUxMU2AuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIG9mIGl0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1hY3NlY19jaGFuZ2VsaW5rYCBhbmQgaW50cm9kdWNlcyBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUga2V5IGhlcmUgaXMgdGhlIG5hbWVzcGFjZSBjaGVjazsgaXQncyBkZXNpZ25lZCB0byB2ZXJpZnkgY2FwYWJpbGl0aWVzIHdoZW5ldmVyIHdlIGNoYW5nZSBhdHRyaWJ1dGVzIG9mIGEgTUFDc2VjIGRldmljZSwgZXNwZWNpYWxseSB3aGVuIGl0cyB1bmRlcmx5aW5nICdyZWFsJyBkZXZpY2UgbWlnaHQgcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCBvciB3aGVuIHRoZSBvZmZsb2FkIHN0YXRlIGNoYW5nZXMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIEl04oCZcyB0cmlnZ2VyZWQgdmlhIHJ0bmV0bGluayBjYWxsc+KAlHNwZWNpZmljYWxseSBgUlRNX05FV0xJTktgIGFuZCBgUlRNX1NFVExJTktgLiBUaGF0J3MgYSBkaXJlY3QgYXR0YWNrIHN1cmZhY2UgZnJvbSB1c2Vyc3BhY2UuIEdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiBuYW1lc3BhY2UgcGVybWlzc2lvbnMgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIG9mZmxvYWQgbWFuaXB1bGF0aW9ucywgaXQncyBzY3JlYW1pbmcgXCJXb3J0aEZ1enppbmchXCIuXG5cblNvLCBmb3IgZnV6emluZywgdGhlIGNyaXRpY2FsIHN5bWJvbHMgYXJlOiBgbWFjc2VjX2NoYW5nZWxpbmtgIGFuZCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUgY29uZmlndXJhdGlvbnMgdGhhdCB3aWxsIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29kZSBhcmUgYE1BQ1NFQ2AgYW5kIGBORVRfTlNgLlxuXG5JbiBzaG9ydCwgdGhlIHBhdGNoIGFkZHMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBhbmQgY2FsbHMgaXQgZnJvbSBgbWFjc2VjX2NoYW5nZWxpbmtgIHRvIHZhbGlkYXRlIGBDQVBfTkVUX0FETUlOYCBwcml2aWxlZ2VzIG92ZXIgYSBgcmVhbF9kZXZg4oCZcyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIGFsdGVyaW5nIG9mZmxvYWRlZCBNQUNzZWMgZGV2aWNlcyBvciBjaGFuZ2luZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIE1BQ3NlYyBuZXR3b3JrIGRyaXZlciwgYW5kIGNhbiBiZSBhY2Nlc3NlZCBhbmQgbWFuaXB1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoYFJUTV9ORVdMSU5LYC9gUlRNX1NFVExJTktgKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBmdXp6aW5nIGlzIGFwcHJvcHJpYXRlIHRvIHRlc3QgbGluayBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGFuZCBuYW1lc3BhY2UgcGVybWlzc2lvbiBoYW5kbGluZy5cblxuQWxyaWdodCwgdGhhdCdzIGV2ZXJ5dGhpbmcuIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzc0LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjI4LjE2MTY0NTQ5OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTk3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNTRUNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zXCIsXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoKSBhbmQgY2FsbHMgaXQgd2l0aGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gZW5mb3JjZSBuYW1lc3BhY2UgcGVybWlzc2lvbiBjaGVja3MgKHJlcXVpcmluZyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsX2RldiBuZXR3b3JrIG5hbWVzcGFjZSkgd2hlbiBjaGFuZ2luZyBNQUNzZWMgb2ZmbG9hZCBzdGF0ZSBvciB1cGRhdGluZyBvZmZsb2FkZWQgZGV2aWNlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIHRoZSB2aXJ0dWFsIE1BQ3NlYyBuZXR3b3JraW5nIGRyaXZlciwgZXhlcmNpc2FibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX05FV0xJTksgLyBSVE1fU0VUTElOSykgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1NFQ1wiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNcIixcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpIGFuZCBjYWxscyBpdCB3aXRoaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byBlbmZvcmNlIG5hbWVzcGFjZSBwZXJtaXNzaW9uIGNoZWNrcyAocmVxdWlyaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHJlYWxfZGV2IG5ldHdvcmsgbmFtZXNwYWNlKSB3aGVuIGNoYW5naW5nIE1BQ3NlYyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0aW5nIG9mZmxvYWRlZCBkZXZpY2VzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIHZpcnR1YWwgTUFDc2VjIG5ldHdvcmtpbmcgZHJpdmVyLCBleGVyY2lzYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fTkVXTElOSyAvIFJUTV9TRVRMSU5LKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjI4LjI0MDY1MTg3OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMjI1Njk3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OToyOC4yNDExODI0NThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzEyMjAzNDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSdzIG5ldHdvcmsgbmFtZXNwYWNlIHdoZW4gbW9kaWZ5aW5nIG9mZmxvYWQgY29uZmlndXJhdGlvbiBvbiBhIE1BQ3NlYyBuZXRkZXZpY2UgYWNyb3NzIG5hbWVzcGFjZXMuIEl0IG9ubHkgaW5zcGVjdHMgZXhpc3RpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9pbnRlcnMgYW5kIHN0cnVjdCBtYWNzZWNfZGV2IGZpZWxkcywgYW5kIGNvbmRpdGlvbmFsbHkgZW1pdHMgYSBzdGF0aWMgbmV0bGluayBleHRlbmRlZCBBQ0sgZXJyb3Igc3RyaW5nIG9uIHBlcm1pc3Npb24gZGVuaWFsLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3B5aW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS9pbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIxOjQ4OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuaW5kZXggNmY5ZjNhY2VmZmFhZC4uZTAxOWU3YTI1Y2M5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JvX2NlbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaFx1MDAzZVxuQEAgLTM5NDUsNiArMzk0NiwzMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIEJvdGggYSBjaGFuZ2Ugb2YgdGhlIG9mZmxvYWQgc3RhdGUgKG1kb19hZGRfc2VjeSgpL21kb19kZWxfc2VjeSgpKSBhbmRcbisgKiBhbnkgcmVxdWVzdCBhZ2FpbnN0IGFuIGFscmVhZHkgb2ZmbG9hZGVkIGRldmljZSAobWRvX3VwZF9zZWN5KCkpIHJlYWNoXG4rICogdGhlIGRyaXZlciBvZiByZWFsX2Rldiwgd2hpY2ggbWF5IGxpdmUgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBmcm9tIHRoZSBtYWNzZWMgZGV2aWNlLiBSZXF1aXJlIENBUF9ORVRfQURNSU4gb3ZlciByZWFsX2RldidzIG5hbWVzcGFjZVxuKyAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbitcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbitcdGJvb2wgcmVhY2hlc19yZWFsX2RldjtcbitcbitcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4rXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cdTAwM2VvZmZsb2FkKVxuK1x0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbitcbitcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxuK1x0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0ICAgICAgIFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVwiKTtcbitcdHJldHVybiAtRVBFUk07XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbkBAIC0zOTU5LDYgKzM5ODcsMTAgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0aWYgKCFkYXRhKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxuIFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MjguMjQxMTgzNzQ4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY4Mjk4OTY5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSdsbCBhbmFseXplIHRoZSBjb2RlIGNoYW5nZXMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4gSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AuIFRoZSBmdW5jdGlvbiBjaGVja3MgaWYgY2hhbmdlcyB0byB0aGUgTUFDc2VjIGRldmljZSBjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZywgYWZmZWN0IHRoZSB1bmRlcmx5aW5nIFwicmVhbCBkZXZpY2UsXCIgd2hpY2ggbWlnaHQgcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLiBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYSBzZXBhcmF0ZSBuYW1lc3BhY2UsIHRoZSBwYXRjaCBlbmZvcmNlcyBgQ0FQX05FVF9BRE1JTmAgb3ZlciB0aGF0IG90aGVyIG5hbWVzcGFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIHBlcm1pc3Npb24gY2hlY2sgcmVsYXRlZCB0byBjcm9zcy1uYW1lc3BhY2Ugb3BlcmF0aW9ucy4gVGhlIGFkZGVkIGNvZGUgaXMgYSBnYXRla2VlcGVyIHRoYXQgZW5zdXJlcyB0aGUgY2FsbGVyIGhhcyB0aGUgbmVjZXNzYXJ5IHByaXZpbGVnZXMgdG8gbW9kaWZ5IGEgTUFDc2VjIGRldmljZSB0aGF0IGhhcyBpdHMgcmVhbCBkZXZpY2UgaW4gYSBzZXBhcmF0ZSBuYW1lc3BhY2UuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGNoYW5nZXMgdG8gdGhlIG9mZmxvYWQgc3RhdGUgb3IgYW55IG9wZXJhdGlvbnMgb24gYW4gb2ZmbG9hZGVkIGRldmljZSB3aGVyZSB0aGUgJ3JlYWwnIGRldmljZSBpcyBpbiBhIGRpZmZlcmVudCBuYW1lc3BhY2UsIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mIGFuZCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIGZ1enppbmcgc3RyYXRlZ2llcy4gU2luY2UgdGhpcyBpcyBhbiBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20sIGl0IG1heSBub3QgaW50cm9kdWNlIG5ldywgZWFzaWx5IGV4cGxvaXRhYmxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gTXkgaW5zdGluY3RzIHN1Z2dlc3QgdGhhdCBleGlzdGluZyBmdXp6aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIHdvdWxkIGNoZWNrIGFueSBleGlzdGluZyBmdXp6aW5nIGNvdmVyYWdlIG9mIG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9uIGluIHRoaXMgYXJlYSwgYW5kIHBlcmhhcHMgYWRkIGEgdGVzdGNhc2UgZm9yIHRoaXMgc3BlY2lmaWMgY2hlY2ssIGlmIGl0IGRvZXMgbm90IGV4aXN0LiBIb3dldmVyLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGEgZGVkaWNhdGVkIHNlc3Npb24gZG9lc24ndCBzZWVtIHN0cmljdGx5IG5lY2Vzc2FyeSAqYXQgdGhpcyBwb2ludCouIEknbGwgbmVlZCB0byBkbyBtb3JlIGRpZ2dpbmcgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjM1LjA3MTA4MzM4MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk0MDpcXHRcXHRcXHRpZiAoc2VjeS1cXHUwMDNleHBuIFxcdTAwMjZcXHUwMDI2XFxuMzk0MTpcXHRcXHRcXHQgICAgcmVwbGF5X3dpbmRvdyBcXHUwMDNlIE1BQ1NFQ19YUE5fTUFYX1JFUExBWV9XSU5ET1cpXFxuMzk0MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTQzOlxcdFxcdFxcdFdSSVRFX09OQ0Uoc2VjeS1cXHUwMDNlcmVwbGF5X3dpbmRvdywgcmVwbGF5X3dpbmRvdyk7XFxuMzk0NDpcXHRcXHR9XFxuMzk0NTpcXHRcXG4zOTQ2OlxcdFxcdHJldHVybiAwO1xcbjM5NDc6XFx0fVxcbjM5NDg6XFx0XFxuMzk0OTpcXHQvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kXFxuMzk1MDpcXHQgKiBhbnkgcmVxdWVzdCBhZ2FpbnN0IGFuIGFscmVhZHkgb2ZmbG9hZGVkIGRldmljZSAobWRvX3VwZF9zZWN5KCkpIHJlYWNoXFxuMzk1MTpcXHQgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxcbjM5NTI6XFx0ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYncyBuYW1lc3BhY2VcXG4zOTUzOlxcdCAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxcbjM5NTQ6XFx0ICovXFxuMzk1NTpcXHRzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMzk1NjpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjM5NTc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zOTU4OlxcdHtcXG4zOTU5OlxcdFxcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xcbjM5NjA6XFx0XFx0Ym9vbCByZWFjaGVzX3JlYWxfZGV2O1xcbjM5NjE6XFx0XFxuMzk2MjpcXHRcXHRyZWFjaGVzX3JlYWxfZGV2ID0gbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpO1xcbjM5NjM6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gXFx1MDAyNlxcdTAwMjZcXG4zOTY0OlxcdFxcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cXHUwMDNlb2ZmbG9hZClcXG4zOTY1OlxcdFxcdFxcdHJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlO1xcbjM5NjY6XFx0XFxuMzk2NzpcXHRcXHRpZiAoIXJlYWNoZXNfcmVhbF9kZXYgfHxcXG4zOTY4OlxcdFxcdCAgICBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXFx1MDAzZXJlYWxfZGV2KSkpXFxuMzk2OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zOTcwOlxcdFxcbjM5NzE6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjM5NzI6XFx0XFx0XFx0ICAgICAgIFxcXCJDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXFxcIik7XFxuMzk3MzpcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjM5NzQ6XFx0fVxcbjM5NzU6XFx0XFxuMzk3NjpcXHRzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuMzk3NzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4zOTc4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjM5Nzk6XFx0e1xcbjM5ODA6XFx0XFx0c3RydWN0IG1hY3NlY19kZXYgKm1hY3NlYyA9IG1hY3NlY19wcml2KGRldik7XFxuMzk4MTpcXHRcXHRib29sIG1hY3NlY19vZmZsb2FkX3N0YXRlX2NoYW5nZSA9IGZhbHNlO1xcbjM5ODI6XFx0XFx0ZW51bSBtYWNzZWNfb2ZmbG9hZCBvZmZsb2FkO1xcbjM5ODM6XFx0XFx0c3RydWN0IG1hY3NlY190eF9zYyB0eF9zYztcXG4zOTg0OlxcdFxcdHN0cnVjdCBtYWNzZWNfc2VjeSBzZWN5O1xcbjM5ODU6XFx0XFx0aW50IHJldDtcXG4zOTg2OlxcdFxcbjM5ODc6XFx0XFx0aWYgKCFkYXRhKVxcbjM5ODg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzk4OTpcXHRcXG4zOTkwOlxcdFxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTtcXG4zOTkxOlxcdFxcdGlmIChyZXQpXFxuMzk5MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5OTM6XFx0XFxuMzk5NDpcXHRcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XFxuMzk5NTpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxcbjM5OTY6XFx0XFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fFxcbjM5OTc6XFx0XFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfUE9SVF0pXFxuMzk5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTozNS4wNzEzNzQyOTFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjI5MTgyMjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNQUNzZWMgTGluayBBdHRyaWJ1dGUgQ2hhbmdlIFBhdGNoKipcblxuT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhpcyBwYXRjaC4gSXQncyBhIHByZXR0eSBjbGVhbiBhZGRpdGlvbiwgcmVhbGx5LiBFc3NlbnRpYWxseSwgaXQncyBhZGRpbmcgYSBjcnVjaWFsIHBlcm1pc3Npb24gY2hlY2s6IGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhkZXYsIGRhdGEsIGV4dGFjaylgLiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCB3aGVuZXZlciBzb21lb25lIGF0dGVtcHRzIHRvIGNoYW5nZSBsaW5rIGF0dHJpYnV0ZXMgb24gYSBNQUNzZWMgZGV2aWNlLCAqYW5kKiB0aGF0IGRldmljZSdzIHVuZGVybHlpbmcgXCJyZWFsXCIgZGV2aWNlIGxpdmVzIGluIGEgKmRpZmZlcmVudCogbmV0d29yayBuYW1lc3BhY2UuIENydWNpYWxseSwgdGhpcyBjaGVjayBmb2N1c2VzIHNwZWNpZmljYWxseSBvbiBjaGFuZ2VzIHRoYXQgdG91Y2ggb2ZmbG9hZCBjb25maWd1cmF0aW9ucyBvciByZWFjaCB0aGUgcmVhbCBkZXZpY2UsIGFuZCB0aGUgY2hlY2sgcmVxdWlyZXMgYENBUF9ORVRfQURNSU5gIGluIHRoYXQgKnJlYWxfZGV2KiBuYW1lc3BhY2UsIHVzaW5nIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKClgLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm5zLCB3aGVuIGxvb2tpbmcgYXQgYSBwYXRjaCBsaWtlIHRoaXMsIGFyZSBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IGZyb20gYSBzZWN1cml0eSBwb2ludCBvZiB2aWV3LlxuXG4qICAgKipVc2VyLVNwYWNlIERhdGEgU3RydWN0dXJlczoqKiBOby4gSXQncyBqdXN0IHNldHRpbmcgYW4gZXJyb3IgbWVzc2FnZSB2aWEgYE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgLi4uKWAgaWYgdGhlIHBlcm1pc3Npb24gY2hlY2sgZmFpbHMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBleGlzdGluZyBvbmVzIGFyZSBiZWluZyBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGlzc3Vlcy5cbiogICAqKkNvbmRpdGlvbmFsIExvZ2ljIGFuZCBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBOb3BlLiBUaGUgY29kZSBhY2Nlc3NlcyBhIGBtYWNzZWNgIHBvaW50ZXIgdGhyb3VnaCBgbWFjc2VjX3ByaXYoZGV2KWAsIHdoaWNoIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhlIGBkYXRhYCBhcnJheSBjb21lcyBkaXJlY3RseSBmcm9tIGBydG5sYCB3aGljaCBwYXJzZXMgbmV0bGluayBhdHRyaWJ1dGVzIHNvIGl0IGlzIGluaXRpYWxpemVkLiBgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpYCBhbmQgYG1hY3NlYy1cdTAwM2VvZmZsb2FkYCBhcmUgZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkcy4gU28sIG5vIGNvbmNlcm5zIHRoZXJlLlxuKiAgICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbjoqKiBOb3QgaGFwcGVuaW5nLiBUaGUgcGF0Y2ggZG9lc24ndCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgd2UnZCBuZWVkIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyLlxuKiAgICoqQm91bmRzIENoZWNrcy9CdWZmZXIgTWFuaXB1bGF0aW9uOioqIE5vcGUuIE5vIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgYnVmZmVyIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcyBjb250cm9sIG1lYXN1cmUgd2l0aGluIHRoZSBgcnRubGAgY2hhbmdlbGluayBjYWxsYmFjayBmb3IgTUFDc2VjLiBJdCdzIGEgcGVybWlzc2lvbiBnYXRlLCBub3QgYSBkYXRhIG1hbmlwdWxhdGlvbiBvciBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhZnRlciBnb2luZyB0aHJvdWdoIGl0LCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiAqKk5lZWRzS01TQU4gPSBmYWxzZSoqLlxuXG5GaW5hbGx5LCBsZXQgbWUgY2xhcmlmeSB0aGUgcmF0aW9uYWxlIGFuZCBjb250cmFzdCBpdCB3aXRoIEtBU0FOOlxuXG4qICAgKipLQVNBTjoqKiBXZSB1c2UgdGhpcyB0byBodW50IGZvciBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgLSB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdGhhdCBraW5kIG9mIHRoaW5nLlxuKiAgICoqS01TQU46KiogVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2VyIHNwYWNlLlxuXG5UaGlzIHBhdGNoLCBob3dldmVyLCBpcyBzaW1wbHkgYWJvdXQgbmFtZXNwYWNlIGNhcGFiaWxpdHkgdmFsaWRhdGlvbiwgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKClgLCB1c2luZyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSgpYCB3aGVuIG9mZmxvYWQgY29uZmlndXJhdGlvbiBtaWdodCByZWFjaCBgcmVhbF9kZXZgIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuIE5vIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIGJ1ZmZlciBvcGVyYXRpb25zIGFyZSBpbnRyb2R1Y2VkLCBhbmQgaW1wb3J0YW50bHksIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IG9ubHkgY2hlY2tzIHRoZSBwZXJtaXNzaW9uIG9uIHRoZSBuYW1lc3BhY2UuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZCwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUuIEl0J3MgYSBzb2xpZCwgY2xlYW4sIHBlcm1pc3Npb24gY2hlY2ssIGFuZCBubyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTo0MS4zNjMyMDAyNzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uIGNoZWNrIChtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucykgdmVyaWZ5aW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbCBkZXZpY2UncyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uIGNoZWNrIChtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucykgdmVyaWZ5aW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbCBkZXZpY2UncyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7x9fk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 21:46:37 +0000 UTC FinishedAt: 2026-09-11 21:49:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC", "NET_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACSEC", "NET_NS" ], "series_id": "bf439aa4-7b8a-4b11-a213-9e9843925f21" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macsec_changelink_check_netns", "macsec_changelink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1NFQyYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyYjMzQ7LAogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uIGNoZWNrIChtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucykgdmVyaWZ5aW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbCBkZXZpY2UmIzM5O3MgbmV0d29yayBuYW1lc3BhY2Ugd2hlbiBtb2RpZnlpbmcgb2ZmbG9hZCBjb25maWd1cmF0aW9uIG9uIGEgTUFDc2VjIG5ldGRldmljZSBhY3Jvc3MgbmFtZXNwYWNlcy4gSXQgb25seSBpbnNwZWN0cyBleGlzdGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2ludGVycyBhbmQgc3RydWN0IG1hY3NlY19kZXYgZmllbGRzLCBhbmQgY29uZGl0aW9uYWxseSBlbWl0cyBhIHN0YXRpYyBuZXRsaW5rIGV4dGVuZGVkIEFDSyBlcnJvciBzdHJpbmcgb24gcGVybWlzc2lvbiBkZW5pYWwuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcHlpbmcsIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5L2luZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpIGFuZCBjYWxscyBpdCB3aXRoaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byBlbmZvcmNlIG5hbWVzcGFjZSBwZXJtaXNzaW9uIGNoZWNrcyAocmVxdWlyaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHJlYWxfZGV2IG5ldHdvcmsgbmFtZXNwYWNlKSB3aGVuIGNoYW5naW5nIE1BQ3NlYyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0aW5nIG9mZmxvYWRlZCBkZXZpY2VzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIHZpcnR1YWwgTUFDc2VjIG5ldHdvcmtpbmcgZHJpdmVyLCBleGVyY2lzYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fTkVXTElOSyAvIFJUTV9TRVRMSU5LKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTI1Nzc1MGE0ZGY0YTJhMjY3ZjdjM2Y4MmI3YzRkMGVhNjdlOTcwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjE6NDg6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuaW5kZXggNmY5ZjNhY2VmZmFhZC4uZTAxOWU3YTI1Y2M5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuQEAgLTE5LDYgJiM0MzsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk0NSw2ICYjNDM7Mzk0NiwzMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kXG4mIzQzOyAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbiYjNDM7ICogdGhlIGRyaXZlciBvZiByZWFsX2Rldiwgd2hpY2ggbWF5IGxpdmUgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VcbiYjNDM7ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYmIzM5O3MgbmFtZXNwYWNlXG4mIzQzOyAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbiYjNDM7XHRib29sIHJlYWNoZXNfcmVhbF9kZXY7XG4mIzQzO1xuJiM0MztcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4mIzQzO1x0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVx1MDAzZW9mZmxvYWQpXG4mIzQzO1x0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XG4mIzQzO1x0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbkBAIC0zOTU5LDYgJiM0MzszOTg3LDEwIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDU0VDJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zJiMzNDssCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoKSBhbmQgY2FsbHMgaXQgd2l0aGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gZW5mb3JjZSBuYW1lc3BhY2UgcGVybWlzc2lvbiBjaGVja3MgKHJlcXVpcmluZyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsX2RldiBuZXR3b3JrIG5hbWVzcGFjZSkgd2hlbiBjaGFuZ2luZyBNQUNzZWMgb2ZmbG9hZCBzdGF0ZSBvciB1cGRhdGluZyBvZmZsb2FkZWQgZGV2aWNlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIHRoZSB2aXJ0dWFsIE1BQ3NlYyBuZXR3b3JraW5nIGRyaXZlciwgZXhlcmNpc2FibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX05FV0xJTksgLyBSVE1fU0VUTElOSykgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDIxOjQ4OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwppbmRleCA2ZjlmM2FjZWZmYWFkLi5lMDE5ZTdhMjVjYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvZ3JvX2NlbGxzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hY3NlYy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgmZ3Q7CkBAIC0zOTQ1LDYgJiM0MzszOTQ2LDMzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kCiYjNDM7ICogYW55IHJlcXVlc3QgYWdhaW5zdCBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UgKG1kb191cGRfc2VjeSgpKSByZWFjaAomIzQzOyAqIHRoZSBkcml2ZXIgb2YgcmVhbF9kZXYsIHdoaWNoIG1heSBsaXZlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYmIzM5O3MgbmFtZXNwYWNlCiYjNDM7ICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJIHN0cnVjdCBubGF0dHIgKmRhdGFbXSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTsKJiM0MzsJYm9vbCByZWFjaGVzX3JlYWxfZGV2OwomIzQzOwomIzQzOwlyZWFjaGVzX3JlYWxfZGV2ID0gbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpOwomIzQzOwlpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy0mZ3Q7b2ZmbG9hZCkKJiM0MzsJCXJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoIXJlYWNoZXNfcmVhbF9kZXYgfHwKJiM0MzsJICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy0mZ3Q7cmVhbF9kZXYpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkgICAgICAgJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwlyZXR1cm4gLUVQRVJNOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCSAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLAogCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCkBAIC0zOTU5LDYgJiM0MzszOTg3LDEwIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAwOwogCiYjNDM7CXJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJaWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fAogCSAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDc2VjIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSByZXZpZXcgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLiBUaGUgZGlmZiBzaG93cyBhIG5ldyBmdW5jdGlvbiwgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCwgYW5kIGEgY2FsbCB0byBpdCB3aXRoaW4gYG1hY3NlY19jaGFuZ2VsaW5rYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjb21tZW50IGFib3ZlIGl0IGlzIGtleTogaXQgc2VlbXMgdG8gYmUgYWJvdXQgYWNjZXNzIGNvbnRyb2wgd2hlbiBkZWFsaW5nIHdpdGggb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2VzIGFuZCB0aGVpciAmIzM0O3JlYWwmIzM0OyB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggbWlnaHQgcmVzaWRlIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuCgpUaGUgY29yZSBpZGVhIGFwcGVhcnMgdG8gYmUgY2hlY2tpbmcgd2hldGhlciBhIGNoYW5nZSB0byB0aGUgTUFDc2VjIGRldmljZSBjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0ZXMgdG8gYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlLCBpbnRlcmFjdHMgd2l0aCB0aGUgJiMzNDtyZWFsJiMzNDsgZGV2aWNlLiBJZiBpdCAqZG9lcyogdG91Y2ggdGhlIHJlYWwgZGV2aWNlLCBhbmQgdGhhdCBkZXZpY2UgbGl2ZXMgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2UsIHRoZW4gYENBUF9ORVRfQURNSU5gIGNhcGFiaWxpdHkgd2l0aGluIHRoYXQgdGFyZ2V0IG5hbWVzcGFjZSBpcyByZXF1aXJlZC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGEgY3J1Y2lhbCBpc29sYXRpb24gbWVjaGFuaXNtLCBhbmQgd2Ugc2hvdWxkbiYjMzk7dCBhbGxvdyBvcGVyYXRpb25zIG9uIG9uZSBuYW1lc3BhY2UgdG8gaW1wbGljaXRseSBhZmZlY3QgYW5vdGhlciB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24uCgpMb29raW5nIGF0IHRoZSBjb2RlLCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGNoZWNrcyB0d28gY29uZGl0aW9uczogd2hldGhlciB0aGUgTUFDc2VjIGRldmljZSBpcyBvZmZsb2FkZWQgKHdoaWNoIGltcGxpZXMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVhbCBkZXZpY2UpIG9yIHdoZXRoZXIgdGhlIG9mZmxvYWQgc3RhdGUgaXMgY2hhbmdpbmcuIFRoZSBwYXRjaCB0aGVuIHNlZW1zIHRvIHZlcmlmeSB0aGUgY2FwYWJpbGl0eSwgYW5kIHJldHVybnMgYC1FUEVSTWAgd2l0aCBhbiBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZhaWxzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzZWN1cml0eSBtZWFzdXJlIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGNyb3NzLW5hbWVzcGFjZSBvcGVyYXRpb25zLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBkZXRlcm1pbmUgaG93IHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQvZGlzYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB3aGV0aGVyIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgcHJlc2VudCwgdG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQUNTRUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM3NjAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L0tjb25maWc9MzAyPWNvbmZpZyBBTVRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzE4OmNvbmZpZyBNQUNTRUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzE5LVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0lGQikgJiM0Mzs9IGlmYi5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfTUFDU0VDKSAmIzQzOz0gbWFjc2VjLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19BTVQpICYjNDM7PSBhbXQub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWc9MTk9Y29uZmlnIEFRVElPTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZzoyMjpcdGRlcGVuZHMgb24gTUFDU0VDIHx8IE1BQ1NFQz1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnLTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL01ha2VmaWxlPTEzPWF0bGFudGljLW9ianMgOj0gYXFfbWFpbi5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGUtMzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9NYWtlZmlsZTozNDphdGxhbnRpYy0kKENPTkZJR19NQUNTRUMpICYjNDM7PSBhcV9tYWNzZWMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGUtMzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jPTExND1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfdHhfc3RhdF9uYW1lc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0xMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMTIwLXN0YXRpYyBjb25zdCBjaGFyIGFxX21hY3NlY19zdGF0X25hbWVzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MTgzPXN0YXRpYyB1MzIgYXFfZXRodG9vbF9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0xOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTk3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMTk4LVx0aWYgKG5pYy1cdTAwM2VtYWNzZWNfY2ZnKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jPTIxMj1zdGF0aWMgdm9pZCBhcV9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0yMjEtI2VuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MjIyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjIzLVx0ZGF0YSA9IGFxX21hY3NlY19nZXRfc3RhdHMoYXFfbmljLCBkYXRhKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MjUyPXN0YXRpYyB2b2lkIGFxX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTI1OC1cdGludCBpLCBzaTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzoyNTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0yNjAtXHRpbnQgc2E7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMyMi0jZW5kaWZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozMjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zMjQtXHRcdGlmICghbmljLVx1MDAzZW1hY3NlY19jZmcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMyOC1cdFx0cCA9IHAgJiM0Mzsgc2l6ZW9mKGFxX21hY3NlY19zdGF0X25hbWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozMjk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzMwLVx0XHRcdHN0cnVjdCBhcV9tYWNzZWNfdHhzYyAqYXFfdHhzYztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzQxLVx0XHRcdGFxX3R4c2MgPSBcdTAwMjZuaWMtXHUwMDNlbWFjc2VjX2NmZy1cdTAwM2VhcV90eHNjW2ldO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjM0MjpcdFx0XHRmb3IgKHNhID0gMDsgc2EgXHUwMDNjIE1BQ1NFQ19OVU1fQU47IHNhJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM0My1cdFx0XHRcdGlmICghKHRlc3RfYml0KHNhLCBcdTAwMjZhcV90eHNjLVx1MDAzZXR4X3NhX2lkeF9idXN5KSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM1My1cdFx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjM1NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNTUtXHRcdFx0c3RydWN0IGFxX21hY3NlY19yeHNjICphcV9yeHNjO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNjAtXHRcdFx0YXFfcnhzYyA9IFx1MDAyNm5pYy1cdTAwM2VtYWNzZWNfY2ZnLVx1MDAzZWFxX3J4c2NbaV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MzYxOlx0XHRcdGZvciAoc2EgPSAwOyBzYSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgc2EmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzYyLVx0XHRcdFx0aWYgKCEodGVzdF9iaXQoc2EsIFx1MDAyNmFxX3J4c2MtXHUwMDNlcnhfc2FfaWR4X2J1c3kpKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMC0jaW5jbHVkZSBcJiMzNDttYWNzZWMvbWFjc2VjX2FwaS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTojZGVmaW5lIEFRX01BQ1NFQ19LRVlfTEVOXzEyOF9CSVQgMTZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEyOiNkZWZpbmUgQVFfTUFDU0VDX0tFWV9MRU5fMTkyX0JJVCAyNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTM6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8yNTZfQklUIDMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00OT1zdGF0aWMgaW50IGFxX2dldF90eHNjX2lkeF9mcm9tX3NlY3koc3RydWN0IGFxX21hY3NlY19jZmcgKm1hY3NlY19jZmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo1NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01OC1cdFx0aWYgKG1hY3NlY19jZmctXHUwMDNlYXFfdHhzY1tpXS5zd19zZWN5ID09IHNlY3kpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9NjQ9c3RhdGljIGludCBhcV9nZXRfcnhzY19pZHhfZnJvbV9yeHNjKHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzI6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzMtXHRcdGlmIChtYWNzZWNfY2ZnLVx1MDAzZWFxX3J4c2NbaV0uc3dfcnhzYyA9PSByeHNjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTk3PXN0YXRpYyB2b2lkIGFxX3JvdGF0ZV9rZXlzKHUzMiAoKmtleSlbOF0sIGNvbnN0IGludCBrZXlfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwNDpcdGlmIChrZXlfbGVuID09IEFRX01BQ1NFQ19LRVlfTEVOXzEyOF9CSVQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEwNS1cdFx0KCprZXkpWzBdID0gc3dhYjMyKHRtcFszXSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA4LVx0XHQoKmtleSlbM10gPSBzd2FiMzIodG1wWzBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwOTpcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBBUV9NQUNTRUNfS0VZX0xFTl8xOTJfQklUKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMTAtXHRcdCgqa2V5KVswXSA9IHN3YWIzMih0bXBbNV0pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExNS1cdFx0KCprZXkpWzVdID0gc3dhYjMyKHRtcFswXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTY6XHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gQVFfTUFDU0VDX0tFWV9MRU5fMjU2X0JJVCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTE3LVx0XHQoKmtleSlbMF0gPSBzd2FiMzIodG1wWzddKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMzM9c3RhdGljIGludCBhcV9nZXRfbWFjc2VjX2NvbW1vbl9zdGF0cyhzdHJ1Y3QgYXFfaHdfcyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQwOlx0LyogTUFDU0VDIGNvdW50ZXJzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNDEtXHRyZXQgPSBhcV9tc3NfZ2V0X2luZ3Jlc3NfY29tbW9uX2NvdW50ZXJzKGh3LCBcdTAwMjZpbmdyZXNzX2NvdW50ZXJzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0zMDE9c3RhdGljIGludCBhcV9tZG9fZGV2X3N0b3Aoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMzA1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MzA2Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTMwNy1cdFx0aWYgKG5pYy1cdTAwM2VtYWNzZWNfY2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kgXHUwMDI2IEJJVChpKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0zMTU9c3RhdGljIGludCBhcV9zZXRfdHhzYyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHR4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2MC1cdHN3aXRjaCAoc2VjeS1cdTAwM2VrZXlfbGVuKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjE6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzEyOF9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjItXHRcdHNjX3JlYy5zYWtfbGVuID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2My1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjQ6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzE5Ml9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjUtXHRcdHNjX3JlYy5zYWtfbGVuID0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2Ni1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjc6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzI1Nl9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjgtXHRcdHNjX3JlYy5zYWtfbGVuID0gMjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00NDA9c3RhdGljIGludCBhcV9tZG9fYWRkX3NlY3koc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNDUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NDUyOlx0c2Nfc2EgPSBzY19zYV9mcm9tX251bV9hbihNQUNTRUNfTlVNX0FOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTQ1My1cdGlmIChzY19zYSA9PSBhcV9tYWNzZWNfc2Ffc2Nfbm90X3VzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNDU5LVx0dHhzY19pZHggPSBmZnooY2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NDYwOlx0aWYgKHR4c2NfaWR4ID09IEFRX01BQ1NFQ19NQVhfU0MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy00NjEtXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTQ5Mj1zdGF0aWMgaW50IGFxX2NsZWFyX3R4c2Moc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IGludCB0eHNjX2lkeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01MDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo1MDI6XHRmb3JfZWFjaF9zZXRfYml0IChzYV9udW0sIFx1MDAyNnR4X3NjLVx1MDAzZXR4X3NhX2lkeF9idXN5LCBBUV9NQUNTRUNfTUFYX1NBKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01MDMtXHRcdHJldCA9IGFxX2NsZWFyX3R4c2EobmljLCB0eF9zYywgc2FfbnVtLCBjbGVhcl90eXBlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz02NzA9c3RhdGljIGludCBhcV9yeHNjX3ZhbGlkYXRlX2ZyYW1lcyhjb25zdCBlbnVtIG1hY3NlY192YWxpZGF0aW9uX3R5cGUgdmFsaWRhdGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNjcyLVx0c3dpdGNoICh2YWxpZGF0ZSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NjczOlx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfRElTQUJMRUQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzQtXHRcdHJldHVybiAyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Njc1Olx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfQ0hFQ0s6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzYtXHRcdHJldHVybiAxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Njc3Olx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfU1RSSUNUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNjc4LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz02ODY9c3RhdGljIGludCBhcV9zZXRfcnhzYyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgdTMyIHJ4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTcwMC1cdHByZV9jbGFzc19yZWNvcmQuc2NpX21hc2sgPSAweGZmO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzAxOlx0LyogbWF0Y2ggYWxsIE1BQ1NFQyBldGhlcnR5cGUgcGFja2V0cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzAyOlx0cHJlX2NsYXNzX3JlY29yZC5ldGhfdHlwZSA9IEVUSF9QX01BQ1NFQztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTcwMy1cdHByZV9jbGFzc19yZWNvcmQuZXRoX3R5cGVfbWFzayA9IDB4Mztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz03ODg9c3RhdGljIGludCBhcV9jbGVhcl9yeHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCBpbnQgcnhzY19pZHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzk1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Nzk2Olx0Zm9yX2VhY2hfc2V0X2JpdCAoc2FfbnVtLCBcdTAwMjZyeF9zYy1cdTAwM2VyeF9zYV9pZHhfYnVzeSwgQVFfTUFDU0VDX01BWF9TQSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzk3LVx0XHRyZXQgPSBhcV9jbGVhcl9yeHNhKG5pYywgcnhfc2MsIHNhX251bSwgY2xlYXJfdHlwZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9ODU0PXN0YXRpYyBpbnQgYXFfdXBkYXRlX3J4c2Eoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IHVuc2lnbmVkIGludCBzY19pZHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtODgxLVx0c3dpdGNoIChzZWN5LVx1MDAzZWtleV9sZW4pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjg4MjpcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTI4X0JJVDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTg4My1cdFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTg4NC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo4ODU6XHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzE5Ml9CSVQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODYtXHRcdHNhX2tleV9yZWNvcmQua2V5X2xlbiA9IDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODctXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODg4Olx0Y2FzZSBBUV9NQUNTRUNfS0VZX0xFTl8yNTZfQklUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtODg5LVx0XHRzYV9rZXlfcmVjb3JkLmtleV9sZW4gPSAyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTEwODE9c3RhdGljIGludCBhcV9tZG9fZ2V0X3J4X3NjX3N0YXRzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEwOTctXHRhcV9yeHNjID0gXHUwMDI2Y2ZnLVx1MDAzZWFxX3J4c2NbcnhzY19pZHhdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTA5ODpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BQ1NFQ19OVU1fQU47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMDk5LVx0XHRpZiAoIXRlc3RfYml0KGksIFx1MDAyNmFxX3J4c2MtXHUwMDNlcnhfc2FfaWR4X2J1c3kpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTExNjc9c3RhdGljIGludCBhcHBseV90eHNjX2NmZyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHR4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExODEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTgyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExODMtXHRcdHR4X3NhID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNlY3ktXHUwMDNldHhfc2Muc2FbaV0pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTExOTU9c3RhdGljIGludCBhcHBseV9yeHNjX2NmZyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHJ4c2NfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyMDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMjEwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyMTEtXHRcdHJ4X3NhID0gcmN1X2RlcmVmZXJlbmNlX2JoKGFxX3J4c2MtXHUwMDNlc3dfcnhzYy1cdTAwM2VzYVtpXSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9MTI3OD1zdGF0aWMgaW50IGFxX2FwcGx5X21hY3NlY19jZmcoc3RydWN0IGFxX25pY19zICpuaWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTI4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEyODM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTI4NC1cdFx0aWYgKG5pYy1cdTAwM2VtYWNzZWNfY2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kgXHUwMDI2IEJJVChpKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMjkxOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyOTItXHRcdGlmIChuaWMtXHUwMDNlbWFjc2VjX2NmZy1cdTAwM2VyeHNjX2lkeF9idXN5IFx1MDAyNiBCSVQoaSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMzMzPXN0YXRpYyB2b2lkIGFxX2NoZWNrX3R4c2FfZXhwaXJhdGlvbihzdHJ1Y3QgYXFfbmljX3MgKm5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTM1NjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0E7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzU3LVx0XHRpZiAoZWdyZXNzX3NhX2V4cGlyZWQgXHUwMDI2IEJJVChpKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE0NDg9aW50IGFxX21hY3NlY19pbml0KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNDU4Olx0aWYgKCEoY2Fwc19sbyBcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNDU5LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNDY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQ2NTpcdG5pYy1cdTAwM2VuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfTUFDU0VDO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTQ2Ni1cdG5pYy1cdTAwM2VuZGV2LVx1MDAzZW1hY3NlY19vcHMgPSBcdTAwMjZhcV9tYWNzZWNfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE0Nzg9aW50IGFxX21hY3NlY19lbmFibGUoc3RydWN0IGFxX25pY19zICpuaWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUyMC1cdFx0dHhfY3RsZl9yZWMubWF0Y2hfbWFzayA9IDB4ZjsgLyogbWF0Y2ggZm9yIGV0aF90eXBlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTIxOlx0XHR0eF9jdGxmX3JlYy5hY3Rpb24gPSAwOyAvKiBCeXBhc3MgTUFDU0VDIG1vZHVsZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE1MjItXHRcdHRibF9pZHggPSBOVU1ST1dTX0VHUkVTU0NUTEZSRUNPUkQgLSBudW1fY3RsX2V0aGVyX3R5cGVzIC0gMTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTI4LVx0XHRyeF9wcmVjdGxmX3JlYy5tYXRjaF9tYXNrID0gMHhmOyAvKiBtYXRjaCBmb3IgZXRoX3R5cGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE1Mjk6XHRcdHJ4X3ByZWN0bGZfcmVjLmFjdGlvbiA9IDA7IC8qIEJ5cGFzcyBNQUNTRUMgbW9kdWxlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUzMC1cdFx0dGJsX2lkeCA9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9MTU1Nz1pbnQgYXFfbWFjc2VjX3J4X3NhX2NudChzdHJ1Y3QgYXFfbmljX3MgKm5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTU2NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTY4LVx0XHRpZiAoIXRlc3RfYml0KGksIFx1MDAyNmNmZy1cdTAwM2VyeHNjX2lkeF9idXN5KSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNTkxPWludCBhcV9tYWNzZWNfdHhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjAxOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MDItXHRcdGlmICghdGVzdF9iaXQoaSwgXHUwMDI2Y2ZnLVx1MDAzZXR4c2NfaWR4X2J1c3kpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE2MTE9c3RhdGljIGludCBhcV9tYWNzZWNfdXBkYXRlX3N0YXRzKHN0cnVjdCBhcV9uaWNfcyAqbmljKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjIyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MjMtXHRcdGlmICghKGNmZy1cdTAwM2V0eHNjX2lkeF9idXN5IFx1MDAyNiBCSVQoaSkpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjMyOlx0XHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYzMy1cdFx0XHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXHUwMDI2YXFfdHhzYy1cdTAwM2V0eF9zYV9pZHhfYnVzeSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE2NDM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0NC1cdFx0aWYgKCEodGVzdF9iaXQoaSwgXHUwMDI2Y2ZnLVx1MDAzZXJ4c2NfaWR4X2J1c3kpKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTY0ODpcdFx0Zm9yIChhc3NvY19udW0gPSAwOyBhc3NvY19udW0gXHUwMDNjIE1BQ1NFQ19OVU1fQU47IGFzc29jX251bSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2NDktXHRcdFx0aWYgKCF0ZXN0X2JpdChhc3NvY19udW0sIFx1MDAyNmFxX3J4c2MtXHUwMDNlcnhfc2FfaWR4X2J1c3kpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE2NjM9dTY0ICphcV9tYWNzZWNfZ2V0X3N0YXRzKHN0cnVjdCBhcV9uaWNfcyAqbmljLCB1NjQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTcwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MDc6XHRmb3IgKHNjX251bSA9IDA7IHNjX251bSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgc2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTcwOC1cdFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcdTAwMjZjZmctXHUwMDNldHhzY19pZHhfYnVzeSkpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNzE5Olx0XHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTcyMC1cdFx0XHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXHUwMDI2YXFfdHhzYy1cdTAwM2V0eF9zYV9pZHhfYnVzeSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTczMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MzI6XHRmb3IgKHNjX251bSA9IDA7IHNjX251bSBcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgc2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTczMy1cdFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcdTAwMjZjZmctXHUwMDNlcnhzY19pZHhfYnVzeSkpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNzM4Olx0XHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTczOS1cdFx0XHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXHUwMDI2YXFfcnhzYy1cdTAwM2VyeF9zYV9pZHhfYnVzeSkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjY6I2lmbmRlZiBBUV9NQUNTRUNfSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6NzojZGVmaW5lIEFRX01BQ1NFQ19IXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTE0PXN0cnVjdCBhcV9uaWNfcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTY6I2RlZmluZSBBUV9NQUNTRUNfTUFYX1NDIDMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxNzojZGVmaW5lIEFRX01BQ1NFQ19NQVhfU0EgMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTE4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTkwPXN0cnVjdCBhcV9tYWNzZWNfdHhzYyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTMtXHRjb25zdCBzdHJ1Y3QgbWFjc2VjX3NlY3kgKnN3X3NlY3k7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDo5NDpcdHU4IHR4X3NhX2tleVtNQUNTRUNfTlVNX0FOXVtNQUNTRUNfTUFYX0tFWV9MRU5dO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTUtXHRzdHJ1Y3QgYXFfbWFjc2VjX3R4X3NjX3N0YXRzIHN0YXRzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6OTY6XHRzdHJ1Y3QgYXFfbWFjc2VjX3R4X3NhX3N0YXRzIHR4X3NhX3N0YXRzW01BQ1NFQ19OVU1fQU5dO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTctfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaD05OT1zdHJ1Y3QgYXFfbWFjc2VjX3J4c2Mge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTEwMy1cdGNvbnN0IHN0cnVjdCBtYWNzZWNfcnhfc2MgKnN3X3J4c2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxMDQ6XHR1OCByeF9zYV9rZXlbTUFDU0VDX05VTV9BTl1bTUFDU0VDX01BWF9LRVlfTEVOXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjEwNTpcdHN0cnVjdCBhcV9tYWNzZWNfcnhfc2Ffc3RhdHMgcnhfc2Ffc3RhdHNbTUFDU0VDX05VTV9BTl07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMDYtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaD0xMDg9c3RydWN0IGFxX21hY3NlY19jZmcge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExMS1cdHVuc2lnbmVkIGxvbmcgdHhzY19pZHhfYnVzeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjExMjpcdHN0cnVjdCBhcV9tYWNzZWNfdHhzYyBhcV90eHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtMTEzLVx0LyogSW5ncmVzcyBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExNC1cdHVuc2lnbmVkIGxvbmcgcnhzY19pZHhfYnVzeTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjExNTpcdHN0cnVjdCBhcV9tYWNzZWNfcnhzYyBhcV9yeHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtMTE2LVx0LyogU3RhdGlzdGljcyAvIGNvdW50ZXJzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg9MTI5PWludCBhcV9tYWNzZWNfdHhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxMzM6I2VuZGlmIC8qIEFRX01BQ1NFQ19IICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM9MTY0PXN0YXRpYyBpbnQgYXFfbmljX3VwZGF0ZV9saW5rX3N0YXR1cyhzdHJ1Y3QgYXFfbmljX3MgKnNlbGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMjEwLVx0XHRuZXRpZl9jYXJyaWVyX29uKHNlbGYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzoyMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTIxMi1cdFx0YXFfbWFjc2VjX2VuYWJsZShzZWxmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYz0yNDM9c3RhdGljIHZvaWQgYXFfbmljX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMjU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM6MjU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yNTktXHRhcV9tYWNzZWNfd29yayhzZWxmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYz0zMTU9aW50IGFxX25pY19uZGV2X3JlZ2lzdGVyKHN0cnVjdCBhcV9uaWNfcyAqc2VsZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0zMjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzozMjk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTMzMC1cdGFxX21hY3NlY19pbml0KHNlbGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTM3Ny1lcnJfZXhpdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jOjM3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMzc5LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaD0xMjc9c3RydWN0IGFxX25pY19zIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaC0xNTctXHRzdHJ1Y3QgbXV0ZXggZndyZXFfbXV0ZXg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaDoxNTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5oLTE1OS1cdHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3BjaV9mdW5jLmM9MzQyPXN0YXRpYyB2b2lkIGFxX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYy0zNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9wY2lfZnVuYy5jOjM1MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDU0VDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYy0zNTItXHRcdGFxX21hY3NlY19mcmVlKHNlbGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHMuaD00NTE9ZW51bSBod19hdGxfZncyeF9jYXBzX2xvIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmgtNDY2LVx0Q0FQU19MT19TTUJVU19XUklURSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHMuaDo0Njc6XHRDQVBTX0xPX01BQ1NFQyAgICAgICAgICAgID0gMTUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmgtNDY4LVx0Q0FQU19MT19SRVNFUlZFRDEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYzo1OTojZGVmaW5lIEhXX0FUTF9GVzJYX0NBUF9NQUNTRUMgICAgICAgICAgIEJJVChDQVBTX0xPX01BQ1NFQylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTYwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jPTY2ND1zdGF0aWMgaW50IGFxX2Z3Mnhfc2VuZF9tYWNzZWNfcmVxKHN0cnVjdCBhcV9od19zICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02NzctXHRjYXBzX2xvID0gYXFfZncyeF9nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njc4Olx0aWYgKCEoY2Fwc19sbyBcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02NzktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02ODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYzo2ODc6XHQvKiBUb2dnbGUgMHgzNjguQ0FQU19MT19NQUNTRUMgYml0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02ODgtXHRsb3dfcmVxID0gYXFfaHdfcmVhZF9yZWcoaHcsIEhXX0FUTF9GVzJYX01QSV9DT05UUk9MX0FERFIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njg5Olx0bG93X3JlcSBePSBIV19BVExfRlcyWF9DQVBfTUFDU0VDO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjkwLVx0YXFfaHdfd3JpdGVfcmVnKGh3LCBIV19BVExfRlcyWF9NUElfQ09OVFJPTF9BRERSLCBsb3dfcmVxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02OTMtXHRlcnIgPSByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljKGFxX2Z3Mnhfc3RhdGVfZ2V0LCBodywgbG93X3N0YXR1cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jOjY5NDpcdFx0bG93X3JlcSAhPSAobG93X3N0YXR1cyBcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSksIDFVLCAxMDAwMFUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjk1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jPTQ5PXN0YXRpYyBpbnQgYXFfbXNzX21kaW9fd3JpdGUoc3RydWN0IGFxX2h3X3MgKmh3LCB1MTYgbW1kLCB1MTYgYWRkciwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuYy01NS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuYzo1NjogKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDU0VDIGNvbmZpZyBhbmQgc3RhdHVzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jLTU3LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDo2OiNpZm5kZWYgX19NQUNTRUNfQVBJX0hfX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDo3OiNkZWZpbmUgX19NQUNTRUNfQVBJX0hfX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC04LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmg9MzIwPWludCBhcV9tc3Nfc2V0X2VncmVzc19zYV90aHJlc2hvbGRfZXhwaXJlZChzdHJ1Y3QgYXFfaHdfcyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC0zMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oOjMyMzojZW5kaWYgLyogX19NQUNTRUNfQVBJX0hfXyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0LmgtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg6NjojaWZuZGVmIF9NQUNTRUNfU1RSVUNUX0hfXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oOjc6I2RlZmluZSBfTUFDU0VDX1NUUlVDVF9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC04LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg9NDU9c3RydWN0IGFxX21zc19lZ3Jlc3NfY2xhc3NfcmVjb3JkIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTE0NS1cdCAqICBOb3RlOiBJZiB0aGlzIGZpZWxkIGlzIG5vdCAwLCB0aGlzIG1lYW5zIHRoZSBpbnB1dCBwYWNrZXQmIzM5O3NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg6MTQ2Olx0ICogIFNFQ1RBRyBpcyBleHBsaWNpdGx5IHRhZ2dlZCBhbmQgTUFDU0VDIG1vZHVsZSB3aWxsIG9ubHkgdXBkYXRlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTE0Ny1cdCAqICB0aGUgTVNEVS5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oPTM1Mz1zdHJ1Y3QgYXFfbXNzX2luZ3Jlc3NfcHJlY2xhc3NfcmVjb3JkIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTQ2Mi1cdCAqICAxOiBQcm9jZXNzIGJ1dCBrZWVwIFNFQ1RBRzogRm9yd2FyZCB0byBuZXh0IHR3byBtb2R1bGVzIGZvclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaDo0NjM6XHQgKiAgICAgODAyLjFBRSBkZWNyeXB0aW9uIGJ1dCBrZWVwIHRoZSBNQUNTRUMgaGVhZGVyIHdpdGggYWRkZWQgZXJyb3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0LmgtNDY0LVx0ICogICAgIGNvZGUgaW5mb3JtYXRpb24uIElDViB3aWxsIGJlIHN0cmlwcGVkIGZvciBhbGwgY29udHJvbCBwYWNrZXRzLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3VuaW1hYy5oLTYwLSNkZWZpbmUgVU1BQ19SWF9JUEdfSU5WXHRcdFx0MHgwNzhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3VuaW1hYy5oOjYxOiNkZWZpbmUgVU1BQ19NQUNTRUNfUFJPR19UWF9DUkNcdFx0MHgzMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3VuaW1hYy5oOjYyOiNkZWZpbmUgVU1BQ19NQUNTRUNfQ1RSTFx0XHQweDMxNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdW5pbWFjLmgtNjMtI2RlZmluZSBVTUFDX1BBVVNFX0NUUkxcdFx0XHQweDMzMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguaD0zMDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZHBhYTJfZmFlYWQgKmRwYWEyX2dldF9mYWVhZCh2b2lkICpidWZfYWRkciwgYm9vbCBzd2EpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oLTMxNS0jZGVmaW5lIERQQUEyX0ZBU19ESVNDXHRcdFx0MHg4MDAwMDAwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oOjMxNjovKiBNQUNTRUMgZnJhbWUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguaC0zMTctI2RlZmluZSBEUEFBMl9GQVNfTVNcdFx0XHQweDQwMDAwMDAwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaD01Nj1zdHJ1Y3QgZHBrZ19tYXNrIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oLTM0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzQ4Oi8qIE1BQ1NFQyBmaWVsZHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzQ5OiNkZWZpbmUgTkhfRkxEX01BQ1NFQ19TRUNUQUdcdFx0XHRCSVQoMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzUwOiNkZWZpbmUgTkhfRkxEX01BQ1NFQ19BTExfRklFTERTXHRcdChCSVQoMSkgLSAxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zNTEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaD0zNTY9ZW51bSBuZXRfcHJvdCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zODQtXHRORVRfUFJPVF9VRFBfRU5DX0VTUCwgLyogUkZDIDM5NDggKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6Mzg1Olx0TkVUX1BST1RfTUFDU0VDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zODYtXHRORVRfUFJPVF9HUkUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC01Mi0jZGVmaW5lIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFcdFx0XHQweEEyMjJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6NTM6I2RlZmluZSBITkFFM19ERVZfSURfMjVHRV9SRE1BX01BQ1NFQ1x0XHQweEEyMjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNTQtI2RlZmluZSBITkFFM19ERVZfSURfNTBHRV9SRE1BXHRcdFx0MHhBMjI0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjU1OiNkZWZpbmUgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUNcdFx0MHhBMjI1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oOjU2OiNkZWZpbmUgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUNcdFx0MHhBMjI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTU3LSNkZWZpbmUgSE5BRTNfREVWX0lEXzIwMEdfUkRNQVx0XHRcdDB4QTIyOFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBobnMzX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy05OC1cdH0sIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjk5Olx0XHRQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwMC1cdFx0LmRyaXZlcl9kYXRhID0gSE5BRTNfREVWX1NVUFBPUlRfUk9DRV9EQ0JfQklUUyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0xMDQtXHR9LCB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzoxMDU6XHRcdFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUMpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMTA2LVx0XHQuZHJpdmVyX2RhdGEgPSBITkFFM19ERVZfU1VQUE9SVF9ST0NFX0RDQl9CSVRTLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMTA3LVx0fSwge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MTA4Olx0XHRQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8xMDBHX1JETUFfTUFDU0VDKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwOS1cdFx0LmRyaXZlcl9kYXRhID0gSE5BRTNfREVWX1NVUFBPUlRfUk9DRV9EQ0JfQklUUyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTAxPWJvb2wgaG5zM19pc19waHlzX2Z1bmMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzEwOC1cdGNhc2UgSE5BRTNfREVWX0lEXzI1R0VfUkRNQTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxMDk6XHRjYXNlIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzExMC1cdGNhc2UgSE5BRTNfREVWX0lEXzUwR0VfUkRNQTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxMTE6XHRjYXNlIEhOQUUzX0RFVl9JRF81MEdFX1JETUFfTUFDU0VDOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzExMjpcdGNhc2UgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTEzLVx0Y2FzZSBITkFFM19ERVZfSURfMjAwR19SRE1BOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oPTE3PWVudW0gaG5zM19uaWNfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oLTE2MS0jZGVmaW5lIEhOUzNfVFhEX09WTEFOX0JcdFx0XHQyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuaDoxNjI6I2RlZmluZSBITlMzX1RYRF9NQUNTRUNfQlx0XHRcdDNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oLTE2My0jZGVmaW5lIEhOUzNfVFhEX1RVTlRZUEVfU1x0XHRcdDRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZV9hbGdvX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTc0LVx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUEpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjc1Olx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy03Ni1cdHsgUENJX1ZERVZJQ0UoSFVBV0VJLCBITkFFM19ERVZfSURfNTBHRV9SRE1BKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo3NzpcdHsgUENJX1ZERVZJQ0UoSFVBV0VJLCBITkFFM19ERVZfSURfNTBHRV9SRE1BX01BQ1NFQykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6Nzg6XHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTc5LVx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yMDBHX1JETUEpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzY6XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM3LVx0ZGVwZW5kcyBvbiAoNjRCSVQgXHUwMDI2XHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQwLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0MTpcdGRlcGVuZHMgb24gTUFDU0VDIHx8ICFNQUNTRUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oPTU3Mj1zdHJ1Y3QgZ2V0X2h3X2NhcF9yc3Age1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaC01NzYtXHR1OCBucGNfaGFzaF9leHRyYWN0O1x0LyogSXMgaGFzaCBleHRyYWN0IHN1cHBvcnRlZCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oOjU3NzojZGVmaW5lIEhXX0NBUF9NQUNTRUNcdFx0QklUX1VMTCgxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oLTU3OC1cdHU2NCBod19jYXBzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTIxMTM9aW50IHJ2dV9tYm94X2hhbmRsZXJfZ2V0X2h3X2NhcChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMjEyMi1cdGlmIChydnUtXHUwMDNlbWNzX2Jsa19jbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzoyMTIzOlx0XHRyc3AtXHUwMDNlaHdfY2FwcyA9IEhXX0NBUF9NQUNTRUM7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDT05GSUdfTUFDU0VDKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19NQUNTRUNgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxOCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQsIGltcG9ydGFudGx5LCB3aGVyZSB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb3RoZXIgbmV0d29yayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLCBtYXliZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IG9wdGlvbnMsIG9yIGV2ZW4ga2VybmVsIGZlYXR1cmUgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBNQUNTRUNgIGNhbiBiZSBjb25zaWRlcmVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgdGhlIGBNQUNTRUNgIG9wdGlvbiB0byBldmVuIGJlIGF2YWlsYWJsZSwgbGV0IGFsb25lIGFjdHVhbGx5IGZ1bmN0aW9uYWwuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgZWZmaWNpZW50IGtlcm5lbCBjb25maWd1cmF0aW9uIHdvcmssIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0aXZlbHkgY29tcGxleCBsaWtlIE1BQ3NlYy4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGVsc2UgaXMgZ29pbmcgdG8gdHJpcCBtZSB1cC4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAzMTY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxuIDMxNzpcdFxuIDMxODpcdGNvbmZpZyBNQUNTRUNcbiAzMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjFBRSBNQUMtbGV2ZWwgZW5jcnlwdGlvbiAoTUFDc2VjKVwmIzM0O1xuIDMyMDpcdFx0c2VsZWN0IENSWVBUT1xuIDMyMTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAzMjI6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gMzIzOlx0XHRzZWxlY3QgR1JPX0NFTExTXG4gMzI0Olx0XHRoZWxwXG4gMzI1Olx0XHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXG4gMzI2Olx0XG4gMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1BQ3NlYyBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBjaGFuZ2VzLCBhbmQgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgTUFDc2VjIGltcGxlbWVudGF0aW9uIHJlc2lkZXMsIHNvIGFueSBzaWduaWZpY2FudCBhbHRlcmF0aW9ucyBhcmUgYm91bmQgdG8gYmUgY2VudGVyZWQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgb3IgYnVnIGZpeCB0aGlzIGNvbW1pdCBhZGRyZXNzZXMuIFRoZSBmaWxlJiMzOTtzIHN0cnVjdHVyZSBzaG91bGQgZ3VpZGUgbWUuIEkmIzM5O2xsIGxpa2VseSBiZWdpbiBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSB0b3AsIGxvb2tpbmcgZm9yIGluY2x1ZGUgZmlsZSBjaGFuZ2VzLCBuZXcgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBvciBnbG9iYWwgdmFyaWFibGUgdXBkYXRlcywgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbWlnaHQgYmUgbmV3IHdpdGhpbiB0aGUgd2hvbGUgaW1wbGVtZW50YXRpb24uIFRoZW4gSSB3aWxsIHN0YXJ0IGdvaW5nIHRocm91Z2ggc3BlY2lmaWMgZnVuY3Rpb25zIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkLiBUaGVuIEkgd2lsbCBjb21wYXJlIHRoZSBjaGFuZ2VzIG9uIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk0MDpcdFx0XHRpZiAoc2VjeS1cdTAwM2V4cG4gXHUwMDI2XHUwMDI2XG4zOTQxOlx0XHRcdCAgICByZXBsYXlfd2luZG93IFx1MDAzZSBNQUNTRUNfWFBOX01BWF9SRVBMQVlfV0lORE9XKVxuMzk0MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzk0MzpcdFx0XHRXUklURV9PTkNFKHNlY3ktXHUwMDNlcmVwbGF5X3dpbmRvdywgcmVwbGF5X3dpbmRvdyk7XG4zOTQ0Olx0XHR9XG4zOTQ1Olx0XG4zOTQ2Olx0XHRyZXR1cm4gMDtcbjM5NDc6XHR9XG4zOTQ4Olx0XG4zOTQ5Olx0LyogQm90aCBhIGNoYW5nZSBvZiB0aGUgb2ZmbG9hZCBzdGF0ZSAobWRvX2FkZF9zZWN5KCkvbWRvX2RlbF9zZWN5KCkpIGFuZFxuMzk1MDpcdCAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbjM5NTE6XHQgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxuMzk1MjpcdCAqIGZyb20gdGhlIG1hY3NlYyBkZXZpY2UuIFJlcXVpcmUgQ0FQX05FVF9BRE1JTiBvdmVyIHJlYWxfZGV2JiMzOTtzIG5hbWVzcGFjZVxuMzk1MzpcdCAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuMzk1NDpcdCAqL1xuMzk1NTpcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjM5NTY6XHRcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTc6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTg6XHR7XG4zOTU5Olx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NjA6XHRcdGJvb2wgcmVhY2hlc19yZWFsX2RldjtcbjM5NjE6XHRcbjM5NjI6XHRcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4zOTYzOlx0XHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcdTAwMjZcdTAwMjZcbjM5NjQ6XHRcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cdTAwM2VvZmZsb2FkKVxuMzk2NTpcdFx0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbjM5NjY6XHRcbjM5Njc6XHRcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxuMzk2ODpcdFx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuMzk2OTpcdFx0XHRyZXR1cm4gMDtcbjM5NzA6XHRcbjM5NzE6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjM5NzI6XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk3MzpcdFx0cmV0dXJuIC1FUEVSTTtcbjM5NzQ6XHR9XG4zOTc1Olx0XG4zOTc2Olx0c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMzk3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMzk3ODpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzk3OTpcdHtcbjM5ODA6XHRcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xuMzk4MTpcdFx0Ym9vbCBtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSBmYWxzZTtcbjM5ODI6XHRcdGVudW0gbWFjc2VjX29mZmxvYWQgb2ZmbG9hZDtcbjM5ODM6XHRcdHN0cnVjdCBtYWNzZWNfdHhfc2MgdHhfc2M7XG4zOTg0Olx0XHRzdHJ1Y3QgbWFjc2VjX3NlY3kgc2VjeTtcbjM5ODU6XHRcdGludCByZXQ7XG4zOTg2Olx0XG4zOTg3Olx0XHRpZiAoIWRhdGEpXG4zOTg4Olx0XHRcdHJldHVybiAwO1xuMzk4OTpcdFxuMzk5MDpcdFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuMzk5MTpcdFx0aWYgKHJldClcbjM5OTI6XHRcdFx0cmV0dXJuIHJldDtcbjM5OTM6XHRcbjM5OTQ6XHRcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbjM5OTU6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4zOTk2Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4zOTk3Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcbjM5OTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk5Olx0XG40MDAwOlx0XHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXG40MDAxOlx0XHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cbjQwMDI6XHRcdCAqL1xuNDAwMzpcdFx0bWVtY3B5KFx1MDAyNnNlY3ksIFx1MDAyNm1hY3NlYy1cdTAwM2VzZWN5LCBzaXplb2Yoc2VjeSkpO1xuNDAwNDpcdFx0bWVtY3B5KFx1MDAyNnR4X3NjLCBcdTAwMjZtYWNzZWMtXHUwMDNlc2VjeS50eF9zYywgc2l6ZW9mKHR4X3NjKSk7XG40MDA1Olx0XG40MDA2Olx0XHRyZXQgPSBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oZGV2LCBkYXRhKTtcbjQwMDc6XHRcdGlmIChyZXQpXG40MDA4Olx0XHRcdGdvdG8gY2xlYW51cDtcbjQwMDk6XHRcbjQwMTA6XHRcdGlmIChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdKSB7XG40MDExOlx0XHRcdG9mZmxvYWQgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xuNDAxMjpcdFx0XHRpZiAobWFjc2VjLVx1MDAzZW9mZmxvYWQgIT0gb2ZmbG9hZCkge1xuNDAxMzpcdFx0XHRcdG1hY3NlY19vZmZsb2FkX3N0YXRlX2NoYW5nZSA9IHRydWU7XG40MDE0Olx0XHRcdFx0cmV0ID0gbWFjc2VjX3VwZGF0ZV9vZmZsb2FkKGRldiwgb2ZmbG9hZCwgZXh0YWNrKTtcbjQwMTU6XHRcdFx0XHRpZiAocmV0KVxuNDAxNjpcdFx0XHRcdFx0Z290byBjbGVhbnVwO1xuNDAxNzpcdFx0XHR9XG40MDE4Olx0XHR9XG40MDE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBHaXQgTG9nOiBDb250ZXh0IGlzIEtleSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgb2YgdGhpcyBwYXRjaCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgZ2l0IGxvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcy4gVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBhbmQgb2Z0ZW4gbGVhdmVzIG91dCBjcnVjaWFsIGRldGFpbHMuIEkmIzM5O20gaG9waW5nIHRoZSBjb21taXQgaGlzdG9yeSB3aWxsIGlsbHVtaW5hdGUgdGhlIGF1dGhvciYjMzk7cyByYXRpb25hbGUsIG1heWJlIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHByb2JsZW0gdGhleSB3ZXJlIHRyeWluZyB0byBzb2x2ZSwgb3IgYW55IGRlc2lnbiBkZWNpc2lvbnMgdGhhdCB3ZXJlIGltcGxpY2l0IGJ1dCBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBjb2RlIGl0c2VsZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gcHJldmlvdXMgY29tbWl0cyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgd2hpY2ggY291bGQgc2hvdyB0aGUgZXZvbHV0aW9uIG9mIHRoZSBmZWF0dXJlIG9yIGJ1ZyBmaXguIERpZCB0aGV5IGxpbmsgYW4gaXNzdWU/IERpZCB0aGV5IHJlZmVyZW5jZSByZWxhdGVkIGRpc2N1c3Npb25zIG9yIGRlc2lnbiBkb2NzPyBBbGwgb2YgdGhpcyBoZWxwcyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIHdpbGwgYWxsb3cgbWUgdG8gcHJvdmlkZSBpbmZvcm1lZCBmZWVkYmFjay4gVW5kZXJzdGFuZGluZyB0aGUgYXV0aG9yJiMzOTtzIGludGVudCByZWR1Y2VzIHdhc3RlZCB0aW1lIGFuZCBtZW50YWwgZWZmb3J0LCBhbmQgaGVscHMgcHJldmVudCBhc3N1bXB0aW9ucyB0aGF0IGNhbiBsZWFkIHRvIGluY29ycmVjdCBjb25jbHVzaW9ucyBvciBtaXNkaXJlY3RlZCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jPTM4NzE9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTU0LSAqL1xuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk1NTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTU2LVx0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jPTM5NzY9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5ODktXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTkwOlx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk5MS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTc5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNYWNzZWMgVXNhZ2UgaW4gU3l6a2FsbGVyKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQ3NlYyBpcyBiZWluZyB1c2VkIGFuZCB0ZXN0ZWQgd2l0aGluIHRoZSBzeXprYWxsZXIgZnJhbWV3b3JrLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gcmVjZW50IGNvbW1pdHMgb3IgcmVsYXRlZCBhY3Rpdml0eSDigJMgZXNzZW50aWFsbHksIHRoZSBicmVhZGNydW1icyB0aGF0IG1pZ2h0IGxlYWQgbWUgdG8gcmVsZXZhbnQgZXhhbXBsZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgaG93IE1BQ3NlYyBpcyBpbnN0cnVtZW50ZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSB0ZXN0ZWQgd2l0aGluIHN5emthbGxlciYjMzk7cyBlY29zeXN0ZW0uCgpOZXh0LCBJIG5lZWQgdG8ga25vdyBpZiBzeXprYWxsZXIgaGFzIHNvbWUgc3BlY2lmaWMsIHRhaWxvcmVkIE1BQ3NlYyBkZXNjcmlwdGlvbnMsIG9yIGV2ZW4gbW9yZSB0ZWxsaW5nbHksIGlmIHRoZXJlIGFyZSBuZXRsaW5rIHJ0bmwgbGluayBvcGVyYXRpb25zIGltcGxlbWVudGVkIGZvciBpdC4gQWhhISBXYWl0IGEgbWludXRlLCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBzb21ldGhpbmcuIEkgcmVjYWxsIHNlZWluZyBgbWFjc2VjX2NoYW5nZWxpbmtgIGJlZm9yZSwgYW5kIHRoYXQgcmluZ3MgYSBiZWxsLi4uIENvdWxkIGl0IGJlPyBZZXMhIFRoYXQmIzM5O3MgaXQhIGBtYWNzZWNfY2hhbmdlbGlua2AgaXMgdGhlIGAuY2hhbmdlbGlua2AgY2FsbGJhY2sgd2l0aGluIHRoZSBgcnRubF9saW5rX29wc2Agc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGxlYWQhCgpOb3csIGxldCYjMzk7cyBpbW1lZGlhdGVseSBjb25maXJtIHRoaXMgYW5kIGV4cGxvcmUgYG1hY3NlY19saW5rX29wc2AuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBNQUNzZWMgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGxpbmsgb3BlcmF0aW9ucyB3aWxsIHRlbGwgbWUgaG93IHN5emthbGxlciBpcyBpbnRlcmFjdGluZyB3aXRoIE1BQ3NlYyBhdCBhIGxvdyBsZXZlbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3NlY19saW5rX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYz00NDE5PXN0YXRpYyBpbnQgbWFjc2VjX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0NjktXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDcwOnN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0NzEtXHQua2luZFx0XHQ9IFwmIzM0O21hY3NlY1wmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NTQ4PXN0YXRpYyBpbnQgX19pbml0IG1hY3NlY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU2MC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQ1NjE6XHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NjItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NzEtZXJyX3J0bmw6XG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NTcyOlx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NzMtZXJyX25vdGlmaWVyOlxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQ1ODQ9c3RhdGljIHZvaWQgX19leGl0IG1hY3NlY19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU4Ni1cdGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2bWFjc2VjX2ZhbSk7XG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NTg3Olx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1ODgtXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZtYWNzZWNfbm90aWZpZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1BQ3NlYyBJbnRlcmZhY2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1hY3NlY2AsIHdoaWNoIGZyb20gbXkgdW5kZXJzdGFuZGluZywgc2VlbXMgdG8gYmUgYSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlIGltcGxlbWVudGluZyBJRUVFIDgwMi4xQUUgTUFDc2VjLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBsYXllcmVkIG9uIHRvcCBvZiBhIHBoeXNpY2FsIG9yIHZpcnR1YWwgZGV2aWNlLCB3ZSYjMzk7bGwgY2FsbCBpdCBgcmVhbF9kZXZgIGZvciBub3cuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0aGlzIGludGVyZmFjZSBpcyBiZWluZyBtYW5hZ2VkLiBJdCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSBpcyBsaWtlbHkgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHJ0bmV0bGlua2AuIEkmIzM5O20gdGhpbmtpbmcgb2YgdGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMgaGVyZTogY3JlYXRpbmcsIGRlbGV0aW5nLCBhbmQgc2V0dGluZyBsaW5rIGNvbmZpZ3VyYXRpb25zIOKAkyBgUlRNX05FV0xJTktgLCBgUlRNX0RFTExJTktgLCBgUlRNX1NFVExJTktgIG9yIHBvdGVudGlhbGx5IGBtYWNzZWNfY2hhbmdlbGlua2AgaWYgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBjaGFuZ2UtaGFuZGxpbmcgbWVjaGFuaXNtLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgbWFjc2VjX2xpbmtfb3BzYCBkZWZpbml0aW9uIGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgbWVzc2FnZXMgYXJlIHRyYW5zbGF0ZWQgaW50byBhY3Rpb25zIG9uIHRoZSBgbWFjc2VjYCBpbnRlcmZhY2UgYW5kIHRoZSB1bmRlcmx5aW5nIGByZWFsX2RldmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWFjc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0NjU6XHRcbjQ0NjY6XHRubGFfcHV0X2ZhaWx1cmU6XG40NDY3Olx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuNDQ2ODpcdH1cbjQ0Njk6XHRcbjQ0NzA6XHRzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjc2VjX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG40NDcxOlx0XHQua2luZFx0XHQ9IFwmIzM0O21hY3NlY1wmIzM0OyxcbjQ0NzI6XHRcdC5wcml2X3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBtYWNzZWNfZGV2KSxcbjQ0NzM6XHRcdC5tYXh0eXBlXHQ9IElGTEFfTUFDU0VDX01BWCxcbjQ0NzQ6XHRcdC5wb2xpY3lcdFx0PSBtYWNzZWNfcnRubF9wb2xpY3ksXG40NDc1Olx0XHQuc2V0dXBcdFx0PSBtYWNzZWNfc2V0dXAsXG40NDc2Olx0XHQudmFsaWRhdGVcdD0gbWFjc2VjX3ZhbGlkYXRlX2F0dHIsXG40NDc3Olx0XHQubmV3bGlua1x0PSBtYWNzZWNfbmV3bGluayxcbjQ0Nzg6XHRcdC5jaGFuZ2VsaW5rXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxuNDQ3OTpcdFx0LmRlbGxpbmtcdD0gbWFjc2VjX2RlbGxpbmssXG40NDgwOlx0XHQuZ2V0X3NpemVcdD0gbWFjc2VjX2dldF9zaXplLFxuNDQ4MTpcdFx0LmZpbGxfaW5mb1x0PSBtYWNzZWNfZmlsbF9pbmZvLFxuNDQ4MjpcdFx0LmdldF9saW5rX25ldFx0PSBtYWNzZWNfZ2V0X2xpbmtfbmV0LFxuNDQ4MzpcdH07XG40NDg0Olx0XG40NDg1Olx0c3RhdGljIGJvb2wgaXNfbWFjc2VjX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuNDQ4NjpcdHtcbjQ0ODc6XHRcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IG1hY3NlY19oYW5kbGVfZnJhbWU7XG40NDg4Olx0fVxuNDQ4OTpcdFxuNDQ5MDpcdHN0YXRpYyBpbnQgbWFjc2VjX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG40NDkxOlx0XHRcdFx0IHZvaWQgKnB0cilcbjQ0OTI6XHR7XG40NDkzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbjQ0OTQ6XHRcdHN0cnVjdCBtYWNzZWNfcnhoX2RhdGEgKnJ4ZDtcbjQ0OTU6XHRcdHN0cnVjdCBtYWNzZWNfZGV2ICptLCAqbjtcbjQ0OTY6XHRcdExJU1RfSEVBRChoZWFkKTtcbjQ0OTc6XHRcbjQ0OTg6XHRcdGlmICghaXNfbWFjc2VjX21hc3RlcihyZWFsX2RldikpXG40NDk5Olx0XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKk15IE1BQ3NlYyBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gYG1hY3NlY2AsIGFzIGV4cGVjdGVkLCBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggYHJ0bmV0bGlua2AuIEkgY2FuIG1hbmFnZSBpdCwgY3JlYXRlIG5ldyBpbnRlcmZhY2VzLCBhbmQgbW9kaWZ5IGV4aXN0aW5nIG9uZXMganVzdCBsaWtlIGFueSBvdGhlciBuZXR3b3JrIGludGVyZmFjZSB1c2luZyBgUlRNX05FV0xJTktgICh3aXRoIHRoZSBjcnVjaWFsIGBJRkxBX0lORk9fS0lORD0mIzM0O21hY3NlYyYjMzQ7YCBhdHRyaWJ1dGUpLCBgUlRNX1NFVExJTktgLCBvciBldmVuIHRocm91Z2ggYSBjaGFuZ2VsaW5rIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gZG8gdGhpbmdzLCBhbmQgaXQgbWVhbnMgSSBjYW4gcHJvZ3JhbW1hdGljYWxseSBjb250cm9sIHRoZXNlIE1BQ3NlYyBpbnRlcmZhY2VzLiBBbmQgdGhlIGJlc3QgcGFydD8gSXQmIzM5O3MgZGV2aWNlLWFnbm9zdGljLCB3b3JrcyBvbiAqZXZlcnl0aGluZyog4oCTIGR1bW15IGludGVyZmFjZXMsIGB2ZXRoYCBwYWlycywgZXZlbiBsb29wYmFjay4gVGhpcyBtYWtlcyBpdCBpbmNyZWRpYmx5IGZsZXhpYmxlIGZvciBhIHdob2xlIHJhbmdlIG9mIHVzZS1jYXNlcy4KCk5vdywgaG9sZCBvbi4gTGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cyBvbiB0aGUgKnVuZGVybHlpbmcqIGRldmljZS4gVGltZSB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGBtYWNzZWNfbmV3bGlua2AgY29kZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGByZWFsX2RldmAgcGFyYW1ldGVyIGFuZCB3aGF0IGtpbmQgb2YgZGV2aWNlcyBhcmUgYWN0dWFsbHkgKmFsbG93ZWQqIGFzIGl0cyBwYXJlbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2ZXJzYXRpbGUsIG9yIGxpbWl0ZWQsIHRoaXMgc2V0dXAgcmVhbGx5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNzZWNfbmV3bGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jPTQxOTU9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtYWNzZWNfbmV0ZGV2X2FkZHJfbG9ja19rZXk7XG5kcml2ZXJzL25ldC9tYWNzZWMuYy00MTk2LVxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDE5NzpzdGF0aWMgaW50IG1hY3NlY19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00MTk4LVx0XHRcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NDcwPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDc2LVx0LnZhbGlkYXRlXHQ9IG1hY3NlY192YWxpZGF0ZV9hdHRyLFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDQ3NzpcdC5uZXdsaW5rXHQ9IG1hY3NlY19uZXdsaW5rLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ3OC1cdC5jaGFuZ2VsaW5rXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUFDc2VjIE5ldyBMaW5rIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtYWNzZWNfbmV3bGlua2AgZnVuY3Rpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBjcmVhdGluZyBvciBzZXR0aW5nIHVwIGEgbmV3IE1BQ3NlYyBsaW5rLCBuYXR1cmFsbHkuIEkgYmV0IGl0JiMzOTtzIGNhbGxlZCB3aGVuZXZlciBhIG5ldyBpbnRlcmZhY2Ugb3IgVkxBTiBpcyBjb25maWd1cmVkIHRvIHVzZSBNQUNzZWMuIE15IGh5cG90aGVzaXMgaXMgaXQmIzM5O2xsIGhhbmRsZSBhbGwgdGhlIGluaXRpYWxpemF0aW9uLCBrZXkgYXNzb2NpYXRpb24sIGFuZCBwb3RlbnRpYWxseSBldmVuIHNvbWUgb2YgdGhlIHNlY3VyaXR5IHBvbGljeSBzZXR1cCBmb3IgdGhlIG5ldyBsaW5rLiBJJiMzOTttIHRoaW5raW5nIGl0JiMzOTtsbCBpbnRlcmFjdCBjbG9zZWx5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLCBsaWtlbHkgdXNpbmcgbmV0bGluayBvciBvdGhlciBuZXR3b3JrLXNwZWNpZmljIHN0cnVjdHVyZXMuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBpdHMgaW50ZXJuYWwgc3RhdGUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhpcyBuZXcgbGluayBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTk3Olx0c3RhdGljIGludCBtYWNzZWNfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuNDE5ODpcdFx0XHRcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcbjQxOTk6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjQyMDA6XHR7XG40MjAxOlx0XHRzdHJ1Y3QgbmV0ICpsaW5rX25ldCA9IHJ0bmxfbmV3bGlua19saW5rX25ldChwYXJhbXMpO1xuNDIwMjpcdFx0c3RydWN0IG1hY3NlY19kZXYgKm1hY3NlYyA9IG1hY3NlY19wcml2KGRldik7XG40MjAzOlx0XHRzdHJ1Y3QgbmxhdHRyICoqZGF0YSA9IHBhcmFtcy1cdTAwM2VkYXRhO1xuNDIwNDpcdFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVx1MDAzZXRiO1xuNDIwNTpcdFx0cnhfaGFuZGxlcl9mdW5jX3QgKnJ4X2hhbmRsZXI7XG40MjA2Olx0XHR1OCBpY3ZfbGVuID0gTUFDU0VDX0RFRkFVTFRfSUNWX0xFTjtcbjQyMDc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjtcbjQyMDg6XHRcdGludCBlcnIsIG10dTtcbjQyMDk6XHRcdHNjaV90IHNjaTtcbjQyMTA6XHRcbjQyMTE6XHRcdGlmICghdGJbSUZMQV9MSU5LXSlcbjQyMTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MjEzOlx0XHRyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChsaW5rX25ldCwgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xuNDIxNDpcdFx0aWYgKCFyZWFsX2RldilcbjQyMTU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40MjE2Olx0XHRpZiAocmVhbF9kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpXG40MjE3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDIxODpcdFxuNDIxOTpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX01BQ1NFQztcbjQyMjA6XHRcbjQyMjE6XHRcdG1hY3NlYy1cdTAwM2VyZWFsX2RldiA9IHJlYWxfZGV2O1xuNDIyMjpcdFxuNDIyMzpcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2IGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pXG40MjI0Olx0XHRcdG1hY3NlYy1cdTAwM2VvZmZsb2FkID0gbmxhX2dldF9vZmZsb2FkKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xuNDIyNTpcdFx0ZWxzZVxuNDIyNjpcdFx0XHQvKiBNQUNzZWMgb2ZmbG9hZGluZyBpcyBvZmYgYnkgZGVmYXVsdCAqL1xuNDIyNzpcdFx0XHRtYWNzZWMtXHUwMDNlb2ZmbG9hZCA9IE1BQ1NFQ19PRkZMT0FEX09GRjtcbjQyMjg6XHRcbjQyMjk6XHRcdC8qIENoZWNrIGlmIHRoZSBvZmZsb2FkaW5nIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGxheWVycyAqL1xuNDIzMDpcdFx0aWYgKG1hY3NlYy1cdTAwM2VvZmZsb2FkICE9IE1BQ1NFQ19PRkZMT0FEX09GRiBcdTAwMjZcdTAwMjZcbjQyMzE6XHRcdCAgICAhbWFjc2VjX2NoZWNrX29mZmxvYWQobWFjc2VjLVx1MDAzZW9mZmxvYWQsIG1hY3NlYykpXG40MjMyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjQyMzM6XHRcbjQyMzQ6XHRcdC8qIHNlbmRfc2NpIG11c3QgYmUgc2V0IHRvIHRydWUgd2hlbiB0cmFuc21pdCBzY2kgZXhwbGljaXRseSBpcyBzZXQgKi9cbjQyMzU6XHRcdGlmICgoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldKSBcdTAwMjZcdTAwMjZcbjQyMzY6XHRcdCAgICAoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1NFQ19JTkNfU0NJXSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1MTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodHMgb24gTmV0d29yayBOYW1lc3BhY2VzIGFuZCBNQUNzZWMgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgbmV0d29yayBuYW1lc3BhY2VzIChgbmV0bnNgKSBhZmZlY3QgTUFDc2VjIGRldmljZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBNQUNzZWMgZGV2aWNlIGl0c2VsZiBhbmQgaXRzIHVuZGVybHlpbmcgJiMzNDtyZWFsJiMzNDsgZGV2aWNlIChgcmVhbF9kZXZgKS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgYHJlYWxfZGV2YCBjYW4gcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCByaWdodD8gVGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIHRvIGFub3RoZXIgbmFtZXNwYWNlIG9yLCBpbnRlcmVzdGluZ2x5LCBjcmVhdGVkIGFjcm9zcyBuYW1lc3BhY2VzIHVzaW5nIGBJRkxBX0xJTktfTkVUTlNJRGAuCgpOb3csIEkmIzM5O20gbG9va2luZyBhdCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGNyaXRpY2FsIGZvciB2YWxpZGF0aW5nIGNoYW5nZXMgd2hlbiB0aGUgYHJlYWxfZGV2YCBpcyBwb3RlbnRpYWxseSBpbiBhbm90aGVyIG5hbWVzcGFjZS4gSXQgY2hlY2tzIGEgY291cGxlIG9mIGNvbmRpdGlvbnMuIEZpcnN0LCBpdCBkZXRlcm1pbmVzIGlmIHRoZSBkZXZpY2UgJiMzNDtyZWFjaGVzJiMzNDsgdGhlIHJlYWwgZGV2aWNlIChjb25zaWRlcmluZyBvZmZsb2FkaW5nIGFuZCBjaGFuZ2VzIHRvIHRoZSBvZmZsb2FkIHN0YXRlKS4gVGhlbiwgYW5kIHRoaXMgaXMgdGhlIGNvcmUgb2YgaXQsIGlmIHRoZSByZWFsIGRldmljZSAqY2FuKiBiZSByZWFjaGVkLCBpdCBjYWxscyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAuIElmIHRoaXMgY2hlY2sgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IsIHNwZWNpZmljYWxseSByZXF1aXJpbmcgYENBUF9ORVRfQURNSU5gIGluIHRoYXQgb3RoZXIgbmV0d29yayBuYW1lc3BhY2UuCgpCdXQsIHdhaXQuLi4gd2hhdCBleGFjdGx5ICppcyogYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgPyBUaGF0JiMzOTtzIHRoZSBwaWVjZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIExldCBtZSBkbyBhIHF1aWNrIHNlYXJjaCBhbmQgZmluZCBvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0yNDY1PXN0YXRpYyBpbnQgZ2VuZXZlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDczLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjQ3NDpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGdlbmV2ZS1cdTAwM2VuZXQpKVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ3NS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0zOTU1PXN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTY3LVx0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzozOTY4Olx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk2OS1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTE0NzM9aW50IG1hY3ZsYW5fY29tbW9uX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTQ5OC1cdFx0bG93ZXJkZXYgPSBtYWN2bGFuX2Rldl9yZWFsX2Rldihsb3dlcmRldik7XG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTQ5OTpcdFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChsb3dlcmRldikpKSB7XG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTUwMC1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTE2MzM9c3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTY0NC1cdCAgICAoZGF0YVtJRkxBX01BQ1ZMQU5fQkNfUVVFVUVfTEVOXSB8fCBkYXRhW0lGTEFfTUFDVkxBTl9CQ19DVVRPRkZdKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxNjQ1Olx0ICAgICFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldCh2bGFuLVx1MDAzZWxvd2VyZGV2KSkpIHtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ2LVx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTQ0NDA9c3RhdGljIGludCB2eGxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0NTAtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDQ1MTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHZ4bGFuLVx1MDAzZW5ldCkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ1Mi1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaD0yNTg9c3RydWN0IG5ldCAqcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbmV0bnNpZCk7XG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaDoyNTk6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaC0yNjAtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXQgKmxpbmtfbmV0KTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNDk1PUVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI0OTYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNDk3OmJvb2wgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjQ5OC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldCAqbGlua19uZXQpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjUwMi19XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTAzOkVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjUwNC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDU1PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjMtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDY0Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2NS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDg3PXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk1LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NjpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTctXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjQvaXBfdnRpLmM9NTkxPXN0YXRpYyBpbnQgdnRpX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy01OTgtXG5uZXQvaXB2NC9pcF92dGkuYzo1OTk6XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5uZXQvaXB2NC9pcF92dGkuYy02MDAtXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjQvaXBpcC5jPTQ5Nz1zdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwaXAuYy01MDYtXG5uZXQvaXB2NC9pcGlwLmM6NTA3Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjQvaXBpcC5jLTUwOC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjA0Mz1zdGF0aWMgaW50IGlwNmdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTAtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjA1MTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMDUyLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMjY1PXN0YXRpYyBpbnQgaXA2ZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3Mi1cbm5ldC9pcHY2L2lwNl9ncmUuYzoyMjczOlx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNzQtXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIxMDk9c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMjExOC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTE5Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTIwLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9pcHY2L2lwNl92dGkuYz0xMDQwPXN0YXRpYyBpbnQgdnRpNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTEwNDgtXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTA0OTpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTA1MC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvaXB2Ni9zaXQuYz0xNjAxPXN0YXRpYyBpbnQgaXBpcDZfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY2L3NpdC5jLTE2MTUtXG5uZXQvaXB2Ni9zaXQuYzoxNjE2Olx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgbmV0KSlcbm5ldC9pcHY2L3NpdC5jLTE2MTctXHRcdHJldHVybiAtRVBFUk07XG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTg2ND1zdGF0aWMgaW50IHhmcm1pX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtODcxLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjg3MjpcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtODczLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBJIHNlZSBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAgYmVpbmcgdXNlZCBhY3Jvc3MgdmFyaW91cyB2aXJ0dWFsIG5ldCBkZXZpY2VzLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIE5vdywgbGV0JiMzOTtzIHJpZ29yb3VzbHkgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIFRoZSBndWlkZWxpbmVzIGVtcGhhc2l6ZSB0aGF0IGZ1enppbmcgaXMgb25seSBhcHBsaWNhYmxlIHRvIGNvZGUgdGhhdCYjMzk7cyBleGVjdXRhYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIGBtYWNzZWNgLCBhIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIsIGlzIGFjY2Vzc2libGUgdmlhIHJ0bmV0bGluayAoYFJUTV9TRVRMSU5LYCwgYFJUTV9ORVdMSU5LYCB3aXRoIGEgY2hhbmdlbGluayBmbGFnKS4gU28sIHRoYXQmIzM5O3MgYSBjaGVjay4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSwgaXQgY2FuIGJlIHJlYWNoZWQgaW4gdGhlIHJlYWwtd29ybGQgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZTogYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBpcyBjYWxsZWQgd2l0aGluIGBtYWNzZWNfY2hhbmdlbGlua2AuIEV2ZW4gaWYgb2ZmbG9hZCBpc24mIzM5O3Qgc3VwcG9ydGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlcywgdGhpcyBjaGVjayBydW5zIHVuY29uZGl0aW9uYWxseSB3aXRoIGBkYXRhYCwgd2hpY2ggaXMgdGhlIGNoYW5nZWxpbmsgZGF0YSBwYXNzZWQgaW4gdmlhIG5ldGxpbmsuIFRoaXMgbWVhbnMsIGFzIGxvbmcgYXMgYGRhdGFgIGlzIHByZXNlbnQsIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgY2FsbGVkIGV2ZXJ5IHNpbmdsZSB0aW1lLgoKVGhpcyBtZWFucyBpdCB3aWxsICphbHdheXMqIGV4ZWN1dGUuIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGNoYW5nZWxpbmsgZGF0YSBpcyBwYXNzZWQgdG8gYSBtYWNzZWMgbmV0IGRldmljZS4gSXQgY2hlY2tzIGlmIHRoZXJlIGlzIGEgcmVhbCBkZXZpY2UgYXR0YWNoZWQsIGFuZCBhbHNvIGEgbmV0bnMgY2hlY2sgd2hlbiB0aGUgcmVhbCBkZXZpY2UgbW92ZXMuIFRodXMsIG1ha2luZyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZWAgY2FsbGFibGUuCgpUaGlzIGlzIGNsZWFybHkgcmVhY2hhYmxlIGNvZGUgd2l0aGluIGEgbmV0bGluay1hY2Nlc3NpYmxlIGRyaXZlci4gVGhlcmVmb3JlLCBpdCAqZG9lc24mIzM5O3QqIGZhbGwgdW5kZXIgYW55IG9mIHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsgb3V0bGluZWQgaW4gU2VjdGlvbiAyOiB0aGUgY29kZSBpc24mIzM5O3Qgbm9uLWtlcm5lbCwgaXNuJiMzOTt0IHJlbGF0ZWQgdG8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIGFuZCB0aGUgZXhlY3V0aW9uIHBhdGhzIGFyZSByZWFjaGFibGUuCgpTZWN0aW9uIDMgbWFrZXMgaXQgY2xlYXI6IHRoaXMgY29kZSBmYWxscyBzcXVhcmVseSB1bmRlciAmIzM0O1JlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMuJiMzNDsgU28gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGNvbmZpZ3VyaW5nIHRoZSBmdXp6ZXIuIEkgbmVlZCB0byBkZWZpbmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpGb3IgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSB0byBpZGVudGlmeSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGltcGxlbWVudGluZyBhbHRlcmVkIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHByaW1hcnkgZm9jdXMgaXMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCwgdGhlIGFkZGVkIGZ1bmN0aW9uLiBXaGlsZSBpdCBpcyBzdGF0aWMsIGl0IGlzIGNhbGxlZCBkaXJlY3RseSBieSBgbWFjc2VjX2NoYW5nZWxpbmtgIGFuZCBpdCBkb2VzIG5vdCBzZWVtIHRvIGJlIGlubGluZWQgaW50byBpdC4gVGhhdCYjMzk7cyBnb29kLiBgbWFjc2VjX2NoYW5nZWxpbmtgIGl0c2VsZiBpcyBhbHNvIG1vZGlmaWVkIHRvIGNhbGwgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZXNlIHR3bywgbWFraW5nIHRoZW0gYm90aCBnb29kIGZvY3VzIHN5bWJvbHMuIE5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuCgpGaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUbyBmdXp6IHRoZSBgbWFjc2VjYCBjb2RlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L01ha2VmaWxlYCwgSSBzZWUgYG9iai0kKENPTkZJR19NQUNTRUMpICYjNDM7PSBtYWNzZWMub2AuIFRoZW4sIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBJIGZpbmQgdGhlIGBDT05GSUdfTUFDU0VDYCBvcHRpb24gZGVmaW5lZCBhcyBhIHRyaXN0YXRlIHRoYXQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvZ3JhcGhpYyBvcHRpb25zLiBJdCBoYXMgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbHMuCgpJbiBjb25jbHVzaW9uLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZSBwYXRjaCBpcyBmdXp6YWJsZSBhbmQgdGhlIGZ1enplciBjYW4gYmUgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGBGb2N1c1N5bWJvbHNgIGFzIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgYW5kIGBtYWNzZWNfY2hhbmdlbGlua2AsIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXMgYENPTkZJR19NQUNTRUNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUREVWSUNFU1xuICAgNzpcdFx0ZGVmYXVsdCB5IGlmIFVNTFxuICAgODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgIDk6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvbiYjMzk7dCBpbnRlbmQgdG8gY29ubmVjdCB5b3VyIExpbnV4IGJveCB0b1xuICAxMjpcdFx0ICBhbnkgb3RoZXIgY29tcHV0ZXIgYXQgYWxsLlxuICAxMzpcdFxuICAxNDpcdFx0ICBZb3UmIzM5O2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhIG5ldHdvcmsgY2FyZCB0aGF0XG4gIDE1Olx0XHQgIHlvdSB3YW50IHRvIHVzZSB1bmRlciBMaW51eC4gSWYgeW91IGFyZSBnb2luZyB0byBydW4gU0xJUCBvciBQUFAgb3ZlclxuICAxNjpcdFx0ICB0ZWxlcGhvbmUgbGluZSBvciBudWxsIG1vZGVtIGNhYmxlIHlvdSBuZWVkIHNheSBZIGhlcmUuIENvbm5lY3RpbmdcbiAgMTc6XHRcdCAgdHdvIG1hY2hpbmVzIHdpdGggcGFyYWxsZWwgcG9ydHMgdXNpbmcgUExJUCBuZWVkcyB0aGlzLCBhcyB3ZWxsIGFzXG4gIDE4Olx0XHQgIEFYLjI1L0tJU1MgZm9yIHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIGFtYXRldXIgcmFkaW8gbGlua3MuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNlZSBhbHNvIFwmIzM0O1RoZSBMaW51eCBOZXR3b3JrIEFkbWluaXN0cmF0b3ImIzM5O3MgR3VpZGVcJiMzNDsgYnkgT2xhZiBLaXJjaCBhbmRcbiAgMjE6XHRcdCAgVGVycnkgRGF3c29uLiBBdmFpbGFibGUgYXQgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9ndWlkZXMuaHRtbFx1MDAzZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjQ6XHRcbiAgMjU6XHQjIEFsbCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXJlIGRlcGVuZGVudCBvbiBORVRERVZJQ0VTIC0gZG8gbm90IHJlcGVhdFxuICAyNjpcdCMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy5cbiAgMjc6XHRpZiBORVRERVZJQ0VTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIE1JSVxuICAzMDpcdFx0dHJpc3RhdGVcbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgTkVUX0NPUkVcbiAgMzM6XHRcdGRlZmF1bHQgeVxuICAzNDpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIGNvcmUgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXG4gIDM3Olx0XHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxuICAzODpcdFxuICAzOTpcdGlmIE5FVF9DT1JFXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJPTkRJTkdcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNDM6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0NDpcdFx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICYjMzk7Ym9uZCYjMzk7IG11bHRpcGxlIEV0aGVybmV0XG4gIDQ3Olx0XHQgIENoYW5uZWxzIHRvZ2V0aGVyLiBUaGlzIGlzIGNhbGxlZCAmIzM5O0V0aGVyY2hhbm5lbCYjMzk7IGJ5IENpc2NvLFxuICA0ODpcdFx0ICAmIzM5O1RydW5raW5nJiMzOTsgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJiMzOTtCb25kaW5nJiMzOTsgaW4gTGludXguXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgaGVyZSB3ZSBnby4gVGltZSB0byBidXJyb3cgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW5kIG9mIHRoZSBgaWYgTkVUX0NPUkVgIGNvbmRpdGlvbmFsIGJsb2NrLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbmV0d29yayBkcml2ZXJzLCBhbmQgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgZ2V0cyBpbmNsdWRlZCBvciBleGNsdWRlZCBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB3ZSYjMzk7cmUgYnVpbGRpbmcgZm9yIC5ORVQgQ29yZS4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCB0cmFjaW5nIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhhdCBwYXJ0aWN1bGFyIGNvbmRpdGlvbmFsLiBLbm93aW5nIHRoZSBleGFjdCBzY29wZSBpcyBjcnVjaWFsIGZvciBwcm9wZXJseSBzZXR0aW5nIHVwIG15IHByb2plY3QgYW5kIGF2b2lkaW5nIGFueSB1bndhbnRlZCBzdXJwcmlzZXMuIFNvLCBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmRpZi4qTkVUX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5NzplbmRpZiAjIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBNQUNTRUNgLiBJdCBsb29rcyBsaWtlIGBORVRfQ09SRWAgaXMgbmVzdGVkIGluc2lkZSBgaWYgTkVUREVWSUNFU2AsIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYE5FVGAuIEFuZCBgTUFDU0VDYCBzaG93cyB1cCBhcm91bmQgbGluZSAzMTgsIGRpcmVjdGx5IHdpdGhpbiBgaWYgTkVUX0NPUkVgLiBTbywgdGhlIGhpZXJhcmNoeSBpcyBgTkVUREVWSUNFU2AsIHRoZW4gYE5FVF9DT1JFYCwgYW5kIGZpbmFsbHkgYE1BQ1NFQ2AuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IGJlaGF2aW9ycyBoZXJlLCBhbmQgbXkgZ3V0IGNoZWNrIHRlbGxzIG1lIHRoYXQgYE5FVERFVklDRVNgIGFuZCBgTkVUX0NPUkVgIGFyZSBwcmV0dHkgc3RhbmRhcmQgY29tcG9uZW50cyBpbiBzeXprYWxsZXIgb3IgdHlwaWNhbCBMaW51eCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBKdXN0IHRvIGJlIGNlcnRhaW4sIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgTkVUX0NPUkVgIGlzIGluZGVlZCBzZXQgdG8gJiMzNDt5JiMzNDsgKHllcykgYnkgZGVmYXVsdCB3aGVuIGBORVRERVZJQ0VTYCBpcyBhbHNvIHNldCB0byAmIzM0O3kmIzM0Oy4gQW5kIEkgcmVjYWxsIG5vdyB0aGF0IGBNQUNTRUNgIGlzIHRoZSBzcGVjaWZpYyBjb25maWcgZW5hYmxpbmcgYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGlmIGBORVRfQ09SRWAgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzLiBJdCBhcHBlYXJzIGl0IGRvZXNuJiMzOTt0OyBpdCYjMzk7cyBqdXN0IGNvbnRyb2xsZWQgYnkgdGhhdCBvdXRlciBgaWYgTkVUREVWSUNFU2AuIFRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBzeW1ib2wgZm9yIGBNQUNTRUNgLCB3aGljaCBpcyBgQ09ORklHX01BQ1NFQ2AuCgpBbmQgbm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gYmUgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bGwgc2NhbiBgZHJpdmVycy9uZXQvbWFjc2VjLmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGxpa2UgYCNpZmRlZiBDT05GSUdfYCBvciBgSVNfRU5BQkxFRCguLi4pYCBjaGVja3MuIEp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbmZpcm0gdGhhdCBgTUFDU0VDYCBpcyB0aGUgb25seSBjb25maWcgcmVxdWlyZWQgdG8gZW5hYmxlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lTX0VOQUJMRUR8Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21hY3NlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWNzZWMuYyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtYWNzZWMuY2AgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZzogbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyDigJMgbm8gYCNpZmRlZmBzIG9yIGBJU19FTkFCTEVEYCBtYWNyb3Mgd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gVGhpcyBpcyB1bnVzdWFsLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHVzYWdlLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIG5ldHdvcmsgbmFtZXNwYWNlcy4gU2luY2UgdGhpcyBwYXRjaCBzZWVtcyB0byB0b3VjaCBvbiBuZXR3b3JrIG5hbWVzcGFjZXMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ0FQX05FVF9BRE1JTmAgd2l0aGluIHRob3NlIG5hbWVzcGFjZXMsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgQ09ORklHX05FVF9OU2AgaXMgYSBwcmVyZXF1aXNpdGUgb3IgaXMgYXQgYWxsIGludm9sdmVkIGhlcmUuIFRoZSBmYWN0IHRoaXMgZmlsZSBpcyBiZWluZyBjaGFuZ2VkIG1lYW5zIEkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLgoKQWgsIGFuZCB0aGVyZSBpdCBpcy4gVGhpbmtpbmcgYWJvdXQgYENPTkZJR19ORVRfTlNgLCB3aGljaCBwZXJtaXRzIG11bHRpcGxlIG5ldHdvcmsgbmFtZXNwYWNlcywgdGhlIGNvZ3MgYXJlIHR1cm5pbmcuIFRoaXMgaXMgd2hlcmUgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBhY3R1YWxseSBoYXMgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcyBiZXR3ZWVuIHRoZSBtYWNzZWMgZGV2aWNlIGFuZCB0aGUgYHJlYWxfZGV2YC4gTm93IEkga25vdyB3aHkgdGhpcyBpcyBpbXBvcnRhbnQgdG8gY2hlY2suCgpUbyBiZSBzdXJlLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBgaW5pdC9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCBmaWxlcyBhcmUgbXkgbmV4dCBzdG9wLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX05FVF9OU2AgaXMgcHJlc2VudCBhbmQgaWYgaXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGVuYWJsZXMgbXVsdGlwbGUgbmV0d29yayBuYW1lc3BhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0NjA9Y29uZmlnIFBJRF9OU1xuLS1cbmluaXQvS2NvbmZpZy0xNDY3LVxuaW5pdC9LY29uZmlnOjE0Njg6Y29uZmlnIE5FVF9OU1xuaW5pdC9LY29uZmlnLTE0NjktXHRib29sIFwmIzM0O05ldHdvcmsgbmFtZXNwYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTE2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgY29uZmlndXJlZCBhdCBib290LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIGZvciB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMuIExldCBtZSBqdW1wIHRoZXJlIGFuZCBsb29rIGZvciB0aGUgYE5FVF9OU2Agc3ltYm9sLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IGRlZmluZSB3aGV0aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgaXMgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBjb21wbGV0ZWx5IGRpc2FibGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbmFsIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBwb3RlbnRpYWxseSB0aGUgcmVsZXZhbnQgYm9vdCBhcmd1bWVudHMgb3Iga2VybmVsIG1vZHVsZXMgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2NTpcdFx0ICBwcm9jZXNzZXMgd2l0aCB0aGUgc2FtZSBwaWQgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiBkaWZmZXJlbnRcbjE0NjY6XHRcdCAgcGlkIG5hbWVzcGFjZXMuICBUaGlzIGlzIGEgYnVpbGRpbmcgYmxvY2sgb2YgY29udGFpbmVycy5cbjE0Njc6XHRcbjE0Njg6XHRjb25maWcgTkVUX05TXG4xNDY5Olx0XHRib29sIFwmIzM0O05ldHdvcmsgbmFtZXNwYWNlXCYjMzQ7XG4xNDcwOlx0XHRkZXBlbmRzIG9uIE5FVFxuMTQ3MTpcdFx0ZGVmYXVsdCB5XG4xNDcyOlx0XHRoZWxwXG4xNDczOlx0XHQgIEFsbG93IHVzZXIgc3BhY2UgdG8gY3JlYXRlIHdoYXQgYXBwZWFyIHRvIGJlIG11bHRpcGxlIGluc3RhbmNlc1xuMTQ3NDpcdFx0ICBvZiB0aGUgbmV0d29yayBzdGFjay5cbjE0NzU6XHRcbjE0NzY6XHRlbmRpZiAjIE5BTUVTUEFDRVNcbjE0Nzc6XHRcbjE0Nzg6XHRjb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXG4xNDc5Olx0XHRib29sIFwmIzM0O0NoZWNrcG9pbnQvcmVzdG9yZSBzdXBwb3J0XCYjMzQ7XG4xNDgwOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbjE0ODE6XHRcdHNlbGVjdCBQUk9DX0NISUxEUkVOXG4xNDgyOlx0XHRzZWxlY3QgS0NNUFxuMTQ4MzpcdFx0ZGVmYXVsdCBuXG4xNDg0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzc0CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTUFDc2VjIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIHJlbGV2YW5jZSBvZiBgQ09ORklHX01BQ1NFQ2AgYW5kIGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCBiYXNlcywgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBydG5ldGxpbmsgb3IgTUFDc2VjLCBqdXN0IGluIGNhc2UuIEkga25vdyBgcnRuZXRsaW5rLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBhbHNvIHJlY2FsbCB0aGF0IGBkcml2ZXJzL25ldC9tYWNzZWMuY2Agc2VsZWN0cyBhIGJ1bmNoIG9mIGNyeXB0by1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zOiBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGFuZCBgR1JPX0NFTExTYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIG9mIGl0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1hY3NlY19jaGFuZ2VsaW5rYCBhbmQgaW50cm9kdWNlcyBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUga2V5IGhlcmUgaXMgdGhlIG5hbWVzcGFjZSBjaGVjazsgaXQmIzM5O3MgZGVzaWduZWQgdG8gdmVyaWZ5IGNhcGFiaWxpdGllcyB3aGVuZXZlciB3ZSBjaGFuZ2UgYXR0cmlidXRlcyBvZiBhIE1BQ3NlYyBkZXZpY2UsIGVzcGVjaWFsbHkgd2hlbiBpdHMgdW5kZXJseWluZyAmIzM5O3JlYWwmIzM5OyBkZXZpY2UgbWlnaHQgcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCBvciB3aGVuIHRoZSBvZmZsb2FkIHN0YXRlIGNoYW5nZXMuCgpMb29raW5nIGF0IHRoZSBjb250ZXh0LCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBJdOKAmXMgdHJpZ2dlcmVkIHZpYSBydG5ldGxpbmsgY2FsbHPigJRzcGVjaWZpY2FsbHkgYFJUTV9ORVdMSU5LYCBhbmQgYFJUTV9TRVRMSU5LYC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBhdHRhY2sgc3VyZmFjZSBmcm9tIHVzZXJzcGFjZS4gR2l2ZW4gdGhlIHNlbnNpdGl2aXR5IG9mIG5hbWVzcGFjZSBwZXJtaXNzaW9ucyBhbmQgdGhlIHBvdGVudGlhbCBmb3Igb2ZmbG9hZCBtYW5pcHVsYXRpb25zLCBpdCYjMzk7cyBzY3JlYW1pbmcgJiMzNDtXb3J0aEZ1enppbmchJiMzNDsuCgpTbywgZm9yIGZ1enppbmcsIHRoZSBjcml0aWNhbCBzeW1ib2xzIGFyZTogYG1hY3NlY19jaGFuZ2VsaW5rYCBhbmQgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYC4gVGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgd2lsbCBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgYXJlIGBNQUNTRUNgIGFuZCBgTkVUX05TYC4KCkluIHNob3J0LCB0aGUgcGF0Y2ggYWRkcyBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGFuZCBjYWxscyBpdCBmcm9tIGBtYWNzZWNfY2hhbmdlbGlua2AgdG8gdmFsaWRhdGUgYENBUF9ORVRfQURNSU5gIHByaXZpbGVnZXMgb3ZlciBhIGByZWFsX2RldmDigJlzIG5ldHdvcmsgbmFtZXNwYWNlIHdoZW4gYWx0ZXJpbmcgb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2VzIG9yIGNoYW5naW5nIG9mZmxvYWQgY29uZmlndXJhdGlvbi4gVGhlIGNvZGUgcmVzaWRlcyBpbiB0aGUgTUFDc2VjIG5ldHdvcmsgZHJpdmVyLCBhbmQgY2FuIGJlIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZCBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChgUlRNX05FV0xJTktgL2BSVE1fU0VUTElOS2ApIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSYjMzk7bSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBmdXp6aW5nIGlzIGFwcHJvcHJpYXRlIHRvIHRlc3QgbGluayBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGFuZCBuYW1lc3BhY2UgcGVybWlzc2lvbiBoYW5kbGluZy4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZXZlcnl0aGluZy4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1NFQyYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyYjMzQ7LAogICAgJiMzNDttYWNzZWNfY2hhbmdlbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKCkgYW5kIGNhbGxzIGl0IHdpdGhpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIGVuZm9yY2UgbmFtZXNwYWNlIHBlcm1pc3Npb24gY2hlY2tzIChyZXF1aXJpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbF9kZXYgbmV0d29yayBuYW1lc3BhY2UpIHdoZW4gY2hhbmdpbmcgTUFDc2VjIG9mZmxvYWQgc3RhdGUgb3IgdXBkYXRpbmcgb2ZmbG9hZGVkIGRldmljZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29kZSBpbiB0aGUgdmlydHVhbCBNQUNzZWMgbmV0d29ya2luZyBkcml2ZXIsIGV4ZXJjaXNhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ORVdMSU5LIC8gUlRNX1NFVExJTkspIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDU0VDJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zJiMzNDssCiAgICAmIzM0O21hY3NlY19jaGFuZ2VsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoKSBhbmQgY2FsbHMgaXQgd2l0aGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gZW5mb3JjZSBuYW1lc3BhY2UgcGVybWlzc2lvbiBjaGVja3MgKHJlcXVpcmluZyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsX2RldiBuZXR3b3JrIG5hbWVzcGFjZSkgd2hlbiBjaGFuZ2luZyBNQUNzZWMgb2ZmbG9hZCBzdGF0ZSBvciB1cGRhdGluZyBvZmZsb2FkZWQgZGV2aWNlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIHRoZSB2aXJ0dWFsIE1BQ3NlYyBuZXR3b3JraW5nIGRyaXZlciwgZXhlcmNpc2FibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX05FV0xJTksgLyBSVE1fU0VUTElOSykgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDIxOjQ4OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwppbmRleCA2ZjlmM2FjZWZmYWFkLi5lMDE5ZTdhMjVjYzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvZ3JvX2NlbGxzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hY3NlYy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgmZ3Q7CkBAIC0zOTQ1LDYgJiM0MzszOTQ2LDMzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kCiYjNDM7ICogYW55IHJlcXVlc3QgYWdhaW5zdCBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UgKG1kb191cGRfc2VjeSgpKSByZWFjaAomIzQzOyAqIHRoZSBkcml2ZXIgb2YgcmVhbF9kZXYsIHdoaWNoIG1heSBsaXZlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYmIzM5O3MgbmFtZXNwYWNlCiYjNDM7ICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJIHN0cnVjdCBubGF0dHIgKmRhdGFbXSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTsKJiM0MzsJYm9vbCByZWFjaGVzX3JlYWxfZGV2OwomIzQzOwomIzQzOwlyZWFjaGVzX3JlYWxfZGV2ID0gbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpOwomIzQzOwlpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy0mZ3Q7b2ZmbG9hZCkKJiM0MzsJCXJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoIXJlYWNoZXNfcmVhbF9kZXYgfHwKJiM0MzsJICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy0mZ3Q7cmVhbF9kZXYpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkgICAgICAgJiMzNDtDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwlyZXR1cm4gLUVQRVJNOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCSAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLAogCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCkBAIC0zOTU5LDYgJiM0MzszOTg3LDEwIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAwOwogCiYjNDM7CXJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJaWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fAogCSAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8CiAJICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSYjMzk7bGwgYW5hbHl6ZSB0aGUgY29kZSBjaGFuZ2VzLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUgZnVuY3Rpb24gY2hlY2tzIGlmIGNoYW5nZXMgdG8gdGhlIE1BQ3NlYyBkZXZpY2UgY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIG9mZmxvYWRpbmcsIGFmZmVjdCB0aGUgdW5kZXJseWluZyAmIzM0O3JlYWwgZGV2aWNlLCYjMzQ7IHdoaWNoIG1pZ2h0IHJlc2lkZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZS4gSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIGEgc2VwYXJhdGUgbmFtZXNwYWNlLCB0aGUgcGF0Y2ggZW5mb3JjZXMgYENBUF9ORVRfQURNSU5gIG92ZXIgdGhhdCBvdGhlciBuYW1lc3BhY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgcGVybWlzc2lvbiBjaGVjayByZWxhdGVkIHRvIGNyb3NzLW5hbWVzcGFjZSBvcGVyYXRpb25zLiBUaGUgYWRkZWQgY29kZSBpcyBhIGdhdGVrZWVwZXIgdGhhdCBlbnN1cmVzIHRoZSBjYWxsZXIgaGFzIHRoZSBuZWNlc3NhcnkgcHJpdmlsZWdlcyB0byBtb2RpZnkgYSBNQUNzZWMgZGV2aWNlIHRoYXQgaGFzIGl0cyByZWFsIGRldmljZSBpbiBhIHNlcGFyYXRlIG5hbWVzcGFjZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgY2hhbmdlcyB0byB0aGUgb2ZmbG9hZCBzdGF0ZSBvciBhbnkgb3BlcmF0aW9ucyBvbiBhbiBvZmZsb2FkZWQgZGV2aWNlIHdoZXJlIHRoZSAmIzM5O3JlYWwmIzM5OyBkZXZpY2UgaXMgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLCB0aGlzIHNob3VsZCBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZiBhbmQgY292ZXJlZCBieSBleGlzdGluZyBmdXp6aW5nIHN0cmF0ZWdpZXMuIFNpbmNlIHRoaXMgaXMgYW4gYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtLCBpdCBtYXkgbm90IGludHJvZHVjZSBuZXcsIGVhc2lseSBleHBsb2l0YWJsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIE15IGluc3RpbmN0cyBzdWdnZXN0IHRoYXQgZXhpc3RpbmcgZnV6emluZyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSB3b3VsZCBjaGVjayBhbnkgZXhpc3RpbmcgZnV6emluZyBjb3ZlcmFnZSBvZiBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlcmFjdGlvbiBpbiB0aGlzIGFyZWEsIGFuZCBwZXJoYXBzIGFkZCBhIHRlc3RjYXNlIGZvciB0aGlzIHNwZWNpZmljIGNoZWNrLCBpZiBpdCBkb2VzIG5vdCBleGlzdC4gSG93ZXZlciwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBhIGRlZGljYXRlZCBzZXNzaW9uIGRvZXNuJiMzOTt0IHNlZW0gc3RyaWN0bHkgbmVjZXNzYXJ5ICphdCB0aGlzIHBvaW50Ki4gSSYjMzk7bGwgbmVlZCB0byBkbyBtb3JlIGRpZ2dpbmcgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tYWNzZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk0MDpcdFx0XHRpZiAoc2VjeS1cdTAwM2V4cG4gXHUwMDI2XHUwMDI2XG4zOTQxOlx0XHRcdCAgICByZXBsYXlfd2luZG93IFx1MDAzZSBNQUNTRUNfWFBOX01BWF9SRVBMQVlfV0lORE9XKVxuMzk0MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzk0MzpcdFx0XHRXUklURV9PTkNFKHNlY3ktXHUwMDNlcmVwbGF5X3dpbmRvdywgcmVwbGF5X3dpbmRvdyk7XG4zOTQ0Olx0XHR9XG4zOTQ1Olx0XG4zOTQ2Olx0XHRyZXR1cm4gMDtcbjM5NDc6XHR9XG4zOTQ4Olx0XG4zOTQ5Olx0LyogQm90aCBhIGNoYW5nZSBvZiB0aGUgb2ZmbG9hZCBzdGF0ZSAobWRvX2FkZF9zZWN5KCkvbWRvX2RlbF9zZWN5KCkpIGFuZFxuMzk1MDpcdCAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbjM5NTE6XHQgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxuMzk1MjpcdCAqIGZyb20gdGhlIG1hY3NlYyBkZXZpY2UuIFJlcXVpcmUgQ0FQX05FVF9BRE1JTiBvdmVyIHJlYWxfZGV2JiMzOTtzIG5hbWVzcGFjZVxuMzk1MzpcdCAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuMzk1NDpcdCAqL1xuMzk1NTpcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjM5NTY6XHRcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjM5NTc6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjM5NTg6XHR7XG4zOTU5Olx0XHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbjM5NjA6XHRcdGJvb2wgcmVhY2hlc19yZWFsX2RldjtcbjM5NjE6XHRcbjM5NjI6XHRcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4zOTYzOlx0XHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcdTAwMjZcdTAwMjZcbjM5NjQ6XHRcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cdTAwM2VvZmZsb2FkKVxuMzk2NTpcdFx0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbjM5NjY6XHRcbjM5Njc6XHRcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxuMzk2ODpcdFx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuMzk2OTpcdFx0XHRyZXR1cm4gMDtcbjM5NzA6XHRcbjM5NzE6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbjM5NzI6XHRcdFx0ICAgICAgIFwmIzM0O0NoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcJiMzNDspO1xuMzk3MzpcdFx0cmV0dXJuIC1FUEVSTTtcbjM5NzQ6XHR9XG4zOTc1Olx0XG4zOTc2Olx0c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMzk3NzpcdFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMzk3ODpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMzk3OTpcdHtcbjM5ODA6XHRcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xuMzk4MTpcdFx0Ym9vbCBtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSBmYWxzZTtcbjM5ODI6XHRcdGVudW0gbWFjc2VjX29mZmxvYWQgb2ZmbG9hZDtcbjM5ODM6XHRcdHN0cnVjdCBtYWNzZWNfdHhfc2MgdHhfc2M7XG4zOTg0Olx0XHRzdHJ1Y3QgbWFjc2VjX3NlY3kgc2VjeTtcbjM5ODU6XHRcdGludCByZXQ7XG4zOTg2Olx0XG4zOTg3Olx0XHRpZiAoIWRhdGEpXG4zOTg4Olx0XHRcdHJldHVybiAwO1xuMzk4OTpcdFxuMzk5MDpcdFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuMzk5MTpcdFx0aWYgKHJldClcbjM5OTI6XHRcdFx0cmV0dXJuIHJldDtcbjM5OTM6XHRcbjM5OTQ6XHRcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbjM5OTU6XHRcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4zOTk2Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4zOTk3Olx0XHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcbjM5OTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDUKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1BQ3NlYyBMaW5rIEF0dHJpYnV0ZSBDaGFuZ2UgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgcHJldHR5IGNsZWFuIGFkZGl0aW9uLCByZWFsbHkuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBjcnVjaWFsIHBlcm1pc3Npb24gY2hlY2s6IGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhkZXYsIGRhdGEsIGV4dGFjaylgLiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCB3aGVuZXZlciBzb21lb25lIGF0dGVtcHRzIHRvIGNoYW5nZSBsaW5rIGF0dHJpYnV0ZXMgb24gYSBNQUNzZWMgZGV2aWNlLCAqYW5kKiB0aGF0IGRldmljZSYjMzk7cyB1bmRlcmx5aW5nICYjMzQ7cmVhbCYjMzQ7IGRldmljZSBsaXZlcyBpbiBhICpkaWZmZXJlbnQqIG5ldHdvcmsgbmFtZXNwYWNlLiBDcnVjaWFsbHksIHRoaXMgY2hlY2sgZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gY2hhbmdlcyB0aGF0IHRvdWNoIG9mZmxvYWQgY29uZmlndXJhdGlvbnMgb3IgcmVhY2ggdGhlIHJlYWwgZGV2aWNlLCBhbmQgdGhlIGNoZWNrIHJlcXVpcmVzIGBDQVBfTkVUX0FETUlOYCBpbiB0aGF0ICpyZWFsX2RldiogbmFtZXNwYWNlLCB1c2luZyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSgpYC4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm5zLCB3aGVuIGxvb2tpbmcgYXQgYSBwYXRjaCBsaWtlIHRoaXMsIGFyZSBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IGZyb20gYSBzZWN1cml0eSBwb2ludCBvZiB2aWV3LgoKKiAgICoqVXNlci1TcGFjZSBEYXRhIFN0cnVjdHVyZXM6KiogTm8uIEl0JiMzOTtzIGp1c3Qgc2V0dGluZyBhbiBlcnJvciBtZXNzYWdlIHZpYSBgTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAuLi4pYCBpZiB0aGUgcGVybWlzc2lvbiBjaGVjayBmYWlscy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGV4aXN0aW5nIG9uZXMgYXJlIGJlaW5nIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaXNzdWVzLgoqICAgKipDb25kaXRpb25hbCBMb2dpYyBhbmQgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogTm9wZS4gVGhlIGNvZGUgYWNjZXNzZXMgYSBgbWFjc2VjYCBwb2ludGVyIHRocm91Z2ggYG1hY3NlY19wcml2KGRldilgLCB3aGljaCBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBgZGF0YWAgYXJyYXkgY29tZXMgZGlyZWN0bHkgZnJvbSBgcnRubGAgd2hpY2ggcGFyc2VzIG5ldGxpbmsgYXR0cmlidXRlcyBzbyBpdCBpcyBpbml0aWFsaXplZC4gYG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKWAgYW5kIGBtYWNzZWMtJmd0O29mZmxvYWRgIGFyZSBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzLiBTbywgbm8gY29uY2VybnMgdGhlcmUuCiogICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb246KiogTm90IGhhcHBlbmluZy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB3ZSYjMzk7ZCBuZWVkIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyLgoqICAgKipCb3VuZHMgQ2hlY2tzL0J1ZmZlciBNYW5pcHVsYXRpb246KiogTm9wZS4gTm8gbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBidWZmZXIgY2hlY2tzLCBsZW5ndGhzLCBvciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4KClNvLCBpbiBlc3NlbmNlLCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcyBjb250cm9sIG1lYXN1cmUgd2l0aGluIHRoZSBgcnRubGAgY2hhbmdlbGluayBjYWxsYmFjayBmb3IgTUFDc2VjLiBJdCYjMzk7cyBhIHBlcm1pc3Npb24gZ2F0ZSwgbm90IGEgZGF0YSBtYW5pcHVsYXRpb24gb3IgYWxsb2NhdGlvbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBleHBvc2VkIGhlcmUuCgpUaGVyZWZvcmUsIGFmdGVyIGdvaW5nIHRocm91Z2ggaXQsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouCgpGaW5hbGx5LCBsZXQgbWUgY2xhcmlmeSB0aGUgcmF0aW9uYWxlIGFuZCBjb250cmFzdCBpdCB3aXRoIEtBU0FOOgoKKiAgICoqS0FTQU46KiogV2UgdXNlIHRoaXMgdG8gaHVudCBmb3IgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIC0gdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHRoYXQga2luZCBvZiB0aGluZy4KKiAgICoqS01TQU46KiogVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2VyIHNwYWNlLgoKVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgc2ltcGx5IGFib3V0IG5hbWVzcGFjZSBjYXBhYmlsaXR5IHZhbGlkYXRpb24sIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpYCwgdXNpbmcgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoKWAgd2hlbiBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gbWlnaHQgcmVhY2ggYHJlYWxfZGV2YCBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBubyBidWZmZXIgb3BlcmF0aW9ucyBhcmUgaW50cm9kdWNlZCwgYW5kIGltcG9ydGFudGx5LCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBvbmx5IGNoZWNrcyB0aGUgcGVybWlzc2lvbiBvbiB0aGUgbmFtZXNwYWNlLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZS4gSXQmIzM5O3MgYSBzb2xpZCwgY2xlYW4sIHBlcm1pc3Npb24gY2hlY2ssIGFuZCBubyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSYjMzk7cyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoxNy44ODIzOTkwMTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQ4MDgzMTMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNTRUNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zXCIsXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSdzIG5ldHdvcmsgbmFtZXNwYWNlIHdoZW4gbW9kaWZ5aW5nIG9mZmxvYWQgY29uZmlndXJhdGlvbiBvbiBhIE1BQ3NlYyBuZXRkZXZpY2UgYWNyb3NzIG5hbWVzcGFjZXMuIEl0IG9ubHkgaW5zcGVjdHMgZXhpc3RpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9pbnRlcnMgYW5kIHN0cnVjdCBtYWNzZWNfZGV2IGZpZWxkcywgYW5kIGNvbmRpdGlvbmFsbHkgZW1pdHMgYSBzdGF0aWMgbmV0bGluayBleHRlbmRlZCBBQ0sgZXJyb3Igc3RyaW5nIG9uIHBlcm1pc3Npb24gZGVuaWFsLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3B5aW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS9pbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpIGFuZCBjYWxscyBpdCB3aXRoaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byBlbmZvcmNlIG5hbWVzcGFjZSBwZXJtaXNzaW9uIGNoZWNrcyAocmVxdWlyaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHJlYWxfZGV2IG5ldHdvcmsgbmFtZXNwYWNlKSB3aGVuIGNoYW5naW5nIE1BQ3NlYyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0aW5nIG9mZmxvYWRlZCBkZXZpY2VzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIHZpcnR1YWwgTUFDc2VjIG5ldHdvcmtpbmcgZHJpdmVyLCBleGVyY2lzYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fTkVXTElOSyAvIFJUTV9TRVRMSU5LKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjE3Ljg4MjQwNTUwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NjY0OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAyMTo0ODoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXFxuaW5kZXggNmY5ZjNhY2VmZmFhZC4uZTAxOWU3YTI1Y2M5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ncm9fY2VsbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXFx1MDAzZVxcbkBAIC0zOTQ1LDYgKzM5NDYsMzMgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIEJvdGggYSBjaGFuZ2Ugb2YgdGhlIG9mZmxvYWQgc3RhdGUgKG1kb19hZGRfc2VjeSgpL21kb19kZWxfc2VjeSgpKSBhbmRcXG4rICogYW55IHJlcXVlc3QgYWdhaW5zdCBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UgKG1kb191cGRfc2VjeSgpKSByZWFjaFxcbisgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxcbisgKiBmcm9tIHRoZSBtYWNzZWMgZGV2aWNlLiBSZXF1aXJlIENBUF9ORVRfQURNSU4gb3ZlciByZWFsX2RldidzIG5hbWVzcGFjZVxcbisgKiBmb3IgdGhvc2U7IGxvY2FsIGF0dHJpYnV0ZXMgb2YgYSBub24tb2ZmbG9hZGVkIGRldmljZSBhcmUgdW5hZmZlY3RlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcXG4rXFx0Ym9vbCByZWFjaGVzX3JlYWxfZGV2O1xcbitcXG4rXFx0cmVhY2hlc19yZWFsX2RldiA9IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKTtcXG4rXFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVxcdTAwM2VvZmZsb2FkKVxcbitcXHRcXHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcXG4rXFxuK1xcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxcbitcXHQgICAgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVxcdTAwM2VyZWFsX2RldikpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0ICAgICAgIFxcXCJDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXFxcIik7XFxuK1xcdHJldHVybiAtRVBFUk07XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbkBAIC0zOTU5LDYgKzM5ODcsMTAgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXHRpZiAoIWRhdGEpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFXSB8fFxcbiBcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxcbiBcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjE4LjM4MDgxNTEzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Njk4NTk4MzI1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDU0VDXCIsXG4gICAgXCJORVRfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc1wiLFxuICAgIFwibWFjc2VjX2NoYW5nZWxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKCkgYW5kIGNhbGxzIGl0IHdpdGhpbiBtYWNzZWNfY2hhbmdlbGluaygpIHRvIGVuZm9yY2UgbmFtZXNwYWNlIHBlcm1pc3Npb24gY2hlY2tzIChyZXF1aXJpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbF9kZXYgbmV0d29yayBuYW1lc3BhY2UpIHdoZW4gY2hhbmdpbmcgTUFDc2VjIG9mZmxvYWQgc3RhdGUgb3IgdXBkYXRpbmcgb2ZmbG9hZGVkIGRldmljZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29kZSBpbiB0aGUgdmlydHVhbCBNQUNzZWMgbmV0d29ya2luZyBkcml2ZXIsIGV4ZXJjaXNhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ORVdMSU5LIC8gUlRNX1NFVExJTkspIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTI1Nzc1MGE0ZGY0YTJhMjY3ZjdjM2Y4MmI3YzRkMGVhNjdlOTcwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjE6NDg6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5pbmRleCA2ZjlmM2FjZWZmYWFkLi5lMDE5ZTdhMjVjYzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWFjc2VjLmNcbisrKyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9ncm9fY2VsbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG5AQCAtMzk0NSw2ICszOTQ2LDMzIEBAIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY29tbW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQm90aCBhIGNoYW5nZSBvZiB0aGUgb2ZmbG9hZCBzdGF0ZSAobWRvX2FkZF9zZWN5KCkvbWRvX2RlbF9zZWN5KCkpIGFuZFxuKyAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcbisgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxuKyAqIGZyb20gdGhlIG1hY3NlYyBkZXZpY2UuIFJlcXVpcmUgQ0FQX05FVF9BRE1JTiBvdmVyIHJlYWxfZGV2J3MgbmFtZXNwYWNlXG4rICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuXG4rICovXG4rc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuK1x0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xuK1x0Ym9vbCByZWFjaGVzX3JlYWxfZGV2O1xuK1xuK1x0cmVhY2hlc19yZWFsX2RldiA9IG1hY3NlY19pc19vZmZsb2FkZWQobWFjc2VjKTtcbitcdGlmIChkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVx1MDAzZW9mZmxvYWQpXG4rXHRcdHJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlO1xuK1xuK1x0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XG4rXHQgICAgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVx1MDAzZXJlYWxfZGV2KSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHQgICAgICAgXCJDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXCIpO1xuK1x0cmV0dXJuIC1FUEVSTTtcbit9XG4rXG4gc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuQEAgLTM5NTksNiArMzk4NywxMCBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoIWRhdGEpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcbiBcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoxOC4zODA4MTczNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjU3ODAxMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDc2VjIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbiBgZHJpdmVycy9uZXQvbWFjc2VjLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IHJldmlldyB3aGF0J3MgYmVpbmcgY2hhbmdlZC4gVGhlIGRpZmYgc2hvd3MgYSBuZXcgZnVuY3Rpb24sIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AsIGFuZCBhIGNhbGwgdG8gaXQgd2l0aGluIGBtYWNzZWNfY2hhbmdlbGlua2AuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBuZXcgZnVuY3Rpb24uIFRoZSBjb21tZW50IGFib3ZlIGl0IGlzIGtleTogaXQgc2VlbXMgdG8gYmUgYWJvdXQgYWNjZXNzIGNvbnRyb2wgd2hlbiBkZWFsaW5nIHdpdGggb2ZmbG9hZGVkIE1BQ3NlYyBkZXZpY2VzIGFuZCB0aGVpciBcInJlYWxcIiB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgd2hpY2ggbWlnaHQgcmVzaWRlIGluIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblRoZSBjb3JlIGlkZWEgYXBwZWFycyB0byBiZSBjaGVja2luZyB3aGV0aGVyIGEgY2hhbmdlIHRvIHRoZSBNQUNzZWMgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIG9mZmxvYWQgc3RhdGUgb3IgdXBkYXRlcyB0byBhbiBhbHJlYWR5IG9mZmxvYWRlZCBkZXZpY2UsIGludGVyYWN0cyB3aXRoIHRoZSBcInJlYWxcIiBkZXZpY2UuIElmIGl0ICpkb2VzKiB0b3VjaCB0aGUgcmVhbCBkZXZpY2UsIGFuZCB0aGF0IGRldmljZSBsaXZlcyBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZSwgdGhlbiBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSB3aXRoaW4gdGhhdCB0YXJnZXQgbmFtZXNwYWNlIGlzIHJlcXVpcmVkLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgYSBjcnVjaWFsIGlzb2xhdGlvbiBtZWNoYW5pc20sIGFuZCB3ZSBzaG91bGRuJ3QgYWxsb3cgb3BlcmF0aW9ucyBvbiBvbmUgbmFtZXNwYWNlIHRvIGltcGxpY2l0bHkgYWZmZWN0IGFub3RoZXIgd2l0aG91dCBleHBsaWNpdCBwZXJtaXNzaW9uLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGNoZWNrcyB0d28gY29uZGl0aW9uczogd2hldGhlciB0aGUgTUFDc2VjIGRldmljZSBpcyBvZmZsb2FkZWQgKHdoaWNoIGltcGxpZXMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVhbCBkZXZpY2UpIG9yIHdoZXRoZXIgdGhlIG9mZmxvYWQgc3RhdGUgaXMgY2hhbmdpbmcuIFRoZSBwYXRjaCB0aGVuIHNlZW1zIHRvIHZlcmlmeSB0aGUgY2FwYWJpbGl0eSwgYW5kIHJldHVybnMgYC1FUEVSTWAgd2l0aCBhbiBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZhaWxzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzZWN1cml0eSBtZWFzdXJlIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGNyb3NzLW5hbWVzcGFjZSBvcGVyYXRpb25zLlxuXG5UbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGRldGVybWluZSBob3cgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC9kaXNhYmxlZC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgd2hldGhlciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQsIHRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoyMy42Mzg2MjE1MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDQ1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BQ1NFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNzYwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMxODpjb25maWcgTUFDU0VDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMTktXFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjFBRSBNQUMtbGV2ZWwgZW5jcnlwdGlvbiAoTUFDc2VjKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19JRkIpICs9IGlmYi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01BQ1NFQykgKz0gbWFjc2VjLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQU1UKSArPSBhbXQub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZz0xOT1jb25maWcgQVFUSU9OXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvS2NvbmZpZzoyMjpcXHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCBNQUNTRUM9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGU9MTM9YXRsYW50aWMtb2JqcyA6PSBhcV9tYWluLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGUtMzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvTWFrZWZpbGU6MzQ6YXRsYW50aWMtJChDT05GSUdfTUFDU0VDKSArPSBhcV9tYWNzZWMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL01ha2VmaWxlLTM1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jPTExND1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFxX2V0aHRvb2xfcXVldWVfdHhfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTEyMC1zdGF0aWMgY29uc3QgY2hhciBhcV9tYWNzZWNfc3RhdF9uYW1lc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MTgzPXN0YXRpYyB1MzIgYXFfZXRodG9vbF9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTE5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MTk3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTE5OC1cXHRpZiAobmljLVxcdTAwM2VtYWNzZWNfY2ZnKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MjEyPXN0YXRpYyB2b2lkIGFxX2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjIxLSNlbmRpZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzoyMjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjIzLVxcdGRhdGEgPSBhcV9tYWNzZWNfZ2V0X3N0YXRzKGFxX25pYywgZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM9MjUyPXN0YXRpYyB2b2lkIGFxX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMjU4LVxcdGludCBpLCBzaTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmM6MjU5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTI2MC1cXHRpbnQgc2E7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzIyLSNlbmRpZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozMjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzI0LVxcdFxcdGlmICghbmljLVxcdTAwM2VtYWNzZWNfY2ZnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMyOC1cXHRcXHRwID0gcCArIHNpemVvZihhcV9tYWNzZWNfc3RhdF9uYW1lcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjMyOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTMzMC1cXHRcXHRcXHRzdHJ1Y3QgYXFfbWFjc2VjX3R4c2MgKmFxX3R4c2M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzQxLVxcdFxcdFxcdGFxX3R4c2MgPSBcXHUwMDI2bmljLVxcdTAwM2VtYWNzZWNfY2ZnLVxcdTAwM2VhcV90eHNjW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozNDI6XFx0XFx0XFx0Zm9yIChzYSA9IDA7IHNhIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgc2ErKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNDMtXFx0XFx0XFx0XFx0aWYgKCEodGVzdF9iaXQoc2EsIFxcdTAwMjZhcV90eHNjLVxcdTAwM2V0eF9zYV9pZHhfYnVzeSkpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM1My1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jOjM1NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfZXRodG9vbC5jLTM1NS1cXHRcXHRcXHRzdHJ1Y3QgYXFfbWFjc2VjX3J4c2MgKmFxX3J4c2M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9ldGh0b29sLmMtMzYwLVxcdFxcdFxcdGFxX3J4c2MgPSBcXHUwMDI2bmljLVxcdTAwM2VtYWNzZWNfY2ZnLVxcdTAwM2VhcV9yeHNjW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYzozNjE6XFx0XFx0XFx0Zm9yIChzYSA9IDA7IHNhIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgc2ErKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX2V0aHRvb2wuYy0zNjItXFx0XFx0XFx0XFx0aWYgKCEodGVzdF9iaXQoc2EsIFxcdTAwMjZhcV9yeHNjLVxcdTAwM2VyeF9zYV9pZHhfYnVzeSkpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTAtI2luY2x1ZGUgXFxcIm1hY3NlYy9tYWNzZWNfYXBpLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTE6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8xMjhfQklUIDE2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTI6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8xOTJfQklUIDI0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTM6I2RlZmluZSBBUV9NQUNTRUNfS0VZX0xFTl8yNTZfQklUIDMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00OT1zdGF0aWMgaW50IGFxX2dldF90eHNjX2lkeF9mcm9tX3NlY3koc3RydWN0IGFxX21hY3NlY19jZmcgKm1hY3NlY19jZmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo1NzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNTgtXFx0XFx0aWYgKG1hY3NlY19jZmctXFx1MDAzZWFxX3R4c2NbaV0uc3dfc2VjeSA9PSBzZWN5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9NjQ9c3RhdGljIGludCBhcV9nZXRfcnhzY19pZHhfZnJvbV9yeHNjKHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTczLVxcdFxcdGlmIChtYWNzZWNfY2ZnLVxcdTAwM2VhcV9yeHNjW2ldLnN3X3J4c2MgPT0gcnhzYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTk3PXN0YXRpYyB2b2lkIGFxX3JvdGF0ZV9rZXlzKHUzMiAoKmtleSlbOF0sIGNvbnN0IGludCBrZXlfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwNDpcXHRpZiAoa2V5X2xlbiA9PSBBUV9NQUNTRUNfS0VZX0xFTl8xMjhfQklUKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA1LVxcdFxcdCgqa2V5KVswXSA9IHN3YWIzMih0bXBbM10pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA4LVxcdFxcdCgqa2V5KVszXSA9IHN3YWIzMih0bXBbMF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEwOTpcXHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gQVFfTUFDU0VDX0tFWV9MRU5fMTkyX0JJVCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExMC1cXHRcXHQoKmtleSlbMF0gPSBzd2FiMzIodG1wWzVdKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExNS1cXHRcXHQoKmtleSlbNV0gPSBzd2FiMzIodG1wWzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxMTY6XFx0fSBlbHNlIGlmIChrZXlfbGVuID09IEFRX01BQ1NFQ19LRVlfTEVOXzI1Nl9CSVQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMTctXFx0XFx0KCprZXkpWzBdID0gc3dhYjMyKHRtcFs3XSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMzM9c3RhdGljIGludCBhcV9nZXRfbWFjc2VjX2NvbW1vbl9zdGF0cyhzdHJ1Y3QgYXFfaHdfcyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQwOlxcdC8qIE1BQ1NFQyBjb3VudGVycyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0MS1cXHRyZXQgPSBhcV9tc3NfZ2V0X2luZ3Jlc3NfY29tbW9uX2NvdW50ZXJzKGh3LCBcXHUwMDI2aW5ncmVzc19jb3VudGVycyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0zMDE9c3RhdGljIGludCBhcV9tZG9fZGV2X3N0b3Aoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MzA2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zMDctXFx0XFx0aWYgKG5pYy1cXHUwMDNlbWFjc2VjX2NmZy1cXHUwMDNldHhzY19pZHhfYnVzeSBcXHUwMDI2IEJJVChpKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTMxNT1zdGF0aWMgaW50IGFxX3NldF90eHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCBpbnQgdHhzY19pZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjAtXFx0c3dpdGNoIChzZWN5LVxcdTAwM2VrZXlfbGVuKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MzYxOlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTI4X0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0zNjItXFx0XFx0c2NfcmVjLnNha19sZW4gPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2My1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzozNjQ6XFx0Y2FzZSBBUV9NQUNTRUNfS0VZX0xFTl8xOTJfQklUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTM2NS1cXHRcXHRzY19yZWMuc2FrX2xlbiA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMzY2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjM2NzpcXHRjYXNlIEFRX01BQ1NFQ19LRVlfTEVOXzI1Nl9CSVQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMzY4LVxcdFxcdHNjX3JlYy5zYWtfbGVuID0gMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTQ0MD1zdGF0aWMgaW50IGFxX21kb19hZGRfc2VjeShzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTQ1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo0NTI6XFx0c2Nfc2EgPSBzY19zYV9mcm9tX251bV9hbihNQUNTRUNfTlVNX0FOKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy00NTMtXFx0aWYgKHNjX3NhID09IGFxX21hY3NlY19zYV9zY19ub3RfdXNlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTQ1OS1cXHR0eHNjX2lkeCA9IGZmeihjZmctXFx1MDAzZXR4c2NfaWR4X2J1c3kpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjQ2MDpcXHRpZiAodHhzY19pZHggPT0gQVFfTUFDU0VDX01BWF9TQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy00NjEtXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz00OTI9c3RhdGljIGludCBhcV9jbGVhcl90eHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCBpbnQgdHhzY19pZHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy01MDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NTAyOlxcdGZvcl9lYWNoX3NldF9iaXQgKHNhX251bSwgXFx1MDAyNnR4X3NjLVxcdTAwM2V0eF9zYV9pZHhfYnVzeSwgQVFfTUFDU0VDX01BWF9TQSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTUwMy1cXHRcXHRyZXQgPSBhcV9jbGVhcl90eHNhKG5pYywgdHhfc2MsIHNhX251bSwgY2xlYXJfdHlwZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz02NzA9c3RhdGljIGludCBhcV9yeHNjX3ZhbGlkYXRlX2ZyYW1lcyhjb25zdCBlbnVtIG1hY3NlY192YWxpZGF0aW9uX3R5cGUgdmFsaWRhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzItXFx0c3dpdGNoICh2YWxpZGF0ZSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjY3MzpcXHRjYXNlIE1BQ1NFQ19WQUxJREFURV9ESVNBQkxFRDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy02NzQtXFx0XFx0cmV0dXJuIDI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6Njc1OlxcdGNhc2UgTUFDU0VDX1ZBTElEQVRFX0NIRUNLOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTY3Ni1cXHRcXHRyZXR1cm4gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo2Nzc6XFx0Y2FzZSBNQUNTRUNfVkFMSURBVEVfU1RSSUNUOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTY3OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTY4Nj1zdGF0aWMgaW50IGFxX3NldF9yeHNjKHN0cnVjdCBhcV9uaWNfcyAqbmljLCBjb25zdCB1MzIgcnhzY19pZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy03MDAtXFx0cHJlX2NsYXNzX3JlY29yZC5zY2lfbWFzayA9IDB4ZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6NzAxOlxcdC8qIG1hdGNoIGFsbCBNQUNTRUMgZXRoZXJ0eXBlIHBhY2tldHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzo3MDI6XFx0cHJlX2NsYXNzX3JlY29yZC5ldGhfdHlwZSA9IEVUSF9QX01BQ1NFQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy03MDMtXFx0cHJlX2NsYXNzX3JlY29yZC5ldGhfdHlwZV9tYXNrID0gMHgzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9Nzg4PXN0YXRpYyBpbnQgYXFfY2xlYXJfcnhzYyhzdHJ1Y3QgYXFfbmljX3MgKm5pYywgY29uc3QgaW50IHJ4c2NfaWR4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtNzk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjc5NjpcXHRmb3JfZWFjaF9zZXRfYml0IChzYV9udW0sIFxcdTAwMjZyeF9zYy1cXHUwMDNlcnhfc2FfaWR4X2J1c3ksIEFRX01BQ1NFQ19NQVhfU0EpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy03OTctXFx0XFx0cmV0ID0gYXFfY2xlYXJfcnhzYShuaWMsIHJ4X3NjLCBzYV9udW0sIGNsZWFyX3R5cGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9ODU0PXN0YXRpYyBpbnQgYXFfdXBkYXRlX3J4c2Eoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IHVuc2lnbmVkIGludCBzY19pZHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODEtXFx0c3dpdGNoIChzZWN5LVxcdTAwM2VrZXlfbGVuKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODgyOlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTI4X0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODMtXFx0XFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODg1OlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMTkyX0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODYtXFx0XFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODctXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6ODg4OlxcdGNhc2UgQVFfTUFDU0VDX0tFWV9MRU5fMjU2X0JJVDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy04ODktXFx0XFx0c2Ffa2V5X3JlY29yZC5rZXlfbGVuID0gMjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTEwODE9c3RhdGljIGludCBhcV9tZG9fZ2V0X3J4X3NjX3N0YXRzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA5Ny1cXHRhcV9yeHNjID0gXFx1MDAyNmNmZy1cXHUwMDNlYXFfcnhzY1tyeHNjX2lkeF07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTA5ODpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTA5OS1cXHRcXHRpZiAoIXRlc3RfYml0KGksIFxcdTAwMjZhcV9yeHNjLVxcdTAwM2VyeF9zYV9pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMTY3PXN0YXRpYyBpbnQgYXBwbHlfdHhzY19jZmcoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IGludCB0eHNjX2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTExODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTE4MjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTE4My1cXHRcXHR0eF9zYSA9IHJjdV9kZXJlZmVyZW5jZV9iaChzZWN5LVxcdTAwM2V0eF9zYy5zYVtpXSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMTk1PXN0YXRpYyBpbnQgYXBwbHlfcnhzY19jZmcoc3RydWN0IGFxX25pY19zICpuaWMsIGNvbnN0IGludCByeHNjX2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyMDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTIxMDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTIxMS1cXHRcXHRyeF9zYSA9IHJjdV9kZXJlZmVyZW5jZV9iaChhcV9yeHNjLVxcdTAwM2Vzd19yeHNjLVxcdTAwM2VzYVtpXSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xMjc4PXN0YXRpYyBpbnQgYXFfYXBwbHlfbWFjc2VjX2NmZyhzdHJ1Y3QgYXFfbmljX3MgKm5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTI4MzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTI4NC1cXHRcXHRpZiAobmljLVxcdTAwM2VtYWNzZWNfY2ZnLVxcdTAwM2V0eHNjX2lkeF9idXN5IFxcdTAwMjYgQklUKGkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEyOTE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0M7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEyOTItXFx0XFx0aWYgKG5pYy1cXHUwMDNlbWFjc2VjX2NmZy1cXHUwMDNlcnhzY19pZHhfYnVzeSBcXHUwMDI2IEJJVChpKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM9MTMzMz1zdGF0aWMgdm9pZCBhcV9jaGVja190eHNhX2V4cGlyYXRpb24oc3RydWN0IGFxX25pY19zICpuaWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xMzU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjEzNTY6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFRX01BQ1NFQ19NQVhfU0E7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTEzNTctXFx0XFx0aWYgKGVncmVzc19zYV9leHBpcmVkIFxcdTAwMjYgQklUKGkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNDQ4PWludCBhcV9tYWNzZWNfaW5pdChzdHJ1Y3QgYXFfbmljX3MgKm5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQ1ODpcXHRpZiAoIShjYXBzX2xvIFxcdTAwMjYgQklUKENBUFNfTE9fTUFDU0VDKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTQ1OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTQ2NTpcXHRuaWMtXFx1MDAzZW5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfTUFDU0VDO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE0NjYtXFx0bmljLVxcdTAwM2VuZGV2LVxcdTAwM2VtYWNzZWNfb3BzID0gXFx1MDAyNmFxX21hY3NlY19vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNDc4PWludCBhcV9tYWNzZWNfZW5hYmxlKHN0cnVjdCBhcV9uaWNfcyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUyMC1cXHRcXHR0eF9jdGxmX3JlYy5tYXRjaF9tYXNrID0gMHhmOyAvKiBtYXRjaCBmb3IgZXRoX3R5cGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTIxOlxcdFxcdHR4X2N0bGZfcmVjLmFjdGlvbiA9IDA7IC8qIEJ5cGFzcyBNQUNTRUMgbW9kdWxlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE1MjItXFx0XFx0dGJsX2lkeCA9IE5VTVJPV1NfRUdSRVNTQ1RMRlJFQ09SRCAtIG51bV9jdGxfZXRoZXJfdHlwZXMgLSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTUyOC1cXHRcXHRyeF9wcmVjdGxmX3JlYy5tYXRjaF9tYXNrID0gMHhmOyAvKiBtYXRjaCBmb3IgZXRoX3R5cGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTI5OlxcdFxcdHJ4X3ByZWN0bGZfcmVjLmFjdGlvbiA9IDA7IC8qIEJ5cGFzcyBNQUNTRUMgbW9kdWxlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE1MzAtXFx0XFx0dGJsX2lkeCA9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNTU3PWludCBhcV9tYWNzZWNfcnhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTU2Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNTY3OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNTY4LVxcdFxcdGlmICghdGVzdF9iaXQoaSwgXFx1MDAyNmNmZy1cXHUwMDNlcnhzY19pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNTkxPWludCBhcV9tYWNzZWNfdHhfc2FfY250KHN0cnVjdCBhcV9uaWNfcyAqbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjAxOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjAyLVxcdFxcdGlmICghdGVzdF9iaXQoaSwgXFx1MDAyNmNmZy1cXHUwMDNldHhzY19pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYz0xNjExPXN0YXRpYyBpbnQgYXFfbWFjc2VjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgYXFfbmljX3MgKm5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2MjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTYyMjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVFfTUFDU0VDX01BWF9TQzsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYyMy1cXHRcXHRpZiAoIShjZmctXFx1MDAzZXR4c2NfaWR4X2J1c3kgXFx1MDAyNiBCSVQoaSkpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTYzMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjMyOlxcdFxcdGZvciAoYXNzb2NfbnVtID0gMDsgYXNzb2NfbnVtIFxcdTAwM2MgTUFDU0VDX05VTV9BTjsgYXNzb2NfbnVtKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjMzLVxcdFxcdFxcdGlmICghdGVzdF9iaXQoYXNzb2NfbnVtLCBcXHUwMDI2YXFfdHhzYy1cXHUwMDNldHhfc2FfaWR4X2J1c3kpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYzoxNjQzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNjQ0LVxcdFxcdGlmICghKHRlc3RfYml0KGksIFxcdTAwMjZjZmctXFx1MDAzZXJ4c2NfaWR4X2J1c3kpKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE2NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmM6MTY0ODpcXHRcXHRmb3IgKGFzc29jX251bSA9IDA7IGFzc29jX251bSBcXHUwMDNjIE1BQ1NFQ19OVU1fQU47IGFzc29jX251bSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmMtMTY0OS1cXHRcXHRcXHRpZiAoIXRlc3RfYml0KGFzc29jX251bSwgXFx1MDAyNmFxX3J4c2MtXFx1MDAzZXJ4X3NhX2lkeF9idXN5KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jPTE2NjM9dTY0ICphcV9tYWNzZWNfZ2V0X3N0YXRzKHN0cnVjdCBhcV9uaWNfcyAqbmljLCB1NjQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MDc6XFx0Zm9yIChzY19udW0gPSAwOyBzY19udW0gXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBzY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MDgtXFx0XFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcXHUwMDI2Y2ZnLVxcdTAwM2V0eHNjX2lkeF9idXN5KSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MTk6XFx0XFx0Zm9yIChhc3NvY19udW0gPSAwOyBhc3NvY19udW0gXFx1MDAzYyBNQUNTRUNfTlVNX0FOOyBhc3NvY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MjAtXFx0XFx0XFx0aWYgKCF0ZXN0X2JpdChhc3NvY19udW0sIFxcdTAwMjZhcV90eHNjLVxcdTAwM2V0eF9zYV9pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3MzI6XFx0Zm9yIChzY19udW0gPSAwOyBzY19udW0gXFx1MDAzYyBBUV9NQUNTRUNfTUFYX1NDOyBzY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MzMtXFx0XFx0aWYgKCEodGVzdF9iaXQoc2NfbnVtLCBcXHUwMDI2Y2ZnLVxcdTAwM2VyeHNjX2lkeF9idXN5KSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuYy0xNzM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jOjE3Mzg6XFx0XFx0Zm9yIChhc3NvY19udW0gPSAwOyBhc3NvY19udW0gXFx1MDAzYyBNQUNTRUNfTlVNX0FOOyBhc3NvY19udW0rKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5jLTE3MzktXFx0XFx0XFx0aWYgKCF0ZXN0X2JpdChhc3NvY19udW0sIFxcdTAwMjZhcV9yeHNjLVxcdTAwM2VyeF9zYV9pZHhfYnVzeSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjY6I2lmbmRlZiBBUV9NQUNTRUNfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjc6I2RlZmluZSBBUV9NQUNTRUNfSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTE0PXN0cnVjdCBhcV9uaWNfcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxNjojZGVmaW5lIEFRX01BQ1NFQ19NQVhfU0MgMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDoxNzojZGVmaW5lIEFRX01BQ1NFQ19NQVhfU0EgMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTkwPXN0cnVjdCBhcV9tYWNzZWNfdHhzYyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC05My1cXHRjb25zdCBzdHJ1Y3QgbWFjc2VjX3NlY3kgKnN3X3NlY3k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6OTQ6XFx0dTggdHhfc2Ffa2V5W01BQ1NFQ19OVU1fQU5dW01BQ1NFQ19NQVhfS0VZX0xFTl07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtOTUtXFx0c3RydWN0IGFxX21hY3NlY190eF9zY19zdGF0cyBzdGF0cztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaDo5NjpcXHRzdHJ1Y3QgYXFfbWFjc2VjX3R4X3NhX3N0YXRzIHR4X3NhX3N0YXRzW01BQ1NFQ19OVU1fQU5dO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTk3LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaD05OT1zdHJ1Y3QgYXFfbWFjc2VjX3J4c2Mge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmgtMTAzLVxcdGNvbnN0IHN0cnVjdCBtYWNzZWNfcnhfc2MgKnN3X3J4c2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTA0OlxcdHU4IHJ4X3NhX2tleVtNQUNTRUNfTlVNX0FOXVtNQUNTRUNfTUFYX0tFWV9MRU5dO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oOjEwNTpcXHRzdHJ1Y3QgYXFfbWFjc2VjX3J4X3NhX3N0YXRzIHJ4X3NhX3N0YXRzW01BQ1NFQ19OVU1fQU5dO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTEwNi19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg9MTA4PXN0cnVjdCBhcV9tYWNzZWNfY2ZnIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExMS1cXHR1bnNpZ25lZCBsb25nIHR4c2NfaWR4X2J1c3k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTEyOlxcdHN0cnVjdCBhcV9tYWNzZWNfdHhzYyBhcV90eHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExMy1cXHQvKiBJbmdyZXNzIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExNC1cXHR1bnNpZ25lZCBsb25nIHJ4c2NfaWR4X2J1c3k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTE1OlxcdHN0cnVjdCBhcV9tYWNzZWNfcnhzYyBhcV9yeHNjW0FRX01BQ1NFQ19NQVhfU0NdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oLTExNi1cXHQvKiBTdGF0aXN0aWNzIC8gY291bnRlcnMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX21hY3NlYy5oPTEyOT1pbnQgYXFfbWFjc2VjX3R4X3NhX2NudChzdHJ1Y3QgYXFfbmljX3MgKm5pYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9tYWNzZWMuaC0xMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbWFjc2VjLmg6MTMzOiNlbmRpZiAvKiBBUV9NQUNTRUNfSCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM9MTY0PXN0YXRpYyBpbnQgYXFfbmljX3VwZGF0ZV9saW5rX3N0YXR1cyhzdHJ1Y3QgYXFfbmljX3MgKnNlbGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yMTAtXFx0XFx0bmV0aWZfY2Fycmllcl9vbihzZWxmLVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzoyMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yMTItXFx0XFx0YXFfbWFjc2VjX2VuYWJsZShzZWxmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jPTI0Mz1zdGF0aWMgdm9pZCBhcV9uaWNfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzoyNTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0yNTktXFx0YXFfbWFjc2VjX3dvcmsoc2VsZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYz0zMTU9aW50IGFxX25pY19uZGV2X3JlZ2lzdGVyKHN0cnVjdCBhcV9uaWNfcyAqc2VsZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5jLTMyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYzozMjk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQ1NFQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0zMzAtXFx0YXFfbWFjc2VjX2luaXQoc2VsZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuYy0zNzctZXJyX2V4aXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmM6Mzc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmMtMzc5LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9uaWMuaD0xMjc9c3RydWN0IGFxX25pY19zIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX25pYy5oLTE1Ny1cXHRzdHJ1Y3QgbXV0ZXggZndyZXFfbXV0ZXg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmg6MTU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfbmljLmgtMTU5LVxcdHN0cnVjdCBhcV9tYWNzZWNfY2ZnICptYWNzZWNfY2ZnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYz0zNDI9c3RhdGljIHZvaWQgYXFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3BjaV9mdW5jLmMtMzUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3BjaV9mdW5jLmM6MzUxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NQUNTRUMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcGNpX2Z1bmMuYy0zNTItXFx0XFx0YXFfbWFjc2VjX2ZyZWUoc2VsZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmg9NDUxPWVudW0gaHdfYXRsX2Z3MnhfY2Fwc19sbyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzLmgtNDY2LVxcdENBUFNfTE9fU01CVVNfV1JJVEUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlscy5oOjQ2NzpcXHRDQVBTX0xPX01BQ1NFQyAgICAgICAgICAgID0gMTUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlscy5oLTQ2OC1cXHRDQVBTX0xPX1JFU0VSVkVEMSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jOjU5OiNkZWZpbmUgSFdfQVRMX0ZXMlhfQ0FQX01BQ1NFQyAgICAgICAgICAgQklUKENBUFNfTE9fTUFDU0VDKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM9NjY0PXN0YXRpYyBpbnQgYXFfZncyeF9zZW5kX21hY3NlY19yZXEoc3RydWN0IGFxX2h3X3MgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjc3LVxcdGNhcHNfbG8gPSBhcV9mdzJ4X2dldF9saW5rX2NhcGFiaWxpdGllcyhodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njc4OlxcdGlmICghKGNhcHNfbG8gXFx1MDAyNiBCSVQoQ0FQU19MT19NQUNTRUMpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02NzktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jOjY4NzpcXHQvKiBUb2dnbGUgMHgzNjguQ0FQU19MT19NQUNTRUMgYml0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmMtNjg4LVxcdGxvd19yZXEgPSBhcV9od19yZWFkX3JlZyhodywgSFdfQVRMX0ZXMlhfTVBJX0NPTlRST0xfQUREUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvaHdfYXRsL2h3X2F0bF91dGlsc19mdzJ4LmM6Njg5OlxcdGxvd19yZXEgXj0gSFdfQVRMX0ZXMlhfQ0FQX01BQ1NFQztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02OTAtXFx0YXFfaHdfd3JpdGVfcmVnKGh3LCBIV19BVExfRlcyWF9NUElfQ09OVFJPTF9BRERSLCBsb3dfcmVxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2h3X2F0bC9od19hdGxfdXRpbHNfZncyeC5jLTY5My1cXHRlcnIgPSByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljKGFxX2Z3Mnhfc3RhdGVfZ2V0LCBodywgbG93X3N0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYzo2OTQ6XFx0XFx0bG93X3JlcSAhPSAobG93X3N0YXR1cyBcXHUwMDI2IEJJVChDQVBTX0xPX01BQ1NFQykpLCAxVSwgMTAwMDBVKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9od19hdGwvaHdfYXRsX3V0aWxzX2Z3MnguYy02OTUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmM9NDk9c3RhdGljIGludCBhcV9tc3NfbWRpb193cml0ZShzdHJ1Y3QgYXFfaHdfcyAqaHcsIHUxNiBtbWQsIHUxNiBhZGRyLCB1MTYgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmMtNTUtLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jOjU2OiAqICAgICAgICAgICAgICAgICAgICAgICAgICBNQUNTRUMgY29uZmlnIGFuZCBzdGF0dXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5jLTU3LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDo2OiNpZm5kZWYgX19NQUNTRUNfQVBJX0hfX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfYXBpLmg6NzojZGVmaW5lIF9fTUFDU0VDX0FQSV9IX19cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX2FwaS5oPTMyMD1pbnQgYXFfbXNzX3NldF9lZ3Jlc3Nfc2FfdGhyZXNob2xkX2V4cGlyZWQoc3RydWN0IGFxX2h3X3MgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaC0zMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19hcGkuaDozMjM6I2VuZGlmIC8qIF9fTUFDU0VDX0FQSV9IX18gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0LmgtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oOjY6I2lmbmRlZiBfTUFDU0VDX1NUUlVDVF9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL21hY3NlYy9tYWNzZWNfc3RydWN0Lmg6NzojZGVmaW5lIF9NQUNTRUNfU1RSVUNUX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC04LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaD00NT1zdHJ1Y3QgYXFfbXNzX2VncmVzc19jbGFzc19yZWNvcmQge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC0xNDUtXFx0ICogIE5vdGU6IElmIHRoaXMgZmllbGQgaXMgbm90IDAsIHRoaXMgbWVhbnMgdGhlIGlucHV0IHBhY2tldCdzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaDoxNDY6XFx0ICogIFNFQ1RBRyBpcyBleHBsaWNpdGx5IHRhZ2dlZCBhbmQgTUFDU0VDIG1vZHVsZSB3aWxsIG9ubHkgdXBkYXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaC0xNDctXFx0ICogIHRoZSBNU0RVLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvbWFjc2VjL21hY3NlY19zdHJ1Y3QuaD0zNTM9c3RydWN0IGFxX21zc19pbmdyZXNzX3ByZWNsYXNzX3JlY29yZCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTQ2Mi1cXHQgKiAgMTogUHJvY2VzcyBidXQga2VlcCBTRUNUQUc6IEZvcndhcmQgdG8gbmV4dCB0d28gbW9kdWxlcyBmb3JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oOjQ2MzpcXHQgKiAgICAgODAyLjFBRSBkZWNyeXB0aW9uIGJ1dCBrZWVwIHRoZSBNQUNTRUMgaGVhZGVyIHdpdGggYWRkZWQgZXJyb3JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9tYWNzZWMvbWFjc2VjX3N0cnVjdC5oLTQ2NC1cXHQgKiAgICAgY29kZSBpbmZvcm1hdGlvbi4gSUNWIHdpbGwgYmUgc3RyaXBwZWQgZm9yIGFsbCBjb250cm9sIHBhY2tldHMuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS91bmltYWMuaC02MC0jZGVmaW5lIFVNQUNfUlhfSVBHX0lOVlxcdFxcdFxcdDB4MDc4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdW5pbWFjLmg6NjE6I2RlZmluZSBVTUFDX01BQ1NFQ19QUk9HX1RYX0NSQ1xcdFxcdDB4MzEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdW5pbWFjLmg6NjI6I2RlZmluZSBVTUFDX01BQ1NFQ19DVFJMXFx0XFx0MHgzMTRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS91bmltYWMuaC02My0jZGVmaW5lIFVNQUNfUEFVU0VfQ1RSTFxcdFxcdFxcdDB4MzMwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLmg9MzA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGRwYWEyX2ZhZWFkICpkcGFhMl9nZXRfZmFlYWQodm9pZCAqYnVmX2FkZHIsIGJvb2wgc3dhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oLTMxNS0jZGVmaW5lIERQQUEyX0ZBU19ESVNDXFx0XFx0XFx0MHg4MDAwMDAwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguaDozMTY6LyogTUFDU0VDIGZyYW1lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5oLTMxNy0jZGVmaW5lIERQQUEyX0ZBU19NU1xcdFxcdFxcdDB4NDAwMDAwMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg9NTY9c3RydWN0IGRwa2dfbWFzayB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oLTM0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oOjM0ODovKiBNQUNTRUMgZmllbGRzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaDozNDk6I2RlZmluZSBOSF9GTERfTUFDU0VDX1NFQ1RBR1xcdFxcdFxcdEJJVCgwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6MzUwOiNkZWZpbmUgTkhfRkxEX01BQ1NFQ19BTExfRklFTERTXFx0XFx0KEJJVCgxKSAtIDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2Rwa2cuaC0zNTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oPTM1Nj1lbnVtIG5ldF9wcm90IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmgtMzg0LVxcdE5FVF9QUk9UX1VEUF9FTkNfRVNQLCAvKiBSRkMgMzk0OCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGtnLmg6Mzg1OlxcdE5FVF9QUk9UX01BQ1NFQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBrZy5oLTM4Ni1cXHRORVRfUFJPVF9HUkUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTUyLSNkZWZpbmUgSE5BRTNfREVWX0lEXzI1R0VfUkRNQVxcdFxcdFxcdDB4QTIyMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6NTM6I2RlZmluZSBITkFFM19ERVZfSURfMjVHRV9SRE1BX01BQ1NFQ1xcdFxcdDB4QTIyM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtNTQtI2RlZmluZSBITkFFM19ERVZfSURfNTBHRV9SRE1BXFx0XFx0XFx0MHhBMjI0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaDo1NTojZGVmaW5lIEhOQUUzX0RFVl9JRF81MEdFX1JETUFfTUFDU0VDXFx0XFx0MHhBMjI1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaDo1NjojZGVmaW5lIEhOQUUzX0RFVl9JRF8xMDBHX1JETUFfTUFDU0VDXFx0XFx0MHhBMjI2XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaC01Ny0jZGVmaW5lIEhOQUUzX0RFVl9JRF8yMDBHX1JETUFcXHRcXHRcXHQweEEyMjhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBobnMzX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTk4LVxcdH0sIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzo5OTpcXHRcXHRQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0xMDAtXFx0XFx0LmRyaXZlcl9kYXRhID0gSE5BRTNfREVWX1NVUFBPUlRfUk9DRV9EQ0JfQklUUyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwNC1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MTA1OlxcdFxcdFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUMpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwNi1cXHRcXHQuZHJpdmVyX2RhdGEgPSBITkFFM19ERVZfU1VQUE9SVF9ST0NFX0RDQl9CSVRTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwNy1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MTA4OlxcdFxcdFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUMpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTEwOS1cXHRcXHQuZHJpdmVyX2RhdGEgPSBITkFFM19ERVZfU1VQUE9SVF9ST0NFX0RDQl9CSVRTLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzEwMT1ib29sIGhuczNfaXNfcGh5c19mdW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzEwOC1cXHRjYXNlIEhOQUUzX0RFVl9JRF8yNUdFX1JETUE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzEwOTpcXHRjYXNlIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxMTAtXFx0Y2FzZSBITkFFM19ERVZfSURfNTBHRV9SRE1BOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxMTE6XFx0Y2FzZSBITkFFM19ERVZfSURfNTBHRV9SRE1BX01BQ1NFQzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTEyOlxcdGNhc2UgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUM6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzExMy1cXHRjYXNlIEhOQUUzX0RFVl9JRF8yMDBHX1JETUE6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuaD0xNz1lbnVtIGhuczNfbmljX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5oLTE2MS0jZGVmaW5lIEhOUzNfVFhEX09WTEFOX0JcXHRcXHRcXHQyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0Lmg6MTYyOiNkZWZpbmUgSE5TM19UWERfTUFDU0VDX0JcXHRcXHRcXHQzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmgtMTYzLSNkZWZpbmUgSE5TM19UWERfVFVOVFlQRV9TXFx0XFx0XFx0NFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWVfYWxnb19wY2lfdGJsW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTc0LVxcdHsgUENJX1ZERVZJQ0UoSFVBV0VJLCBITkFFM19ERVZfSURfMjVHRV9SRE1BKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6NzU6XFx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF8yNUdFX1JETUFfTUFDU0VDKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtNzYtXFx0eyBQQ0lfVkRFVklDRShIVUFXRUksIEhOQUUzX0RFVl9JRF81MEdFX1JETUEpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo3NzpcXHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzUwR0VfUkRNQV9NQUNTRUMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzo3ODpcXHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzEwMEdfUkRNQV9NQUNTRUMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy03OS1cXHR7IFBDSV9WREVWSUNFKEhVQVdFSSwgSE5BRTNfREVWX0lEXzIwMEdfUkRNQSkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNS1cXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNjpcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNy1cXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQwLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQxOlxcdGRlcGVuZHMgb24gTUFDU0VDIHx8ICFNQUNTRUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaD01NzI9c3RydWN0IGdldF9od19jYXBfcnNwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaC01NzYtXFx0dTggbnBjX2hhc2hfZXh0cmFjdDtcXHQvKiBJcyBoYXNoIGV4dHJhY3Qgc3VwcG9ydGVkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oOjU3NzojZGVmaW5lIEhXX0NBUF9NQUNTRUNcXHRcXHRCSVRfVUxMKDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oLTU3OC1cXHR1NjQgaHdfY2FwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTIxMTM9aW50IHJ2dV9tYm94X2hhbmRsZXJfZ2V0X2h3X2NhcChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0yMTIyLVxcdGlmIChydnUtXFx1MDAzZW1jc19ibGtfY250KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjIxMjM6XFx0XFx0cnNwLVxcdTAwM2Vod19jYXBzID0gSFdfQ0FQX01BQ1NFQztcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MjMuNzkyNjczMjM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEwMDI1NTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIENPTkZJR19NQUNTRUMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTUFDU0VDYC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIEtjb25maWcgZmlsZS4gSSdsbCB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxOCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCwgaW1wb3J0YW50bHksIHdoZXJlIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIG90aGVyIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9ucywgbWF5YmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCBvcHRpb25zLCBvciBldmVuIGtlcm5lbCBmZWF0dXJlIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgTUFDU0VDYCBjYW4gYmUgY29uc2lkZXJlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgaW4gcGxhY2UgZm9yIHRoZSBgTUFDU0VDYCBvcHRpb24gdG8gZXZlbiBiZSBhdmFpbGFibGUsIGxldCBhbG9uZSBhY3R1YWxseSBmdW5jdGlvbmFsLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGVmZmljaWVudCBrZXJuZWwgY29uZmlndXJhdGlvbiB3b3JrLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGl2ZWx5IGNvbXBsZXggbGlrZSBNQUNzZWMuIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyBlbHNlIGlzIGdvaW5nIHRvIHRyaXAgbWUgdXAuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjI1Ljg5MjkzMDk1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMzE2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYW10LlxcbiAzMTc6XFx0XFxuIDMxODpcXHRjb25maWcgTUFDU0VDXFxuIDMxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiSUVFRSA4MDIuMUFFIE1BQy1sZXZlbCBlbmNyeXB0aW9uIChNQUNzZWMpXFxcIlxcbiAzMjA6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAzMjE6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gMzIyOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuIDMyMzpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDMyNDpcXHRcXHRoZWxwXFxuIDMyNTpcXHRcXHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXFxuIDMyNjpcXHRcXG4gMzI3OlxcdGNvbmZpZyBORVRDT05TT0xFXFxuIDMyODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4gMzI5OlxcdFxcdGRlcGVuZHMgb24gUFJJTlRLXFxuIDMzMDpcXHRcXHRoZWxwXFxuIDMzMTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXFxuIDMzMjpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuIDMzNTpcXHRcXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuIDMzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlMgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAzMzc6XFx0XFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4gMzM4OlxcdFxcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxcbiAzMzk6XFx0XFx0aGVscFxcbiAzNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxcbiAzNDE6XFx0XFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxcbiAzNDI6XFx0XFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxcbiAzNDM6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODoyNS44OTMwMTI2NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODYzMTIxNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDc2VjIERyaXZlcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBjaGFuZ2VzLCBhbmQgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBNQUNzZWMgaW1wbGVtZW50YXRpb24gcmVzaWRlcywgc28gYW55IHNpZ25pZmljYW50IGFsdGVyYXRpb25zIGFyZSBib3VuZCB0byBiZSBjZW50ZXJlZCB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIG9yIGJ1ZyBmaXggdGhpcyBjb21taXQgYWRkcmVzc2VzLiBUaGUgZmlsZSdzIHN0cnVjdHVyZSBzaG91bGQgZ3VpZGUgbWUuIEknbGwgbGlrZWx5IGJlZ2luIGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIHRvcCwgbG9va2luZyBmb3IgaW5jbHVkZSBmaWxlIGNoYW5nZXMsIG5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIG9yIGdsb2JhbCB2YXJpYWJsZSB1cGRhdGVzLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBuZXcgd2l0aGluIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbi4gVGhlbiBJIHdpbGwgc3RhcnQgZ29pbmcgdGhyb3VnaCBzcGVjaWZpYyBmdW5jdGlvbnMgd2hpY2ggaGFzIGJlZW4gbW9kaWZpZWQuIFRoZW4gSSB3aWxsIGNvbXBhcmUgdGhlIGNoYW5nZXMgb24gdGhlIGNvZGUsIGxpbmUgYnkgbGluZS4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjI4Ljc1NjEzNjAyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTQwOlxcdFxcdFxcdGlmIChzZWN5LVxcdTAwM2V4cG4gXFx1MDAyNlxcdTAwMjZcXG4zOTQxOlxcdFxcdFxcdCAgICByZXBsYXlfd2luZG93IFxcdTAwM2UgTUFDU0VDX1hQTl9NQVhfUkVQTEFZX1dJTkRPVylcXG4zOTQyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5NDM6XFx0XFx0XFx0V1JJVEVfT05DRShzZWN5LVxcdTAwM2VyZXBsYXlfd2luZG93LCByZXBsYXlfd2luZG93KTtcXG4zOTQ0OlxcdFxcdH1cXG4zOTQ1OlxcdFxcbjM5NDY6XFx0XFx0cmV0dXJuIDA7XFxuMzk0NzpcXHR9XFxuMzk0ODpcXHRcXG4zOTQ5OlxcdC8qIEJvdGggYSBjaGFuZ2Ugb2YgdGhlIG9mZmxvYWQgc3RhdGUgKG1kb19hZGRfc2VjeSgpL21kb19kZWxfc2VjeSgpKSBhbmRcXG4zOTUwOlxcdCAqIGFueSByZXF1ZXN0IGFnYWluc3QgYW4gYWxyZWFkeSBvZmZsb2FkZWQgZGV2aWNlIChtZG9fdXBkX3NlY3koKSkgcmVhY2hcXG4zOTUxOlxcdCAqIHRoZSBkcml2ZXIgb2YgcmVhbF9kZXYsIHdoaWNoIG1heSBsaXZlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlXFxuMzk1MjpcXHQgKiBmcm9tIHRoZSBtYWNzZWMgZGV2aWNlLiBSZXF1aXJlIENBUF9ORVRfQURNSU4gb3ZlciByZWFsX2RldidzIG5hbWVzcGFjZVxcbjM5NTM6XFx0ICogZm9yIHRob3NlOyBsb2NhbCBhdHRyaWJ1dGVzIG9mIGEgbm9uLW9mZmxvYWRlZCBkZXZpY2UgYXJlIHVuYWZmZWN0ZWQuXFxuMzk1NDpcXHQgKi9cXG4zOTU1OlxcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4zOTU2OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMzk1NzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjM5NTg6XFx0e1xcbjM5NTk6XFx0XFx0c3RydWN0IG1hY3NlY19kZXYgKm1hY3NlYyA9IG1hY3NlY19wcml2KGRldik7XFxuMzk2MDpcXHRcXHRib29sIHJlYWNoZXNfcmVhbF9kZXY7XFxuMzk2MTpcXHRcXG4zOTYyOlxcdFxcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XFxuMzk2MzpcXHRcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcXHUwMDI2XFx1MDAyNlxcbjM5NjQ6XFx0XFx0ICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSkgIT0gbWFjc2VjLVxcdTAwM2VvZmZsb2FkKVxcbjM5NjU6XFx0XFx0XFx0cmVhY2hlc19yZWFsX2RldiA9IHRydWU7XFxuMzk2NjpcXHRcXG4zOTY3OlxcdFxcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxcbjM5Njg6XFx0XFx0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cXHUwMDNlcmVhbF9kZXYpKSlcXG4zOTY5OlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NzA6XFx0XFxuMzk3MTpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuMzk3MjpcXHRcXHRcXHQgICAgICAgXFxcIkNoYW5naW5nIGEgTUFDc2VjIGRldmljZSB3aG9zZSByZWFsIGRldmljZSBpcyBpbiBhbm90aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHJlcXVpcmVzIENBUF9ORVRfQURNSU4gaW4gdGhhdCBuYW1lc3BhY2VcXFwiKTtcXG4zOTczOlxcdFxcdHJldHVybiAtRVBFUk07XFxuMzk3NDpcXHR9XFxuMzk3NTpcXHRcXG4zOTc2OlxcdHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4zOTc3OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjM5Nzg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzk3OTpcXHR7XFxuMzk4MDpcXHRcXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcXG4zOTgxOlxcdFxcdGJvb2wgbWFjc2VjX29mZmxvYWRfc3RhdGVfY2hhbmdlID0gZmFsc2U7XFxuMzk4MjpcXHRcXHRlbnVtIG1hY3NlY19vZmZsb2FkIG9mZmxvYWQ7XFxuMzk4MzpcXHRcXHRzdHJ1Y3QgbWFjc2VjX3R4X3NjIHR4X3NjO1xcbjM5ODQ6XFx0XFx0c3RydWN0IG1hY3NlY19zZWN5IHNlY3k7XFxuMzk4NTpcXHRcXHRpbnQgcmV0O1xcbjM5ODY6XFx0XFxuMzk4NzpcXHRcXHRpZiAoIWRhdGEpXFxuMzk4ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zOTg5OlxcdFxcbjM5OTA6XFx0XFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xcbjM5OTE6XFx0XFx0aWYgKHJldClcXG4zOTkyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzk5MzpcXHRcXG4zOTk0OlxcdFxcdGlmIChkYXRhW0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURV0gfHxcXG4zOTk1OlxcdFxcdCAgICBkYXRhW0lGTEFfTUFDU0VDX0lDVl9MRU5dIHx8XFxuMzk5NjpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19TQ0ldIHx8XFxuMzk5NzpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19QT1JUXSlcXG4zOTk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5OTk6XFx0XFxuNDAwMDpcXHRcXHQvKiBLZWVwIGEgY29weSBvZiB1bm1vZGlmaWVkIHNlY3kgYW5kIHR4X3NjLCBpbiBjYXNlIHRoZSBvZmZsb2FkXFxuNDAwMTpcXHRcXHQgKiBwcm9wYWdhdGlvbiBmYWlscywgdG8gcmV2ZXJ0IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbi5cXG40MDAyOlxcdFxcdCAqL1xcbjQwMDM6XFx0XFx0bWVtY3B5KFxcdTAwMjZzZWN5LCBcXHUwMDI2bWFjc2VjLVxcdTAwM2VzZWN5LCBzaXplb2Yoc2VjeSkpO1xcbjQwMDQ6XFx0XFx0bWVtY3B5KFxcdTAwMjZ0eF9zYywgXFx1MDAyNm1hY3NlYy1cXHUwMDNlc2VjeS50eF9zYywgc2l6ZW9mKHR4X3NjKSk7XFxuNDAwNTpcXHRcXG40MDA2OlxcdFxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihkZXYsIGRhdGEpO1xcbjQwMDc6XFx0XFx0aWYgKHJldClcXG40MDA4OlxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG40MDA5OlxcdFxcbjQwMTA6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pIHtcXG40MDExOlxcdFxcdFxcdG9mZmxvYWQgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xcbjQwMTI6XFx0XFx0XFx0aWYgKG1hY3NlYy1cXHUwMDNlb2ZmbG9hZCAhPSBvZmZsb2FkKSB7XFxuNDAxMzpcXHRcXHRcXHRcXHRtYWNzZWNfb2ZmbG9hZF9zdGF0ZV9jaGFuZ2UgPSB0cnVlO1xcbjQwMTQ6XFx0XFx0XFx0XFx0cmV0ID0gbWFjc2VjX3VwZGF0ZV9vZmZsb2FkKGRldiwgb2ZmbG9hZCwgZXh0YWNrKTtcXG40MDE1OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuNDAxNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNDAxNzpcXHRcXHRcXHR9XFxuNDAxODpcXHRcXHR9XFxuNDAxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MjguNzU2MzMyMzA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAxMjM0NjUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgR2l0IExvZzogQ29udGV4dCBpcyBLZXkqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgb2YgdGhpcyBwYXRjaCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgZ2l0IGxvZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcy4gVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBhbmQgb2Z0ZW4gbGVhdmVzIG91dCBjcnVjaWFsIGRldGFpbHMuIEknbSBob3BpbmcgdGhlIGNvbW1pdCBoaXN0b3J5IHdpbGwgaWxsdW1pbmF0ZSB0aGUgYXV0aG9yJ3MgcmF0aW9uYWxlLCBtYXliZSBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBwcm9ibGVtIHRoZXkgd2VyZSB0cnlpbmcgdG8gc29sdmUsIG9yIGFueSBkZXNpZ24gZGVjaXNpb25zIHRoYXQgd2VyZSBpbXBsaWNpdCBidXQgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgY29kZSBpdHNlbGYuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gcHJldmlvdXMgY29tbWl0cyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgd2hpY2ggY291bGQgc2hvdyB0aGUgZXZvbHV0aW9uIG9mIHRoZSBmZWF0dXJlIG9yIGJ1ZyBmaXguIERpZCB0aGV5IGxpbmsgYW4gaXNzdWU/IERpZCB0aGV5IHJlZmVyZW5jZSByZWxhdGVkIGRpc2N1c3Npb25zIG9yIGRlc2lnbiBkb2NzPyBBbGwgb2YgdGhpcyBoZWxwcyBtZSB0byBxdWlja2x5IGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIHdpbGwgYWxsb3cgbWUgdG8gcHJvdmlkZSBpbmZvcm1lZCBmZWVkYmFjay4gVW5kZXJzdGFuZGluZyB0aGUgYXV0aG9yJ3MgaW50ZW50IHJlZHVjZXMgd2FzdGVkIHRpbWUgYW5kIG1lbnRhbCBlZmZvcnQsIGFuZCBoZWxwcyBwcmV2ZW50IGFzc3VtcHRpb25zIHRoYXQgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IGNvbmNsdXNpb25zIG9yIG1pc2RpcmVjdGVkIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NzUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjMxLjc2ODY4MzI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2NzgwOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21hY3NlYy5jPTM4NzE9c3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGlua19jb21tb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NTQtICovXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk1NTpzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzk1Ni1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mzk3Nj1zdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zOTg5LVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjM5OTA6XFx0cmV0ID0gbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoZGV2LCBkYXRhLCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5OTEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MzMuNjg1NDgxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE5NzI1Mzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1hY3NlYyBVc2FnZSBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE1BQ3NlYyBpcyBiZWluZyB1c2VkIGFuZCB0ZXN0ZWQgd2l0aGluIHRoZSBzeXprYWxsZXIgZnJhbWV3b3JrLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gcmVjZW50IGNvbW1pdHMgb3IgcmVsYXRlZCBhY3Rpdml0eSDigJMgZXNzZW50aWFsbHksIHRoZSBicmVhZGNydW1icyB0aGF0IG1pZ2h0IGxlYWQgbWUgdG8gcmVsZXZhbnQgZXhhbXBsZXMuIEknbGwgc2VhcmNoIGZvciBob3cgTUFDc2VjIGlzIGluc3RydW1lbnRlZCBhbmQgaG93IHRoZXkncmUgdGVzdGVkIHdpdGhpbiBzeXprYWxsZXIncyBlY29zeXN0ZW0uXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWZpYywgdGFpbG9yZWQgTUFDc2VjIGRlc2NyaXB0aW9ucywgb3IgZXZlbiBtb3JlIHRlbGxpbmdseSwgaWYgdGhlcmUgYXJlIG5ldGxpbmsgcnRubCBsaW5rIG9wZXJhdGlvbnMgaW1wbGVtZW50ZWQgZm9yIGl0LiBBaGEhIFdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSd2ZSBnb3Qgc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgYG1hY3NlY19jaGFuZ2VsaW5rYCBiZWZvcmUsIGFuZCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBDb3VsZCBpdCBiZT8gWWVzISBUaGF0J3MgaXQhIGBtYWNzZWNfY2hhbmdlbGlua2AgaXMgdGhlIGAuY2hhbmdlbGlua2AgY2FsbGJhY2sgd2l0aGluIHRoZSBgcnRubF9saW5rX29wc2Agc3RydWN0dXJlLiBUaGF0J3MgYSBzdHJvbmcgbGVhZCFcblxuTm93LCBsZXQncyBpbW1lZGlhdGVseSBjb25maXJtIHRoaXMgYW5kIGV4cGxvcmUgYG1hY3NlY19saW5rX29wc2AuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBNQUNzZWMgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGxpbmsgb3BlcmF0aW9ucyB3aWxsIHRlbGwgbWUgaG93IHN5emthbGxlciBpcyBpbnRlcmFjdGluZyB3aXRoIE1BQ3NlYyBhdCBhIGxvdyBsZXZlbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTc5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6MzcuODgyNzM3OTI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAxNTg0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY3NlY19saW5rX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuYz00NDE5PXN0YXRpYyBpbnQgbWFjc2VjX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDQ2OS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDcwOnN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDcxLVxcdC5raW5kXFx0XFx0PSBcXFwibWFjc2VjXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQ1NDg9c3RhdGljIGludCBfX2luaXQgbWFjc2VjX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NjAtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDU2MTpcXHRlcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoXFx1MDAyNm1hY3NlY19saW5rX29wcyk7XFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU2Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDU3MS1lcnJfcnRubDpcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NTcyOlxcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFxcdTAwMjZtYWNzZWNfbGlua19vcHMpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1NzMtZXJyX25vdGlmaWVyOlxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9NDU4ND1zdGF0aWMgdm9pZCBfX2V4aXQgbWFjc2VjX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ1ODYtXFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2bWFjc2VjX2ZhbSk7XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDU4NzpcXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcXHUwMDI2bWFjc2VjX2xpbmtfb3BzKTtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NTg4LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZtYWNzZWNfbm90aWZpZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODozOS41ODQzMjcxOThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI1OTQyODUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1BQ3NlYyBJbnRlcmZhY2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtYWNzZWNgLCB3aGljaCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIHNlZW1zIHRvIGJlIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSBpbXBsZW1lbnRpbmcgSUVFRSA4MDIuMUFFIE1BQ3NlYy4gSXQncyBlc3NlbnRpYWxseSBsYXllcmVkIG9uIHRvcCBvZiBhIHBoeXNpY2FsIG9yIHZpcnR1YWwgZGV2aWNlLCB3ZSdsbCBjYWxsIGl0IGByZWFsX2RldmAgZm9yIG5vdy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoaXMgaW50ZXJmYWNlIGlzIGJlaW5nIG1hbmFnZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgbWVjaGFuaXNtIGlzIGxpa2VseSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgcnRuZXRsaW5rYC4gSSdtIHRoaW5raW5nIG9mIHRoZSBzdGFuZGFyZCBvcGVyYXRpb25zIGhlcmU6IGNyZWF0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcgbGluayBjb25maWd1cmF0aW9ucyDigJMgYFJUTV9ORVdMSU5LYCwgYFJUTV9ERUxMSU5LYCwgYFJUTV9TRVRMSU5LYCBvciBwb3RlbnRpYWxseSBgbWFjc2VjX2NoYW5nZWxpbmtgIGlmIHRoZXJlJ3MgYSBzcGVjaWZpYyBjaGFuZ2UtaGFuZGxpbmcgbWVjaGFuaXNtLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgbWFjc2VjX2xpbmtfb3BzYCBkZWZpbml0aW9uIGluIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgbWVzc2FnZXMgYXJlIHRyYW5zbGF0ZWQgaW50byBhY3Rpb25zIG9uIHRoZSBgbWFjc2VjYCBpbnRlcmZhY2UgYW5kIHRoZSB1bmRlcmx5aW5nIGByZWFsX2RldmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjQzLjg0Mzc1ODUxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ2NTpcXHRcXG40NDY2OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG40NDY3OlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuNDQ2ODpcXHR9XFxuNDQ2OTpcXHRcXG40NDcwOlxcdHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG40NDcxOlxcdFxcdC5raW5kXFx0XFx0PSBcXFwibWFjc2VjXFxcIixcXG40NDcyOlxcdFxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgbWFjc2VjX2RldiksXFxuNDQ3MzpcXHRcXHQubWF4dHlwZVxcdD0gSUZMQV9NQUNTRUNfTUFYLFxcbjQ0NzQ6XFx0XFx0LnBvbGljeVxcdFxcdD0gbWFjc2VjX3J0bmxfcG9saWN5LFxcbjQ0NzU6XFx0XFx0LnNldHVwXFx0XFx0PSBtYWNzZWNfc2V0dXAsXFxuNDQ3NjpcXHRcXHQudmFsaWRhdGVcXHQ9IG1hY3NlY192YWxpZGF0ZV9hdHRyLFxcbjQ0Nzc6XFx0XFx0Lm5ld2xpbmtcXHQ9IG1hY3NlY19uZXdsaW5rLFxcbjQ0Nzg6XFx0XFx0LmNoYW5nZWxpbmtcXHQ9IG1hY3NlY19jaGFuZ2VsaW5rLFxcbjQ0Nzk6XFx0XFx0LmRlbGxpbmtcXHQ9IG1hY3NlY19kZWxsaW5rLFxcbjQ0ODA6XFx0XFx0LmdldF9zaXplXFx0PSBtYWNzZWNfZ2V0X3NpemUsXFxuNDQ4MTpcXHRcXHQuZmlsbF9pbmZvXFx0PSBtYWNzZWNfZmlsbF9pbmZvLFxcbjQ0ODI6XFx0XFx0LmdldF9saW5rX25ldFxcdD0gbWFjc2VjX2dldF9saW5rX25ldCxcXG40NDgzOlxcdH07XFxuNDQ4NDpcXHRcXG40NDg1OlxcdHN0YXRpYyBib29sIGlzX21hY3NlY19tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG40NDg2OlxcdHtcXG40NDg3OlxcdFxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBtYWNzZWNfaGFuZGxlX2ZyYW1lO1xcbjQ0ODg6XFx0fVxcbjQ0ODk6XFx0XFxuNDQ5MDpcXHRzdGF0aWMgaW50IG1hY3NlY19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbjQ0OTE6XFx0XFx0XFx0XFx0IHZvaWQgKnB0cilcXG40NDkyOlxcdHtcXG40NDkzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbjQ0OTQ6XFx0XFx0c3RydWN0IG1hY3NlY19yeGhfZGF0YSAqcnhkO1xcbjQ0OTU6XFx0XFx0c3RydWN0IG1hY3NlY19kZXYgKm0sICpuO1xcbjQ0OTY6XFx0XFx0TElTVF9IRUFEKGhlYWQpO1xcbjQ0OTc6XFx0XFxuNDQ5ODpcXHRcXHRpZiAoIWlzX21hY3NlY19tYXN0ZXIocmVhbF9kZXYpKVxcbjQ0OTk6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0ODo0My44NDQwNjgyMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcxMzQ5MzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipNeSBNQUNzZWMgQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gYG1hY3NlY2AsIGFzIGV4cGVjdGVkLCBpcyBmdWxseSBpbnRlZ3JhdGVkIHdpdGggYHJ0bmV0bGlua2AuIEkgY2FuIG1hbmFnZSBpdCwgY3JlYXRlIG5ldyBpbnRlcmZhY2VzLCBhbmQgbW9kaWZ5IGV4aXN0aW5nIG9uZXMganVzdCBsaWtlIGFueSBvdGhlciBuZXR3b3JrIGludGVyZmFjZSB1c2luZyBgUlRNX05FV0xJTktgICh3aXRoIHRoZSBjcnVjaWFsIGBJRkxBX0lORk9fS0lORD1cIm1hY3NlY1wiYCBhdHRyaWJ1dGUpLCBgUlRNX1NFVExJTktgLCBvciBldmVuIHRocm91Z2ggYSBjaGFuZ2VsaW5rIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gRXhjZWxsZW50LCB0aGF0J3MgdGhlIHN0YW5kYXJkIHdheSB0byBkbyB0aGluZ3MsIGFuZCBpdCBtZWFucyBJIGNhbiBwcm9ncmFtbWF0aWNhbGx5IGNvbnRyb2wgdGhlc2UgTUFDc2VjIGludGVyZmFjZXMuIEFuZCB0aGUgYmVzdCBwYXJ0PyBJdCdzIGRldmljZS1hZ25vc3RpYywgd29ya3Mgb24gKmV2ZXJ5dGhpbmcqIOKAkyBkdW1teSBpbnRlcmZhY2VzLCBgdmV0aGAgcGFpcnMsIGV2ZW4gbG9vcGJhY2suIFRoaXMgbWFrZXMgaXQgaW5jcmVkaWJseSBmbGV4aWJsZSBmb3IgYSB3aG9sZSByYW5nZSBvZiB1c2UtY2FzZXMuXG5cbk5vdywgaG9sZCBvbi4gTGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIG9uIHRoZSAqdW5kZXJseWluZyogZGV2aWNlLiBUaW1lIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYG1hY3NlY19uZXdsaW5rYCBjb2RlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgcmVhbF9kZXZgIHBhcmFtZXRlciBhbmQgd2hhdCBraW5kIG9mIGRldmljZXMgYXJlIGFjdHVhbGx5ICphbGxvd2VkKiBhcyBpdHMgcGFyZW50LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB2ZXJzYXRpbGUsIG9yIGxpbWl0ZWQsIHRoaXMgc2V0dXAgcmVhbGx5IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDYuNTU3NTY0MTc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQxNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNzZWNfbmV3bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuYz00MTk1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbWFjc2VjX25ldGRldl9hZGRyX2xvY2tfa2V5O1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQxOTYtXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6NDE5NzpzdGF0aWMgaW50IG1hY3NlY19uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtNDE5OC1cXHRcXHRcXHQgIHN0cnVjdCBydG5sX25ld2xpbmtfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00NDcwPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWNzZWNfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0NzYtXFx0LnZhbGlkYXRlXFx0PSBtYWNzZWNfdmFsaWRhdGVfYXR0cixcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDc3OlxcdC5uZXdsaW5rXFx0PSBtYWNzZWNfbmV3bGluayxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDc4LVxcdC5jaGFuZ2VsaW5rXFx0PSBtYWNzZWNfY2hhbmdlbGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDYuNjAzOTgzODM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzc3NTMzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUNzZWMgTmV3IExpbmsgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbWFjc2VjX25ld2xpbmtgIGZ1bmN0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBjcmVhdGluZyBvciBzZXR0aW5nIHVwIGEgbmV3IE1BQ3NlYyBsaW5rLCBuYXR1cmFsbHkuIEkgYmV0IGl0J3MgY2FsbGVkIHdoZW5ldmVyIGEgbmV3IGludGVyZmFjZSBvciBWTEFOIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIE1BQ3NlYy4gTXkgaHlwb3RoZXNpcyBpcyBpdCdsbCBoYW5kbGUgYWxsIHRoZSBpbml0aWFsaXphdGlvbiwga2V5IGFzc29jaWF0aW9uLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzb21lIG9mIHRoZSBzZWN1cml0eSBwb2xpY3kgc2V0dXAgZm9yIHRoZSBuZXcgbGluay4gSSdtIHRoaW5raW5nIGl0J2xsIGludGVyYWN0IGNsb3NlbHkgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgbGlrZWx5IHVzaW5nIG5ldGxpbmsgb3Igb3RoZXIgbmV0d29yay1zcGVjaWZpYyBzdHJ1Y3R1cmVzLiBJJ20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBpdHMgaW50ZXJuYWwgc3RhdGUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhpcyBuZXcgbGluayBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gTGV0J3Mgc2VlIGlmIG15IGluaXRpYWwgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTQ2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDguNzQxNzQwMTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTk3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTk3OlxcdHN0YXRpYyBpbnQgbWFjc2VjX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG40MTk4OlxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG40MTk5OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjQyMDA6XFx0e1xcbjQyMDE6XFx0XFx0c3RydWN0IG5ldCAqbGlua19uZXQgPSBydG5sX25ld2xpbmtfbGlua19uZXQocGFyYW1zKTtcXG40MjAyOlxcdFxcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xcbjQyMDM6XFx0XFx0c3RydWN0IG5sYXR0ciAqKmRhdGEgPSBwYXJhbXMtXFx1MDAzZWRhdGE7XFxuNDIwNDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBwYXJhbXMtXFx1MDAzZXRiO1xcbjQyMDU6XFx0XFx0cnhfaGFuZGxlcl9mdW5jX3QgKnJ4X2hhbmRsZXI7XFxuNDIwNjpcXHRcXHR1OCBpY3ZfbGVuID0gTUFDU0VDX0RFRkFVTFRfSUNWX0xFTjtcXG40MjA3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjtcXG40MjA4OlxcdFxcdGludCBlcnIsIG10dTtcXG40MjA5OlxcdFxcdHNjaV90IHNjaTtcXG40MjEwOlxcdFxcbjQyMTE6XFx0XFx0aWYgKCF0YltJRkxBX0xJTktdKVxcbjQyMTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDIxMzpcXHRcXHRyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChsaW5rX25ldCwgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xcbjQyMTQ6XFx0XFx0aWYgKCFyZWFsX2RldilcXG40MjE1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQyMTY6XFx0XFx0aWYgKHJlYWxfZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUilcXG40MjE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQyMTg6XFx0XFxuNDIxOTpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX01BQ1NFQztcXG40MjIwOlxcdFxcbjQyMjE6XFx0XFx0bWFjc2VjLVxcdTAwM2VyZWFsX2RldiA9IHJlYWxfZGV2O1xcbjQyMjI6XFx0XFxuNDIyMzpcXHRcXHRpZiAoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDU0VDX09GRkxPQURdKVxcbjQyMjQ6XFx0XFx0XFx0bWFjc2VjLVxcdTAwM2VvZmZsb2FkID0gbmxhX2dldF9vZmZsb2FkKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pO1xcbjQyMjU6XFx0XFx0ZWxzZVxcbjQyMjY6XFx0XFx0XFx0LyogTUFDc2VjIG9mZmxvYWRpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi9cXG40MjI3OlxcdFxcdFxcdG1hY3NlYy1cXHUwMDNlb2ZmbG9hZCA9IE1BQ1NFQ19PRkZMT0FEX09GRjtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0LyogQ2hlY2sgaWYgdGhlIG9mZmxvYWRpbmcgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgbGF5ZXJzICovXFxuNDIzMDpcXHRcXHRpZiAobWFjc2VjLVxcdTAwM2VvZmZsb2FkICE9IE1BQ1NFQ19PRkZMT0FEX09GRiBcXHUwMDI2XFx1MDAyNlxcbjQyMzE6XFx0XFx0ICAgICFtYWNzZWNfY2hlY2tfb2ZmbG9hZChtYWNzZWMtXFx1MDAzZW9mZmxvYWQsIG1hY3NlYykpXFxuNDIzMjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuNDIzMzpcXHRcXG40MjM0OlxcdFxcdC8qIHNlbmRfc2NpIG11c3QgYmUgc2V0IHRvIHRydWUgd2hlbiB0cmFuc21pdCBzY2kgZXhwbGljaXRseSBpcyBzZXQgKi9cXG40MjM1OlxcdFxcdGlmICgoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDU0VDX1NDSV0pIFxcdTAwMjZcXHUwMDI2XFxuNDIzNjpcXHRcXHQgICAgKGRhdGEgXFx1MDAyNlxcdTAwMjYgZGF0YVtJRkxBX01BQ1NFQ19JTkNfU0NJXSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NDguNzQyMTEzOTE1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MDE2Nzc5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodHMgb24gTmV0d29yayBOYW1lc3BhY2VzIGFuZCBNQUNzZWMgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IG5ldHdvcmsgbmFtZXNwYWNlcyAoYG5ldG5zYCkgYWZmZWN0IE1BQ3NlYyBkZXZpY2UgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBNQUNzZWMgZGV2aWNlIGl0c2VsZiBhbmQgaXRzIHVuZGVybHlpbmcgXCJyZWFsXCIgZGV2aWNlIChgcmVhbF9kZXZgKS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgYHJlYWxfZGV2YCBjYW4gcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCByaWdodD8gVGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIHRvIGFub3RoZXIgbmFtZXNwYWNlIG9yLCBpbnRlcmVzdGluZ2x5LCBjcmVhdGVkIGFjcm9zcyBuYW1lc3BhY2VzIHVzaW5nIGBJRkxBX0xJTktfTkVUTlNJRGAuXG5cbk5vdywgSSdtIGxvb2tpbmcgYXQgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYC4gVGhpcyBmdW5jdGlvbiBzZWVtcyBjcml0aWNhbCBmb3IgdmFsaWRhdGluZyBjaGFuZ2VzIHdoZW4gdGhlIGByZWFsX2RldmAgaXMgcG90ZW50aWFsbHkgaW4gYW5vdGhlciBuYW1lc3BhY2UuIEl0IGNoZWNrcyBhIGNvdXBsZSBvZiBjb25kaXRpb25zLiBGaXJzdCwgaXQgZGV0ZXJtaW5lcyBpZiB0aGUgZGV2aWNlIFwicmVhY2hlc1wiIHRoZSByZWFsIGRldmljZSAoY29uc2lkZXJpbmcgb2ZmbG9hZGluZyBhbmQgY2hhbmdlcyB0byB0aGUgb2ZmbG9hZCBzdGF0ZSkuIFRoZW4sIGFuZCB0aGlzIGlzIHRoZSBjb3JlIG9mIGl0LCBpZiB0aGUgcmVhbCBkZXZpY2UgKmNhbiogYmUgcmVhY2hlZCwgaXQgY2FsbHMgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgLiBJZiB0aGlzIGNoZWNrIGZhaWxzLCBpdCByZXR1cm5zIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgcmVxdWlyaW5nIGBDQVBfTkVUX0FETUlOYCBpbiB0aGF0IG90aGVyIG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5CdXQsIHdhaXQuLi4gd2hhdCBleGFjdGx5ICppcyogYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgPyBUaGF0J3MgdGhlIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgYWxsIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ4OjUyLjQ0Mzc5NDMyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNjI0NjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI0NjU9c3RhdGljIGludCBnZW5ldmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ3My1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNDc0OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGdlbmV2ZS1cXHUwMDNlbmV0KSlcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDc1LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0zOTU1PXN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NjctXFx0aWYgKCFyZWFjaGVzX3JlYWxfZGV2IHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mzk2ODpcXHQgICAgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQobWFjc2VjLVxcdTAwM2VyZWFsX2RldikpKVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTM5NjktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTQ3Mz1pbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE0OTgtXFx0XFx0bG93ZXJkZXYgPSBtYWN2bGFuX2Rldl9yZWFsX2Rldihsb3dlcmRldik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjE0OTk6XFx0XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChsb3dlcmRldikpKSB7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTE1MDAtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTE2MzM9c3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ0LVxcdCAgICAoZGF0YVtJRkxBX01BQ1ZMQU5fQkNfUVVFVUVfTEVOXSB8fCBkYXRhW0lGTEFfTUFDVkxBTl9CQ19DVVRPRkZdKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxNjQ1OlxcdCAgICAhcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIGRldl9uZXQodmxhbi1cXHUwMDNlbG93ZXJkZXYpKSkge1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xNjQ2LVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00NDQwPXN0YXRpYyBpbnQgdnhsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0NTAtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQ0NTE6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdnhsYW4tXFx1MDAzZW5ldCkpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0NTItXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmluY2x1ZGUvbmV0L3J0bmV0bGluay5oPTI1OD1zdHJ1Y3QgbmV0ICpydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzdHJ1Y3Qgc29jayAqc2ssIGludCBuZXRuc2lkKTtcXG5pbmNsdWRlL25ldC9ydG5ldGxpbmsuaDoyNTk6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgtMjYwLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0ICpsaW5rX25ldCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNDk1PUVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNDk2LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI0OTc6Ym9vbCBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjQ5OC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5ldCAqbGlua19uZXQpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTAyLX1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNTAzOkVYUE9SVF9TWU1CT0xfR1BMKHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1MDQtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDU1PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2My1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDY0OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXFx1MDAzZW5ldCkpXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ2NS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQ4Nz1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE0OTY6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk3LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz01OTE9c3RhdGljIGludCB2dGlfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBfdnRpLmMtNTk4LVxcbm5ldC9pcHY0L2lwX3Z0aS5jOjU5OTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTYwMC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTQ5Nz1zdGF0aWMgaW50IGlwaXBfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTUwNi1cXG5uZXQvaXB2NC9pcGlwLmM6NTA3OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXFx1MDAzZW5ldCkpXFxubmV0L2lwdjQvaXBpcC5jLTUwOC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIwNDM9c3RhdGljIGludCBpcDZncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIwNTAtXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIwNTE6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjA1Mi1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIyNjU9c3RhdGljIGludCBpcDZlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTIyNzItXFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyNzM6XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI3NC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTIxMDk9c3RhdGljIGludCBpcDZfdG5sX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0yMTE4LVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoyMTE5OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTIxMjAtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9pcHY2L2lwNl92dGkuYz0xMDQwPXN0YXRpYyBpbnQgdnRpNl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtMTA0OC1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM6MTA0OTpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxcbm5ldC9pcHY2L2lwNl92dGkuYy0xMDUwLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvaXB2Ni9zaXQuYz0xNjAxPXN0YXRpYyBpbnQgaXBpcDZfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjYvc2l0LmMtMTYxNS1cXG5uZXQvaXB2Ni9zaXQuYzoxNjE2OlxcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIG5ldCkpXFxubmV0L2lwdjYvc2l0LmMtMTYxNy1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jPTg2ND1zdGF0aWMgaW50IHhmcm1pX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzEtXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjg3MjpcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBuZXQpKVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy04NzMtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDg6NTMuOTgwMDQ4MTIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1Mjc4MTIxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy4gSSBzZWUgYHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGVgIGJlaW5nIHVzZWQgYWNyb3NzIHZhcmlvdXMgdmlydHVhbCBuZXQgZGV2aWNlcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBOb3csIGxldCdzIHJpZ29yb3VzbHkgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gVGhlIGd1aWRlbGluZXMgZW1waGFzaXplIHRoYXQgZnV6emluZyBpcyBvbmx5IGFwcGxpY2FibGUgdG8gY29kZSB0aGF0J3MgZXhlY3V0YWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBgbWFjc2VjYCwgYSB2aXJ0dWFsIG5ldHdvcmtpbmcgZHJpdmVyLCBpcyBhY2Nlc3NpYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fU0VUTElOS2AsIGBSVE1fTkVXTElOS2Agd2l0aCBhIGNoYW5nZWxpbmsgZmxhZykuIFNvLCB0aGF0J3MgYSBjaGVjay4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSwgaXQgY2FuIGJlIHJlYWNoZWQgaW4gdGhlIHJlYWwtd29ybGQgZW52aXJvbm1lbnQuXG5cbkxldCdzIGRpc3NlY3QgdGhlIGNvZGU6IGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgY2FsbGVkIHdpdGhpbiBgbWFjc2VjX2NoYW5nZWxpbmtgLiBFdmVuIGlmIG9mZmxvYWQgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlcywgdGhpcyBjaGVjayBydW5zIHVuY29uZGl0aW9uYWxseSB3aXRoIGBkYXRhYCwgd2hpY2ggaXMgdGhlIGNoYW5nZWxpbmsgZGF0YSBwYXNzZWQgaW4gdmlhIG5ldGxpbmsuIFRoaXMgbWVhbnMsIGFzIGxvbmcgYXMgYGRhdGFgIGlzIHByZXNlbnQsIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AgaXMgY2FsbGVkIGV2ZXJ5IHNpbmdsZSB0aW1lLlxuXG5UaGlzIG1lYW5zIGl0IHdpbGwgKmFsd2F5cyogZXhlY3V0ZS4gYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBpcyBhbHdheXMgY2FsbGVkIHdoZW4gY2hhbmdlbGluayBkYXRhIGlzIHBhc3NlZCB0byBhIG1hY3NlYyBuZXQgZGV2aWNlLiBJdCBjaGVja3MgaWYgdGhlcmUgaXMgYSByZWFsIGRldmljZSBhdHRhY2hlZCwgYW5kIGFsc28gYSBuZXRucyBjaGVjayB3aGVuIHRoZSByZWFsIGRldmljZSBtb3Zlcy4gVGh1cywgbWFraW5nIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlYCBjYWxsYWJsZS5cblxuVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSBjb2RlIHdpdGhpbiBhIG5ldGxpbmstYWNjZXNzaWJsZSBkcml2ZXIuIFRoZXJlZm9yZSwgaXQgKmRvZXNuJ3QqIGZhbGwgdW5kZXIgYW55IG9mIHRoZSBcIm5lZ2F0aXZlIGNyaXRlcmlhXCIgb3V0bGluZWQgaW4gU2VjdGlvbiAyOiB0aGUgY29kZSBpc24ndCBub24ta2VybmVsLCBpc24ndCByZWxhdGVkIHRvIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdGhlIGV4ZWN1dGlvbiBwYXRocyBhcmUgcmVhY2hhYmxlLlxuXG5TZWN0aW9uIDMgbWFrZXMgaXQgY2xlYXI6IHRoaXMgY29kZSBmYWxscyBzcXVhcmVseSB1bmRlciBcIlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMuXCIgU28gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byBjb25maWd1cmluZyB0aGUgZnV6emVyLiBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Gb3IgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSB0byBpZGVudGlmeSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGltcGxlbWVudGluZyBhbHRlcmVkIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHByaW1hcnkgZm9jdXMgaXMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCwgdGhlIGFkZGVkIGZ1bmN0aW9uLiBXaGlsZSBpdCBpcyBzdGF0aWMsIGl0IGlzIGNhbGxlZCBkaXJlY3RseSBieSBgbWFjc2VjX2NoYW5nZWxpbmtgIGFuZCBpdCBkb2VzIG5vdCBzZWVtIHRvIGJlIGlubGluZWQgaW50byBpdC4gVGhhdCdzIGdvb2QuIGBtYWNzZWNfY2hhbmdlbGlua2AgaXRzZWxmIGlzIGFsc28gbW9kaWZpZWQgdG8gY2FsbCB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlc2UgdHdvLCBtYWtpbmcgdGhlbSBib3RoIGdvb2QgZm9jdXMgc3ltYm9scy4gTm8gb3RoZXIgZnVuY3Rpb25zIGFyZSBhZGRlZCBvciBtb2RpZmllZC5cblxuRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYC4gVG8gZnV6eiB0aGUgYG1hY3NlY2AgY29kZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMb29raW5nIGF0IGBkcml2ZXJzL25ldC9NYWtlZmlsZWAsIEkgc2VlIGBvYmotJChDT05GSUdfTUFDU0VDKSArPSBtYWNzZWMub2AuIFRoZW4sIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBJIGZpbmQgdGhlIGBDT05GSUdfTUFDU0VDYCBvcHRpb24gZGVmaW5lZCBhcyBhIHRyaXN0YXRlIHRoYXQgZGVwZW5kcyBvbiB0aGUgY3J5cHRvZ3JhcGhpYyBvcHRpb25zLiBJdCBoYXMgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbHMuXG5cbkluIGNvbmNsdXNpb24sIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHBhdGNoIGlzIGZ1enphYmxlIGFuZCB0aGUgZnV6emVyIGNhbiBiZSBwcm9wZXJseSBjb25maWd1cmVkIHdpdGggYEZvY3VzU3ltYm9sc2AgYXMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBhbmQgYG1hY3NlY19jaGFuZ2VsaW5rYCwgYW5kIGBFbmFibGVDb25maWdzYCBhcyBgQ09ORklHX01BQ1NFQ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzQ4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTowMi41MDc4NjIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5FVERFVklDRVNcXG4gICA3OlxcdFxcdGRlZmF1bHQgeSBpZiBVTUxcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuICAgOTpcXHRcXHRib29sIFxcXCJOZXR3b3JrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvbid0IGludGVuZCB0byBjb25uZWN0IHlvdXIgTGludXggYm94IHRvXFxuICAxMjpcXHRcXHQgIGFueSBvdGhlciBjb21wdXRlciBhdCBhbGwuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgWW91J2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhIG5ldHdvcmsgY2FyZCB0aGF0XFxuICAxNTpcXHRcXHQgIHlvdSB3YW50IHRvIHVzZSB1bmRlciBMaW51eC4gSWYgeW91IGFyZSBnb2luZyB0byBydW4gU0xJUCBvciBQUFAgb3ZlclxcbiAgMTY6XFx0XFx0ICB0ZWxlcGhvbmUgbGluZSBvciBudWxsIG1vZGVtIGNhYmxlIHlvdSBuZWVkIHNheSBZIGhlcmUuIENvbm5lY3RpbmdcXG4gIDE3OlxcdFxcdCAgdHdvIG1hY2hpbmVzIHdpdGggcGFyYWxsZWwgcG9ydHMgdXNpbmcgUExJUCBuZWVkcyB0aGlzLCBhcyB3ZWxsIGFzXFxuICAxODpcXHRcXHQgIEFYLjI1L0tJU1MgZm9yIHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIGFtYXRldXIgcmFkaW8gbGlua3MuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgU2VlIGFsc28gXFxcIlRoZSBMaW51eCBOZXR3b3JrIEFkbWluaXN0cmF0b3IncyBHdWlkZVxcXCIgYnkgT2xhZiBLaXJjaCBhbmRcXG4gIDIxOlxcdFxcdCAgVGVycnkgRGF3c29uLiBBdmFpbGFibGUgYXQgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZ3VpZGVzLmh0bWxcXHUwMDNlLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICAyNDpcXHRcXG4gIDI1OlxcdCMgQWxsIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcmUgZGVwZW5kZW50IG9uIE5FVERFVklDRVMgLSBkbyBub3QgcmVwZWF0XFxuICAyNjpcXHQjIHRoYXQgZm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMuXFxuICAyNzpcXHRpZiBORVRERVZJQ0VTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBNSUlcXG4gIDMwOlxcdFxcdHRyaXN0YXRlXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBORVRfQ09SRVxcbiAgMzM6XFx0XFx0ZGVmYXVsdCB5XFxuICAzNDpcXHRcXHRib29sIFxcXCJOZXR3b3JrIGNvcmUgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxcbiAgMzc6XFx0XFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTowMi41MDc5NDQzOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTE5MzYwMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgaGVyZSB3ZSBnby4gVGltZSB0byBidXJyb3cgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW5kIG9mIHRoZSBgaWYgTkVUX0NPUkVgIGNvbmRpdGlvbmFsIGJsb2NrLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JrIGRyaXZlcnMsIGFuZCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCBnZXRzIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGJ1aWxkaW5nIGZvciAuTkVUIENvcmUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoYXQgcGFydGljdWxhciBjb25kaXRpb25hbC4gS25vd2luZyB0aGUgZXhhY3Qgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgc2V0dGluZyB1cCBteSBwcm9qZWN0IGFuZCBhdm9pZGluZyBhbnkgdW53YW50ZWQgc3VycHJpc2VzLiBTbywgbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MDQuMDI3MzA4MDA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzNDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmRpZi4qTkVUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTQ4OT1jb25maWcgTUhJX05FVFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0OTc6ZW5kaWYgIyBORVRfQ09SRVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTowNC4wNzI5NTE5MjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcyNDYyODg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBNQUNTRUNgLiBJdCBsb29rcyBsaWtlIGBORVRfQ09SRWAgaXMgbmVzdGVkIGluc2lkZSBgaWYgTkVUREVWSUNFU2AsIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYE5FVGAuIEFuZCBgTUFDU0VDYCBzaG93cyB1cCBhcm91bmQgbGluZSAzMTgsIGRpcmVjdGx5IHdpdGhpbiBgaWYgTkVUX0NPUkVgLiBTbywgdGhlIGhpZXJhcmNoeSBpcyBgTkVUREVWSUNFU2AsIHRoZW4gYE5FVF9DT1JFYCwgYW5kIGZpbmFsbHkgYE1BQ1NFQ2AuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3JzIGhlcmUsIGFuZCBteSBndXQgY2hlY2sgdGVsbHMgbWUgdGhhdCBgTkVUREVWSUNFU2AgYW5kIGBORVRfQ09SRWAgYXJlIHByZXR0eSBzdGFuZGFyZCBjb21wb25lbnRzIGluIHN5emthbGxlciBvciB0eXBpY2FsIExpbnV4IG5ldHdvcmsgY29uZmlndXJhdGlvbnMuIEp1c3QgdG8gYmUgY2VydGFpbiwgSSdsbCBjb25maXJtIHRoYXQgYE5FVF9DT1JFYCBpcyBpbmRlZWQgc2V0IHRvIFwieVwiICh5ZXMpIGJ5IGRlZmF1bHQgd2hlbiBgTkVUREVWSUNFU2AgaXMgYWxzbyBzZXQgdG8gXCJ5XCIuIEFuZCBJIHJlY2FsbCBub3cgdGhhdCBgTUFDU0VDYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIGVuYWJsaW5nIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYE5FVF9DT1JFYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEl0IGFwcGVhcnMgaXQgZG9lc24ndDsgaXQncyBqdXN0IGNvbnRyb2xsZWQgYnkgdGhhdCBvdXRlciBgaWYgTkVUREVWSUNFU2AuIFRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHN5bWJvbCBmb3IgYE1BQ1NFQ2AsIHdoaWNoIGlzIGBDT05GSUdfTUFDU0VDYC5cblxuQW5kIG5vdywgYmVmb3JlIEkgbW92ZSBvbiwgSSB3YW50IHRvIGJlIGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBzY2FuIGBkcml2ZXJzL25ldC9tYWNzZWMuY2AgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZSBgI2lmZGVmIENPTkZJR19gIG9yIGBJU19FTkFCTEVEKC4uLilgIGNoZWNrcy4gSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY29uZmlybSB0aGF0IGBNQUNTRUNgIGlzIHRoZSBvbmx5IGNvbmZpZyByZXF1aXJlZCB0byBlbmFibGUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjA3Ljc5NzU4NDMzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzc0OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklTX0VOQUJMRUR8Q09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tYWNzZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MDcuODQ0NjI5MTM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTc1MDY4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWNzZWMuYyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBgbWFjc2VjLmNgIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMg4oCTIG5vIGAjaWZkZWZgcyBvciBgSVNfRU5BQkxFRGAgbWFjcm9zIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIFRoaXMgaXMgdW51c3VhbCwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGl0cyB1c2FnZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIG5ldHdvcmsgbmFtZXNwYWNlcy4gU2luY2UgdGhpcyBwYXRjaCBzZWVtcyB0byB0b3VjaCBvbiBuZXR3b3JrIG5hbWVzcGFjZXMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ0FQX05FVF9BRE1JTmAgd2l0aGluIHRob3NlIG5hbWVzcGFjZXMsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgQ09ORklHX05FVF9OU2AgaXMgYSBwcmVyZXF1aXNpdGUgb3IgaXMgYXQgYWxsIGludm9sdmVkIGhlcmUuIFRoZSBmYWN0IHRoaXMgZmlsZSBpcyBiZWluZyBjaGFuZ2VkIG1lYW5zIEkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLlxuXG5BaCwgYW5kIHRoZXJlIGl0IGlzLiBUaGlua2luZyBhYm91dCBgQ09ORklHX05FVF9OU2AsIHdoaWNoIHBlcm1pdHMgbXVsdGlwbGUgbmV0d29yayBuYW1lc3BhY2VzLCB0aGUgY29ncyBhcmUgdHVybmluZy4gVGhpcyBpcyB3aGVyZSBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgIGFjdHVhbGx5IGhhcyBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIGJldHdlZW4gdGhlIG1hY3NlYyBkZXZpY2UgYW5kIHRoZSBgcmVhbF9kZXZgLiBOb3cgSSBrbm93IHdoeSB0aGlzIGlzIGltcG9ydGFudCB0byBjaGVjay5cblxuVG8gYmUgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBgaW5pdC9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCBmaWxlcyBhcmUgbXkgbmV4dCBzdG9wLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX05FVF9OU2AgaXMgcHJlc2VudCBhbmQgaWYgaXQncyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgZW5hYmxlcyBtdWx0aXBsZSBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjEwLjQ2MjE0MDExNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDk3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQ2MD1jb25maWcgUElEX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ2Ny1cXG5pbml0L0tjb25maWc6MTQ2ODpjb25maWcgTkVUX05TXFxuaW5pdC9LY29uZmlnLTE0NjktXFx0Ym9vbCBcXFwiTmV0d29yayBuYW1lc3BhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjEwLjUwOTIwMDkzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzE2NzcwMzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBjb25maWd1cmVkIGF0IGJvb3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGluaXQvS2NvbmZpZ2AuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlIGNvcmUgZmVhdHVyZSB0b2dnbGVzLiBMZXQgbWUganVtcCB0aGVyZSBhbmQgbG9vayBmb3IgdGhlIGBORVRfTlNgIHN5bWJvbC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IGRlZmluZSB3aGV0aGVyIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgaXMgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBjb21wbGV0ZWx5IGRpc2FibGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbmFsIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBwb3RlbnRpYWxseSB0aGUgcmVsZXZhbnQgYm9vdCBhcmd1bWVudHMgb3Iga2VybmVsIG1vZHVsZXMgaW52b2x2ZWQuIExldCdzIHNlZSB3aGF0IGBLY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTE2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MjMuNjc2OTA1ODU5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ2NTpcXHRcXHQgIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIHBpZCBhcyBsb25nIGFzIHRoZXkgYXJlIGluIGRpZmZlcmVudFxcbjE0NjY6XFx0XFx0ICBwaWQgbmFtZXNwYWNlcy4gIFRoaXMgaXMgYSBidWlsZGluZyBibG9jayBvZiBjb250YWluZXJzLlxcbjE0Njc6XFx0XFxuMTQ2ODpcXHRjb25maWcgTkVUX05TXFxuMTQ2OTpcXHRcXHRib29sIFxcXCJOZXR3b3JrIG5hbWVzcGFjZVxcXCJcXG4xNDcwOlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuMTQ3MTpcXHRcXHRkZWZhdWx0IHlcXG4xNDcyOlxcdFxcdGhlbHBcXG4xNDczOlxcdFxcdCAgQWxsb3cgdXNlciBzcGFjZSB0byBjcmVhdGUgd2hhdCBhcHBlYXIgdG8gYmUgbXVsdGlwbGUgaW5zdGFuY2VzXFxuMTQ3NDpcXHRcXHQgIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxcbjE0NzU6XFx0XFxuMTQ3NjpcXHRlbmRpZiAjIE5BTUVTUEFDRVNcXG4xNDc3OlxcdFxcbjE0Nzg6XFx0Y29uZmlnIENIRUNLUE9JTlRfUkVTVE9SRVxcbjE0Nzk6XFx0XFx0Ym9vbCBcXFwiQ2hlY2twb2ludC9yZXN0b3JlIHN1cHBvcnRcXFwiXFxuMTQ4MDpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4xNDgxOlxcdFxcdHNlbGVjdCBQUk9DX0NISUxEUkVOXFxuMTQ4MjpcXHRcXHRzZWxlY3QgS0NNUFxcbjE0ODM6XFx0XFx0ZGVmYXVsdCBuXFxuMTQ4NDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjIzLjY3NzAxODUzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDg0NjIzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNQUNzZWMgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIHJlbGV2YW5jZSBvZiBgQ09ORklHX01BQ1NFQ2AgYW5kIGBDT05GSUdfTkVUX05TYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gY292ZXJpbmcgYWxsIGJhc2VzLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gcnRuZXRsaW5rIG9yIE1BQ3NlYywganVzdCBpbiBjYXNlLiBJIGtub3cgYHJ0bmV0bGluay5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWxzbyByZWNhbGwgdGhhdCBgZHJpdmVycy9uZXQvbWFjc2VjLmNgIHNlbGVjdHMgYSBidW5jaCBvZiBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uczogYENSWVBUT2AsIGBDUllQVE9fQUVTYCwgYENSWVBUT19HQ01gLCBhbmQgYEdST19DRUxMU2AuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIG9mIGl0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1hY3NlY19jaGFuZ2VsaW5rYCBhbmQgaW50cm9kdWNlcyBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUga2V5IGhlcmUgaXMgdGhlIG5hbWVzcGFjZSBjaGVjazsgaXQncyBkZXNpZ25lZCB0byB2ZXJpZnkgY2FwYWJpbGl0aWVzIHdoZW5ldmVyIHdlIGNoYW5nZSBhdHRyaWJ1dGVzIG9mIGEgTUFDc2VjIGRldmljZSwgZXNwZWNpYWxseSB3aGVuIGl0cyB1bmRlcmx5aW5nICdyZWFsJyBkZXZpY2UgbWlnaHQgcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLCBvciB3aGVuIHRoZSBvZmZsb2FkIHN0YXRlIGNoYW5nZXMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIEl04oCZcyB0cmlnZ2VyZWQgdmlhIHJ0bmV0bGluayBjYWxsc+KAlHNwZWNpZmljYWxseSBgUlRNX05FV0xJTktgIGFuZCBgUlRNX1NFVExJTktgLiBUaGF0J3MgYSBkaXJlY3QgYXR0YWNrIHN1cmZhY2UgZnJvbSB1c2Vyc3BhY2UuIEdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiBuYW1lc3BhY2UgcGVybWlzc2lvbnMgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIG9mZmxvYWQgbWFuaXB1bGF0aW9ucywgaXQncyBzY3JlYW1pbmcgXCJXb3J0aEZ1enppbmchXCIuXG5cblNvLCBmb3IgZnV6emluZywgdGhlIGNyaXRpY2FsIHN5bWJvbHMgYXJlOiBgbWFjc2VjX2NoYW5nZWxpbmtgIGFuZCBgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNgLiBUaGUgY29uZmlndXJhdGlvbnMgdGhhdCB3aWxsIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29kZSBhcmUgYE1BQ1NFQ2AgYW5kIGBORVRfTlNgLlxuXG5JbiBzaG9ydCwgdGhlIHBhdGNoIGFkZHMgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zYCBhbmQgY2FsbHMgaXQgZnJvbSBgbWFjc2VjX2NoYW5nZWxpbmtgIHRvIHZhbGlkYXRlIGBDQVBfTkVUX0FETUlOYCBwcml2aWxlZ2VzIG92ZXIgYSBgcmVhbF9kZXZg4oCZcyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIGFsdGVyaW5nIG9mZmxvYWRlZCBNQUNzZWMgZGV2aWNlcyBvciBjaGFuZ2luZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIE1BQ3NlYyBuZXR3b3JrIGRyaXZlciwgYW5kIGNhbiBiZSBhY2Nlc3NlZCBhbmQgbWFuaXB1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoYFJUTV9ORVdMSU5LYC9gUlRNX1NFVExJTktgKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBmdXp6aW5nIGlzIGFwcHJvcHJpYXRlIHRvIHRlc3QgbGluayBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGFuZCBuYW1lc3BhY2UgcGVybWlzc2lvbiBoYW5kbGluZy5cblxuQWxyaWdodCwgdGhhdCdzIGV2ZXJ5dGhpbmcuIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzc0LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjI4LjE2MTY0NTQ5OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTk3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNTRUNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zXCIsXG4gICAgXCJtYWNzZWNfY2hhbmdlbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoKSBhbmQgY2FsbHMgaXQgd2l0aGluIG1hY3NlY19jaGFuZ2VsaW5rKCkgdG8gZW5mb3JjZSBuYW1lc3BhY2UgcGVybWlzc2lvbiBjaGVja3MgKHJlcXVpcmluZyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsX2RldiBuZXR3b3JrIG5hbWVzcGFjZSkgd2hlbiBjaGFuZ2luZyBNQUNzZWMgb2ZmbG9hZCBzdGF0ZSBvciB1cGRhdGluZyBvZmZsb2FkZWQgZGV2aWNlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIHRoZSB2aXJ0dWFsIE1BQ3NlYyBuZXR3b3JraW5nIGRyaXZlciwgZXhlcmNpc2FibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX05FV0xJTksgLyBSVE1fU0VUTElOSykgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1NFQ1wiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnNcIixcbiAgICBcIm1hY3NlY19jaGFuZ2VsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucygpIGFuZCBjYWxscyBpdCB3aXRoaW4gbWFjc2VjX2NoYW5nZWxpbmsoKSB0byBlbmZvcmNlIG5hbWVzcGFjZSBwZXJtaXNzaW9uIGNoZWNrcyAocmVxdWlyaW5nIENBUF9ORVRfQURNSU4gaW4gdGhlIHJlYWxfZGV2IG5ldHdvcmsgbmFtZXNwYWNlKSB3aGVuIGNoYW5naW5nIE1BQ3NlYyBvZmZsb2FkIHN0YXRlIG9yIHVwZGF0aW5nIG9mZmxvYWRlZCBkZXZpY2VzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIHZpcnR1YWwgTUFDc2VjIG5ldHdvcmtpbmcgZHJpdmVyLCBleGVyY2lzYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fTkVXTElOSyAvIFJUTV9TRVRMSU5LKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjI4LjI0MDY1MTg3OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMjI1Njk3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OToyOC4yNDExODI0NThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzEyMjAzNDM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24gY2hlY2sgKG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2FsbGVyIGhhcyBDQVBfTkVUX0FETUlOIGluIHRoZSByZWFsIGRldmljZSdzIG5ldHdvcmsgbmFtZXNwYWNlIHdoZW4gbW9kaWZ5aW5nIG9mZmxvYWQgY29uZmlndXJhdGlvbiBvbiBhIE1BQ3NlYyBuZXRkZXZpY2UgYWNyb3NzIG5hbWVzcGFjZXMuIEl0IG9ubHkgaW5zcGVjdHMgZXhpc3RpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9pbnRlcnMgYW5kIHN0cnVjdCBtYWNzZWNfZGV2IGZpZWxkcywgYW5kIGNvbmRpdGlvbmFsbHkgZW1pdHMgYSBzdGF0aWMgbmV0bGluayBleHRlbmRlZCBBQ0sgZXJyb3Igc3RyaW5nIG9uIHBlcm1pc3Npb24gZGVuaWFsLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3B5aW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS9pbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUyNTc3NTBhNGRmNGEyYTI2N2Y3YzNmODJiN2M0ZDBlYTY3ZTk3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIxOjQ4OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuaW5kZXggNmY5ZjNhY2VmZmFhZC4uZTAxOWU3YTI1Y2M5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9tYWNzZWMuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JvX2NlbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaFx1MDAzZVxuQEAgLTM5NDUsNiArMzk0NiwzMyBAQCBzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NvbW1vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIEJvdGggYSBjaGFuZ2Ugb2YgdGhlIG9mZmxvYWQgc3RhdGUgKG1kb19hZGRfc2VjeSgpL21kb19kZWxfc2VjeSgpKSBhbmRcbisgKiBhbnkgcmVxdWVzdCBhZ2FpbnN0IGFuIGFscmVhZHkgb2ZmbG9hZGVkIGRldmljZSAobWRvX3VwZF9zZWN5KCkpIHJlYWNoXG4rICogdGhlIGRyaXZlciBvZiByZWFsX2Rldiwgd2hpY2ggbWF5IGxpdmUgaW4gYSBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBmcm9tIHRoZSBtYWNzZWMgZGV2aWNlLiBSZXF1aXJlIENBUF9ORVRfQURNSU4gb3ZlciByZWFsX2RldidzIG5hbWVzcGFjZVxuKyAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmtfY2hlY2tfbmV0bnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbitcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbWFjc2VjX2RldiAqbWFjc2VjID0gbWFjc2VjX3ByaXYoZGV2KTtcbitcdGJvb2wgcmVhY2hlc19yZWFsX2RldjtcbitcbitcdHJlYWNoZXNfcmVhbF9kZXYgPSBtYWNzZWNfaXNfb2ZmbG9hZGVkKG1hY3NlYyk7XG4rXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19PRkZMT0FEXSBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cdTAwM2VvZmZsb2FkKVxuK1x0XHRyZWFjaGVzX3JlYWxfZGV2ID0gdHJ1ZTtcbitcbitcdGlmICghcmVhY2hlc19yZWFsX2RldiB8fFxuK1x0ICAgIHJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCBkZXZfbmV0KG1hY3NlYy1cdTAwM2VyZWFsX2RldikpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0ICAgICAgIFwiQ2hhbmdpbmcgYSBNQUNzZWMgZGV2aWNlIHdob3NlIHJlYWwgZGV2aWNlIGlzIGluIGFub3RoZXIgbmV0d29yayBuYW1lc3BhY2UgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBpbiB0aGF0IG5hbWVzcGFjZVwiKTtcbitcdHJldHVybiAtRVBFUk07XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjc2VjX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbkBAIC0zOTU5LDYgKzM5ODcsMTAgQEAgc3RhdGljIGludCBtYWNzZWNfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0aWYgKCFkYXRhKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XG4gXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxuIFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjE6NDk6MjguMjQxMTgzNzQ4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY4Mjk4OTY5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSdsbCBhbmFseXplIHRoZSBjb2RlIGNoYW5nZXMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRyaXZlcnMvbmV0L21hY3NlYy5jYC4gSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRuc2AuIFRoZSBmdW5jdGlvbiBjaGVja3MgaWYgY2hhbmdlcyB0byB0aGUgTUFDc2VjIGRldmljZSBjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZywgYWZmZWN0IHRoZSB1bmRlcmx5aW5nIFwicmVhbCBkZXZpY2UsXCIgd2hpY2ggbWlnaHQgcmVzaWRlIGluIGEgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlLiBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gYSBzZXBhcmF0ZSBuYW1lc3BhY2UsIHRoZSBwYXRjaCBlbmZvcmNlcyBgQ0FQX05FVF9BRE1JTmAgb3ZlciB0aGF0IG90aGVyIG5hbWVzcGFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIHBlcm1pc3Npb24gY2hlY2sgcmVsYXRlZCB0byBjcm9zcy1uYW1lc3BhY2Ugb3BlcmF0aW9ucy4gVGhlIGFkZGVkIGNvZGUgaXMgYSBnYXRla2VlcGVyIHRoYXQgZW5zdXJlcyB0aGUgY2FsbGVyIGhhcyB0aGUgbmVjZXNzYXJ5IHByaXZpbGVnZXMgdG8gbW9kaWZ5IGEgTUFDc2VjIGRldmljZSB0aGF0IGhhcyBpdHMgcmVhbCBkZXZpY2UgaW4gYSBzZXBhcmF0ZSBuYW1lc3BhY2UuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGNoYW5nZXMgdG8gdGhlIG9mZmxvYWQgc3RhdGUgb3IgYW55IG9wZXJhdGlvbnMgb24gYW4gb2ZmbG9hZGVkIGRldmljZSB3aGVyZSB0aGUgJ3JlYWwnIGRldmljZSBpcyBpbiBhIGRpZmZlcmVudCBuYW1lc3BhY2UsIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mIGFuZCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIGZ1enppbmcgc3RyYXRlZ2llcy4gU2luY2UgdGhpcyBpcyBhbiBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20sIGl0IG1heSBub3QgaW50cm9kdWNlIG5ldywgZWFzaWx5IGV4cGxvaXRhYmxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gTXkgaW5zdGluY3RzIHN1Z2dlc3QgdGhhdCBleGlzdGluZyBmdXp6aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIHdvdWxkIGNoZWNrIGFueSBleGlzdGluZyBmdXp6aW5nIGNvdmVyYWdlIG9mIG5ldHdvcmsgbmFtZXNwYWNlIGludGVyYWN0aW9uIGluIHRoaXMgYXJlYSwgYW5kIHBlcmhhcHMgYWRkIGEgdGVzdGNhc2UgZm9yIHRoaXMgc3BlY2lmaWMgY2hlY2ssIGlmIGl0IGRvZXMgbm90IGV4aXN0LiBIb3dldmVyLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGEgZGVkaWNhdGVkIHNlc3Npb24gZG9lc24ndCBzZWVtIHN0cmljdGx5IG5lY2Vzc2FyeSAqYXQgdGhpcyBwb2ludCouIEknbGwgbmVlZCB0byBkbyBtb3JlIGRpZ2dpbmcgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIxOjQ5OjM1LjA3MTA4MzM4MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWFjc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk0MDpcXHRcXHRcXHRpZiAoc2VjeS1cXHUwMDNleHBuIFxcdTAwMjZcXHUwMDI2XFxuMzk0MTpcXHRcXHRcXHQgICAgcmVwbGF5X3dpbmRvdyBcXHUwMDNlIE1BQ1NFQ19YUE5fTUFYX1JFUExBWV9XSU5ET1cpXFxuMzk0MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTQzOlxcdFxcdFxcdFdSSVRFX09OQ0Uoc2VjeS1cXHUwMDNlcmVwbGF5X3dpbmRvdywgcmVwbGF5X3dpbmRvdyk7XFxuMzk0NDpcXHRcXHR9XFxuMzk0NTpcXHRcXG4zOTQ2OlxcdFxcdHJldHVybiAwO1xcbjM5NDc6XFx0fVxcbjM5NDg6XFx0XFxuMzk0OTpcXHQvKiBCb3RoIGEgY2hhbmdlIG9mIHRoZSBvZmZsb2FkIHN0YXRlIChtZG9fYWRkX3NlY3koKS9tZG9fZGVsX3NlY3koKSkgYW5kXFxuMzk1MDpcXHQgKiBhbnkgcmVxdWVzdCBhZ2FpbnN0IGFuIGFscmVhZHkgb2ZmbG9hZGVkIGRldmljZSAobWRvX3VwZF9zZWN5KCkpIHJlYWNoXFxuMzk1MTpcXHQgKiB0aGUgZHJpdmVyIG9mIHJlYWxfZGV2LCB3aGljaCBtYXkgbGl2ZSBpbiBhIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZVxcbjM5NTI6XFx0ICogZnJvbSB0aGUgbWFjc2VjIGRldmljZS4gUmVxdWlyZSBDQVBfTkVUX0FETUlOIG92ZXIgcmVhbF9kZXYncyBuYW1lc3BhY2VcXG4zOTUzOlxcdCAqIGZvciB0aG9zZTsgbG9jYWwgYXR0cmlidXRlcyBvZiBhIG5vbi1vZmZsb2FkZWQgZGV2aWNlIGFyZSB1bmFmZmVjdGVkLlxcbjM5NTQ6XFx0ICovXFxuMzk1NTpcXHRzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMzk1NjpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjM5NTc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4zOTU4OlxcdHtcXG4zOTU5OlxcdFxcdHN0cnVjdCBtYWNzZWNfZGV2ICptYWNzZWMgPSBtYWNzZWNfcHJpdihkZXYpO1xcbjM5NjA6XFx0XFx0Ym9vbCByZWFjaGVzX3JlYWxfZGV2O1xcbjM5NjE6XFx0XFxuMzk2MjpcXHRcXHRyZWFjaGVzX3JlYWxfZGV2ID0gbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpO1xcbjM5NjM6XFx0XFx0aWYgKGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0gXFx1MDAyNlxcdTAwMjZcXG4zOTY0OlxcdFxcdCAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9NQUNTRUNfT0ZGTE9BRF0pICE9IG1hY3NlYy1cXHUwMDNlb2ZmbG9hZClcXG4zOTY1OlxcdFxcdFxcdHJlYWNoZXNfcmVhbF9kZXYgPSB0cnVlO1xcbjM5NjY6XFx0XFxuMzk2NzpcXHRcXHRpZiAoIXJlYWNoZXNfcmVhbF9kZXYgfHxcXG4zOTY4OlxcdFxcdCAgICBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgZGV2X25ldChtYWNzZWMtXFx1MDAzZXJlYWxfZGV2KSkpXFxuMzk2OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zOTcwOlxcdFxcbjM5NzE6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjM5NzI6XFx0XFx0XFx0ICAgICAgIFxcXCJDaGFuZ2luZyBhIE1BQ3NlYyBkZXZpY2Ugd2hvc2UgcmVhbCBkZXZpY2UgaXMgaW4gYW5vdGhlciBuZXR3b3JrIG5hbWVzcGFjZSByZXF1aXJlcyBDQVBfTkVUX0FETUlOIGluIHRoYXQgbmFtZXNwYWNlXFxcIik7XFxuMzk3MzpcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjM5NzQ6XFx0fVxcbjM5NzU6XFx0XFxuMzk3NjpcXHRzdGF0aWMgaW50IG1hY3NlY19jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuMzk3NzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4zOTc4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjM5Nzk6XFx0e1xcbjM5ODA6XFx0XFx0c3RydWN0IG1hY3NlY19kZXYgKm1hY3NlYyA9IG1hY3NlY19wcml2KGRldik7XFxuMzk4MTpcXHRcXHRib29sIG1hY3NlY19vZmZsb2FkX3N0YXRlX2NoYW5nZSA9IGZhbHNlO1xcbjM5ODI6XFx0XFx0ZW51bSBtYWNzZWNfb2ZmbG9hZCBvZmZsb2FkO1xcbjM5ODM6XFx0XFx0c3RydWN0IG1hY3NlY190eF9zYyB0eF9zYztcXG4zOTg0OlxcdFxcdHN0cnVjdCBtYWNzZWNfc2VjeSBzZWN5O1xcbjM5ODU6XFx0XFx0aW50IHJldDtcXG4zOTg2OlxcdFxcbjM5ODc6XFx0XFx0aWYgKCFkYXRhKVxcbjM5ODg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzk4OTpcXHRcXG4zOTkwOlxcdFxcdHJldCA9IG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKGRldiwgZGF0YSwgZXh0YWNrKTtcXG4zOTkxOlxcdFxcdGlmIChyZXQpXFxuMzk5MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5OTM6XFx0XFxuMzk5NDpcXHRcXHRpZiAoZGF0YVtJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEVdIHx8XFxuMzk5NTpcXHRcXHQgICAgZGF0YVtJRkxBX01BQ1NFQ19JQ1ZfTEVOXSB8fFxcbjM5OTY6XFx0XFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfU0NJXSB8fFxcbjM5OTc6XFx0XFx0ICAgIGRhdGFbSUZMQV9NQUNTRUNfUE9SVF0pXFxuMzk5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTozNS4wNzEzNzQyOTFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjI5MTgyMjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNQUNzZWMgTGluayBBdHRyaWJ1dGUgQ2hhbmdlIFBhdGNoKipcblxuT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhpcyBwYXRjaC4gSXQncyBhIHByZXR0eSBjbGVhbiBhZGRpdGlvbiwgcmVhbGx5LiBFc3NlbnRpYWxseSwgaXQncyBhZGRpbmcgYSBjcnVjaWFsIHBlcm1pc3Npb24gY2hlY2s6IGBtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucyhkZXYsIGRhdGEsIGV4dGFjaylgLiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCB3aGVuZXZlciBzb21lb25lIGF0dGVtcHRzIHRvIGNoYW5nZSBsaW5rIGF0dHJpYnV0ZXMgb24gYSBNQUNzZWMgZGV2aWNlLCAqYW5kKiB0aGF0IGRldmljZSdzIHVuZGVybHlpbmcgXCJyZWFsXCIgZGV2aWNlIGxpdmVzIGluIGEgKmRpZmZlcmVudCogbmV0d29yayBuYW1lc3BhY2UuIENydWNpYWxseSwgdGhpcyBjaGVjayBmb2N1c2VzIHNwZWNpZmljYWxseSBvbiBjaGFuZ2VzIHRoYXQgdG91Y2ggb2ZmbG9hZCBjb25maWd1cmF0aW9ucyBvciByZWFjaCB0aGUgcmVhbCBkZXZpY2UsIGFuZCB0aGUgY2hlY2sgcmVxdWlyZXMgYENBUF9ORVRfQURNSU5gIGluIHRoYXQgKnJlYWxfZGV2KiBuYW1lc3BhY2UsIHVzaW5nIGBydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKClgLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm5zLCB3aGVuIGxvb2tpbmcgYXQgYSBwYXRjaCBsaWtlIHRoaXMsIGFyZSBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IGZyb20gYSBzZWN1cml0eSBwb2ludCBvZiB2aWV3LlxuXG4qICAgKipVc2VyLVNwYWNlIERhdGEgU3RydWN0dXJlczoqKiBOby4gSXQncyBqdXN0IHNldHRpbmcgYW4gZXJyb3IgbWVzc2FnZSB2aWEgYE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgLi4uKWAgaWYgdGhlIHBlcm1pc3Npb24gY2hlY2sgZmFpbHMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBleGlzdGluZyBvbmVzIGFyZSBiZWluZyBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGlzc3Vlcy5cbiogICAqKkNvbmRpdGlvbmFsIExvZ2ljIGFuZCBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBOb3BlLiBUaGUgY29kZSBhY2Nlc3NlcyBhIGBtYWNzZWNgIHBvaW50ZXIgdGhyb3VnaCBgbWFjc2VjX3ByaXYoZGV2KWAsIHdoaWNoIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhlIGBkYXRhYCBhcnJheSBjb21lcyBkaXJlY3RseSBmcm9tIGBydG5sYCB3aGljaCBwYXJzZXMgbmV0bGluayBhdHRyaWJ1dGVzIHNvIGl0IGlzIGluaXRpYWxpemVkLiBgbWFjc2VjX2lzX29mZmxvYWRlZChtYWNzZWMpYCBhbmQgYG1hY3NlYy1cdTAwM2VvZmZsb2FkYCBhcmUgZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkcy4gU28sIG5vIGNvbmNlcm5zIHRoZXJlLlxuKiAgICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbjoqKiBOb3QgaGFwcGVuaW5nLiBUaGUgcGF0Y2ggZG9lc24ndCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgd2UnZCBuZWVkIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyLlxuKiAgICoqQm91bmRzIENoZWNrcy9CdWZmZXIgTWFuaXB1bGF0aW9uOioqIE5vcGUuIE5vIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgYnVmZmVyIGNoZWNrcywgbGVuZ3Rocywgb3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcyBjb250cm9sIG1lYXN1cmUgd2l0aGluIHRoZSBgcnRubGAgY2hhbmdlbGluayBjYWxsYmFjayBmb3IgTUFDc2VjLiBJdCdzIGEgcGVybWlzc2lvbiBnYXRlLCBub3QgYSBkYXRhIG1hbmlwdWxhdGlvbiBvciBhbGxvY2F0aW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhZnRlciBnb2luZyB0aHJvdWdoIGl0LCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiAqKk5lZWRzS01TQU4gPSBmYWxzZSoqLlxuXG5GaW5hbGx5LCBsZXQgbWUgY2xhcmlmeSB0aGUgcmF0aW9uYWxlIGFuZCBjb250cmFzdCBpdCB3aXRoIEtBU0FOOlxuXG4qICAgKipLQVNBTjoqKiBXZSB1c2UgdGhpcyB0byBodW50IGZvciBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgLSB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdGhhdCBraW5kIG9mIHRoaW5nLlxuKiAgICoqS01TQU46KiogVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSB0byB1c2VyIHNwYWNlLlxuXG5UaGlzIHBhdGNoLCBob3dldmVyLCBpcyBzaW1wbHkgYWJvdXQgbmFtZXNwYWNlIGNhcGFiaWxpdHkgdmFsaWRhdGlvbiwgYG1hY3NlY19jaGFuZ2VsaW5rX2NoZWNrX25ldG5zKClgLCB1c2luZyBgcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZSgpYCB3aGVuIG9mZmxvYWQgY29uZmlndXJhdGlvbiBtaWdodCByZWFjaCBgcmVhbF9kZXZgIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuIE5vIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vIGJ1ZmZlciBvcGVyYXRpb25zIGFyZSBpbnRyb2R1Y2VkLCBhbmQgaW1wb3J0YW50bHksIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IG9ubHkgY2hlY2tzIHRoZSBwZXJtaXNzaW9uIG9uIHRoZSBuYW1lc3BhY2UuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZCwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUuIEl0J3MgYSBzb2xpZCwgY2xlYW4sIHBlcm1pc3Npb24gY2hlY2ssIGFuZCBubyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMTo0OTo0MS4zNjMyMDAyNzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uIGNoZWNrIChtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucykgdmVyaWZ5aW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbCBkZXZpY2UncyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uIGNoZWNrIChtYWNzZWNfY2hhbmdlbGlua19jaGVja19uZXRucykgdmVyaWZ5aW5nIHRoYXQgdGhlIGNhbGxlciBoYXMgQ0FQX05FVF9BRE1JTiBpbiB0aGUgcmVhbCBkZXZpY2UncyBuZXR3b3JrIG5hbWVzcGFjZSB3aGVuIG1vZGlmeWluZyBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb24gYSBNQUNzZWMgbmV0ZGV2aWNlIGFjcm9zcyBuYW1lc3BhY2VzLiBJdCBvbmx5IGluc3BlY3RzIGV4aXN0aW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvaW50ZXJzIGFuZCBzdHJ1Y3QgbWFjc2VjX2RldiBmaWVsZHMsIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIGEgc3RhdGljIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIGVycm9yIHN0cmluZyBvbiBwZXJtaXNzaW9uIGRlbmlhbC4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29weWluZywgb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7x9fk[1] Phase: Succeeded StartedAt: 2026-09-11 21:49:52 +0000 UTC FinishedAt: 2026-09-11 21:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 21:49:52 +0000 UTC FinishedAt: 2026-09-11 21:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2] Phase: Succeeded StartedAt: 2026-09-11 21:49:52 +0000 UTC FinishedAt: 2026-09-12 01:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 21:49:52 +0000 UTC FinishedAt: 2026-09-12 01:31:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 21:49:52 +0000 UTC FinishedAt: 2026-09-11 21:50:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 21:49:52 +0000 UTC FinishedAt: 2026-09-11 21:50:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7x9fk/series-workflow7x9fk-convert-artifact-3753243896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 21:50:12 +0000 UTC FinishedAt: 2026-09-11 22:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 21:50:12 +0000 UTC FinishedAt: 2026-09-11 22:07:11 +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:*7f1b2989-ddba-4662-9144-013ba9f64cd5,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-workflow7x9fk/series-workflow7x9fk-convert-artifact-3753243896/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": "490c2493-01a3-44a5-afe6-b795075abe57", "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-workflow7x9fk/series-workflow7x9fk-build-action-3089873326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 21:50:12 +0000 UTC FinishedAt: 2026-09-11 22:07:01 +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:*7f1b2989-ddba-4662-9144-013ba9f64cd5,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-workflow7x9fk/series-workflow7x9fk-convert-artifact-3753243896/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": "490c2493-01a3-44a5-afe6-b795075abe57", "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-workflow7x9fk/series-workflow7x9fk-build-action-3089873326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 22:07:11 +0000 UTC FinishedAt: 2026-09-11 22:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 22:07:11 +0000 UTC FinishedAt: 2026-09-11 22:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 22:07:11 +0000 UTC FinishedAt: 2026-09-11 22:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 22:07:11 +0000 UTC FinishedAt: 2026-09-11 22:07:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7x9fk/series-workflow7x9fk-convert-artifact-2462330207/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 22:07:21 +0000 UTC FinishedAt: 2026-09-11 22:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 22:07:21 +0000 UTC FinishedAt: 2026-09-11 22:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*490c2493-01a3-44a5-afe6-b795075abe57,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-workflow7x9fk/series-workflow7x9fk-build-action-3089873326/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-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 22:09:23 +0000 UTC FinishedAt: 2026-09-11 22:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 22:09:23 +0000 UTC FinishedAt: 2026-09-11 22:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 22:09:23 +0000 UTC FinishedAt: 2026-09-11 22:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 22:09:23 +0000 UTC FinishedAt: 2026-09-11 22:25:21 +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:*7f1b2989-ddba-4662-9144-013ba9f64cd5,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-workflow7x9fk/series-workflow7x9fk-convert-artifact-2462330207/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": "95c6ec31-96fa-47bd-bdd5-d05f8d3c5209", "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-workflow7x9fk/series-workflow7x9fk-build-action-3801398003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 22:09:23 +0000 UTC FinishedAt: 2026-09-11 22:25:10 +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:*7f1b2989-ddba-4662-9144-013ba9f64cd5,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-workflow7x9fk/series-workflow7x9fk-convert-artifact-2462330207/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": "95c6ec31-96fa-47bd-bdd5-d05f8d3c5209", "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-workflow7x9fk/series-workflow7x9fk-build-action-3801398003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 22:25:21 +0000 UTC FinishedAt: 2026-09-11 22:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 22:25:21 +0000 UTC FinishedAt: 2026-09-11 22:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 22:25:21 +0000 UTC FinishedAt: 2026-09-11 22:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 22:25:21 +0000 UTC FinishedAt: 2026-09-11 22:27:16 +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:*95c6ec31-96fa-47bd-bdd5-d05f8d3c5209,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-workflow7x9fk/series-workflow7x9fk-build-action-3801398003/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-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 22:27:26 +0000 UTC FinishedAt: 2026-09-12 01:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 22:27:26 +0000 UTC FinishedAt: 2026-09-12 01:31:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"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:*490c2493-01a3-44a5-afe6-b795075abe57,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95c6ec31-96fa-47bd-bdd5-d05f8d3c5209,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-workflow7x9fk/series-workflow7x9fk-build-action-3089873326/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-workflow7x9fk/series-workflow7x9fk-build-action-3801398003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 22:27:26 +0000 UTC FinishedAt: 2026-09-11 22:27:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 22:27:26 +0000 UTC FinishedAt: 2026-09-11 22:27:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"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-workflow7x9fk/series-workflow7x9fk-convert-artifact-3937856376/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 22:27:26 +0000 UTC FinishedAt: 2026-09-11 22:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 22:27:26 +0000 UTC FinishedAt: 2026-09-11 22:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 22:27:26 +0000 UTC FinishedAt: 2026-09-11 22:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 22:27:36 +0000 UTC FinishedAt: 2026-09-12 01:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7x9fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macsec_changelink_check_netns","macsec_changelink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACSEC","NET_NS"],"series_id":"bf439aa4-7b8a-4b11-a213-9e9843925f21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 22:27:36 +0000 UTC FinishedAt: 2026-09-12 01:31:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*490c2493-01a3-44a5-afe6-b795075abe57,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95c6ec31-96fa-47bd-bdd5-d05f8d3c5209,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-workflow7x9fk/series-workflow7x9fk-build-action-3089873326/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-workflow7x9fk/series-workflow7x9fk-build-action-3801398003/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-workflow7x9fk/series-workflow7x9fk-convert-artifact-3937856376/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,}