Name: series-workflowmrp4t Phase: Succeeded StartedAt: 2026-08-10 20:41:44 +0000 UTC FinishedAt: 2026-08-11 00:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[0] Phase: Succeeded StartedAt: 2026-08-10 20:41:44 +0000 UTC FinishedAt: 2026-08-10 21:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 20:41:44 +0000 UTC FinishedAt: 2026-08-10 21:12:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "44d7c598-ee45-48ad-bd8c-d2bbea6fb038" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_configure", "loop_change_fd", "zloop_ctl_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2xvb3BfY2hhbmdlX2ZkJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgdW5kZXJmbG93IGJ1ZyB3aGVyZSBgc3QuZGlvX21lbV9hbGlnbmAgY291bGQgYmUgMCwgcmVzdWx0aW5nIGluIGBzdC5kaW9fbWVtX2FsaWduIC0gMWAgZXZhbHVhdGluZyB0byBhIGh1Z2UgdmFsdWUgKGUuZy4sIGAweGZmZmZmZmZmYCkuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWxpZ25tZW50IGNhbGN1bGF0aW9ucyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMuIFRoZSBmaXggYWRkcyBhIGNoZWNrIGZvciBgc3QuZGlvX21lbV9hbGlnbiAhPSAwYCBhbmQgYm91bmRzIHRoZSBhbGlnbm1lbnQgdG8gYFBBR0VfU0laRSAtIDFgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBub3IgYXJlIHRoZXJlIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSB0aGUgdW5kZXJmbG93IHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZWQ3ZGE4ZTM3OTA0MTk2NmFhZTA4MjYzZGM0ZWE2N2JkYzJmODY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggODYzOWZhMzRiODQ3MC4uY2JmMWUyY2UyNzEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTQ1OCwxMiAmIzQzOzQ1OCwxNCBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xuIFx0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiYjNDM7XHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uICBUaGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyB6ZXJvZWQgYWxpZ25tZW50cyBpZiB0aGVcbiYjNDM7XHQgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4mIzQzO1x0ICogZGV2aWNlIGxpbWl0cyBpbiB0aGF0IGNhc2UuXG4gXHQgKi9cbiBcdGlmICghdmZzX2dldGF0dHIoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbiYjNDM7XHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDQzMjNhYzEwOGNhZTguLmYwY2EyMjE1MjRkYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTEwNDIsMTIgJiM0MzsxMDQyLDE0IEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuIFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbWluZ1xuIFx0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiYjNDM7XHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uICBUaGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyB6ZXJvZWQgYWxpZ25tZW50cyBpZiB0aGVcbiYjNDM7XHQgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4mIzQzO1x0ICogZGV2aWNlIGxpbWl0cyBpbiB0aGF0IGNhc2UuXG4gXHQgKi9cbiBcdGlmICghdmZzX2dldGF0dHIoXHUwMDI2em9uZS1cdTAwM2VmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xuJiM0MztcdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSBcdTAwMjZcdTAwMjYgc3QuZGlvX21lbV9hbGlnbikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4gXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZWQ3ZGE4ZTM3OTA0MTk2NmFhZTA4MjYzZGM0ZWE2N2JkYzJmODY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDg2MzlmYTM0Yjg0NzAuLmNiZjFlMmNlMjcxMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC00NTgsMTIgJiM0Mzs0NTgsMTQgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCSAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nCiAJICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzCiAJICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuCi0JICogdXNlZCBmb3IgZGlyZWN0LWlvLgomIzQzOwkgKiB1c2VkIGZvciBkaXJlY3QtaW8uICBUaGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyB6ZXJvZWQgYWxpZ25tZW50cyBpZiB0aGUKJiM0MzsJICogZmlsZSBjYW4mIzM5O3QgYmUgdXNlZCBmb3IgZGlyZWN0LWlvIGF0IGFsbCwgc28gZmFsbCBiYWNrIHRvIHRoZSBibG9jawomIzQzOwkgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS4KIAkgKi8KIAlpZiAoIXZmc19nZXRhdHRyKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pKSB7CiYjNDM7CSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pICZhbXA7JmFtcDsgc3QuZGlvX21lbV9hbGlnbikgewogCQlsby0mZ3Q7bG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTsKJiM0MzsJCWxvLSZndDtsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jCmluZGV4IDQzMjNhYzEwOGNhZTguLmYwY2EyMjE1MjRkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmMKQEAgLTEwNDIsMTIgJiM0MzsxMDQyLDE0IEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLAogCSAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmcKIAkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKIAkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KLQkgKiB1c2VkIGZvciBkaXJlY3QtaW8uCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZQomIzQzOwkgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrCiYjNDM7CSAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLgogCSAqLwogCWlmICghdmZzX2dldGF0dHIoJmFtcDt6b25lLSZndDtmaWxlLSZndDtmX3BhdGgsICZhbXA7c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSAmYW1wOyZhbXA7Ci0JICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikgJmFtcDsmYW1wOyBzdC5kaW9fbWVtX2FsaWduKSB7CiAJCXpsby0mZ3Q7YmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247Ci0JCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxOwomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTsKIAl9IGVsc2UgaWYgKHNiX2JkZXYpIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gYmRldl9waHlzaWNhbF9ibG9ja19zaXplKHNiX2JkZXYpOwogCQl6bG8tJmd0O2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIExvb3AgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgc3QuZGlvX21lbV9hbGlnbmAgaXMgaGFuZGxlZCB3aXRoaW4gYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIChpbiBgbG9vcC5jYCkgYW5kIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgKGluIGB6bG9vcC5jYCkuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2ssIGAmYW1wOyZhbXA7IHN0LmRpb19tZW1fYWxpZ25gLCBhbmQgYSBsaW1pdGluZyBjb25kaXRpb246IGBsb19kaW9fbWVtX2FsaWduYCBpcyBub3cgY2FwcGVkIGF0IGBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgaXQgc2VlbXMgcmVsYXRlZCB0byBEaXJlY3QgSS9PIGFsaWdubWVudC4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8gZGVlcGVyPyBJcyB0aGlzIHBhdGNoIGV2ZW4gcmVhY2hhYmxlLCBhbmQgY291bGQgaXQgYmVuZWZpdCBmcm9tIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGlzIHBhcnQgb2YgdGhlIGxvb3AgZGV2aWNlIGRyaXZlci4gR2l2ZW4gdGhlIHdpZGVzcHJlYWQgdXNlIG9mIGxvb3AgZGV2aWNlcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGZ1bmN0aW9uIGFuZCBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gV2UgbWlnaHQgd2FudCB0byBsb29rIGF0IGhvdyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYWZmZWN0IHRoaXMuCgpgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGFsc28gc2VlbXMgaW50ZXJlc3RpbmcuIEJ1dCB3YWl0IGEgbWludXRlLCBgemxvb3AuY2AuLi4gaXMgdGhhdCBhIHN0YW5kYXJkIGtlcm5lbCBkcml2ZXIsIG9yIGEgbW9kdWxlIEkgbmVlZCB0byBsb29rIHVwPyBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0OyBJIGRvbiYjMzk7dCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZC4gTGV0JiMzOTtzIGxvb2sgdGhhdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9nZXRfYmxvY2tfc2l6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTAxNz1zdGF0aWMgc3RydWN0IGZpbGUgKnpsb29wX2ZpbHBfb3Blbl9mbXQoaW50IG9mbGFncywgdW1vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMzU6c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi1cdFx0XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDc4PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTMtXHRcdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE0Olx0XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExNS1cdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUzLVx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTQ6XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1OC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU5Olx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqS2NvbmZpZyBEaXZlIGZvciBMb29waW5nIENvbnN0cnVjdHMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgS2NvbmZpZywgaGFuZGxlcyBsb29wcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGNvbnN0cnVjdHMuIEkga25vdyB0aGV5JiMzOTtyZSBvdXQgdGhlcmUgc29tZXdoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb24uIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc3VidGxlIGRpZmZlcmVuY2VzIHRoYXQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yLiBJIHdpbGwgY2hlY2sgdGhlIEtjb25maWcgZG9jdW1lbnRhdGlvbiBhbmQgcmVsZXZhbnQgZmlsZXMgZm9yIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIHRob3NlIGNvbnN0cnVjdHMuIEFuZCBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoYXQgdGhleSB3b3JrIHdpdGggZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGNvbmRpdGlvbmFscy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCBJIGNhbiBleHBsb2l0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBLY29uZmlnIGZvciBgemxvb3BgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgcmVnYXJkaW5nIHRoZSBmdW5jdGlvbmFsaXR5IHBvdGVudGlhbGx5IGVuY2Fwc3VsYXRlZCBieSAmIzM0O3psb29wLiYjMzQ7IElzIGl0IGEgZmVhdHVyZSwgYSBkcml2ZXIsIGFuIG9wdGlvbiwgb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3k/IFRoZSBzcGVjaWZpY3Mgb2Ygd2hhdCBgemxvb3BgICppcyogd2lsbCBkcmFtYXRpY2FsbHkgaW5mbHVlbmNlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgaXRzIEtjb25maWcgZW50cmllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3ltYm9scywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGNvbmRpdGlvbmFsIGJsb2NrcyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgS2NvbmZpZyBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IGB6bG9vcGAgZml0cyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWkxPT1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKSG1tLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVsZWdhbnQgd2F5IHRvIGhhbmRsZSB0aGlzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGJvaWxzIGRvd24gdG8gYSBsb29wLCBwb3RlbnRpYWxseSB3aXRoaW4gYSBibG9jaywgcmVsYXRlZCB0byBaLWF4aXMgbW92ZW1lbnQuIEluc3RlYWQgb2YgYSBtb3JlIHZlcmJvc2UgYXBwcm9hY2gsIHdvdWxkIGEgY29uY2lzZSBgY29uZmlnIFpMT09QYCBvciBldmVuIGBjb25maWcgQkxLX1pMT09QYCBjb21tYW5kIGJlIHN1ZmZpY2llbnQ/IFRoYXQgYXBwcm9hY2ggd291bGQgYmUgbXVjaCBjbGVhbmVyIHRoYW4gYW55IG90aGVyIGFwcHJvYWNoLiBJIG5lZWQgdG8gYmFsYW5jZSBjbGFyaXR5IGFuZCBlZmZpY2llbmN5LCBhbmQgdGhlc2Ugc2hvcnQgb3B0aW9ucyBmZWVsIGxpa2UgYSBwb3RlbnRpYWwgd2luLiBJIGp1c3QgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggaXMgbW9yZSBzZW1hbnRpY2FsbHkgYXBwcm9wcmlhdGUsIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBpbXBsaWNpdCBiZWhhdmlvciBJJiMzOTttIG92ZXJsb29raW5nIHdpdGggZWl0aGVyIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgLipaTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqQ2hlY2tpbmcgdGhlIEJsb2NrIERyaXZlciBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgb3V0IGlmIGB6bG9vcC5jYCBpcyBwYXJ0IG9mIHRoZSBibG9jayBkcml2ZXIgZWNvc3lzdGVtLCBzcGVjaWZpY2FsbHkgaWYgaXRzIGJ1aWxkIGluc3RydWN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgYGRyaXZlcnMvYmxvY2svTWFrZWZpbGVgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGluaXRpYWwgZGlhZ25vc3RpYyBzdGVwIGZvciBhbnkga2VybmVsIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSB0aGVyZSwgaWYgaXQmIzM5O3MgdGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGU9NDA9b2JqLSQoQ09ORklHX0JMS19ERVZfVUJMSylcdFx0XHQmIzQzOz0gdWJsa19kcnYub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QKSAmIzQzOz0gemxvb3Aub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS00Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBab25lZCBCbG9jayBEZXZpY2UgU3VwcG9ydCB3aXRoIExvb3AgRGV2aWNlcyoqCgpSaWdodCwgYENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1BgLi4uIFRoYXQgaW1tZWRpYXRlbHkgYnJpbmdzIHVwIGEgZmV3IGNvbnNpZGVyYXRpb25zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBlbXVsYXRpbmcgYSB6b25lZCBibG9jayBkZXZpY2UsIGxpa2VseSBTTVIgb3Igc29tZSBvdGhlciBmb3JtIG9mIGhvc3QtbWFuYWdlZCBzdG9yYWdlLCB1c2luZyBhIHJlZ3VsYXIgbG9vcCBkZXZpY2Ugb24gYSBzdGFuZGFyZCBmaWxlIHN5c3RlbS4gT2theSwgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGZhaXJseSBncmFudWxhciwgc28gdGhpcyBzcGVjaWZpYyBvcHRpb24gcHJvYmFibHkgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciB0aGlzICpzcGVjaWZpYyogdXNlIGNhc2Ug4oCTIHpvbmUgc3VwcG9ydCBvbiBhIGxvb3AgZGV2aWNlLgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHBvdGVudGlhbCBjaGFsbGVuZ2VzLiBUaGUgZnVuZGFtZW50YWwgYWJzdHJhY3Rpb24gbWlzbWF0Y2ggaXMgb2J2aW91cy4gQSBzdGFuZGFyZCBmaWxlIHN5c3RlbSBpc24mIzM5O3Qgem9uZS1hd2FyZSwgc28gaG93IGFyZSB3ZSBnb2luZyB0byB0cmFuc2xhdGUgem9uZSBib3VuZGFyaWVzIGFuZCBjb25zdHJhaW50cyBvbnRvIGEgYmxvY2stYmFzZWQgbG9vcCBkZXZpY2U/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzaW5nbGUgdW5kZXJseWluZyBmaWxlLCBvciBtdWx0aXBsZSBmaWxlcyByZXByZXNlbnRpbmcgem9uZXM/IFdoYXQgbWV0YWRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgZW1wbG95ZWQ/IEFyZSB3ZSBhdHRlbXB0aW5nIHRvIHNpbXVsYXRlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgU01SLCBvciBqdXN0IHByb3ZpZGluZyBhIGZ1bmN0aW9uYWwgaW50ZXJmYWNlIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudD8KClRoZW4gSSB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB3cml0ZSBwYXRocy4gRG9lcyB0aGlzIGludm9sdmUgc29tZSBzb3J0IG9mIGJ1ZmZlcmluZyBhbmQgY29hbGVzY2luZyB0byBlbXVsYXRlIHNlcXVlbnRpYWwgd3JpdGUgcmVxdWlyZW1lbnRzPyBBcmUgdGhlcmUgc3BlY2lmaWMgem9uZSBtYW5hZ2VtZW50IGNvbW1hbmRzIGltcGxlbWVudGVkIHRvIG1hcCB0byB0aGUgbG9vcCBkZXZpY2UmIzM5O3MgdW5kZXJseWluZyBibG9jayBzdG9yYWdlPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGdlbmVyaWMgYmxvY2sgbGF5ZXIgYW5kIGl0cyBzY2hlZHVsaW5nIGFsZ29yaXRobXMuIEFyZSB0aGVyZSBwZXJmb3JtYW5jZSB0cmFkZS1vZmZzPyBMYXRlbmN5IGNvbnNpZGVyYXRpb25zPyBBcmUgd2UgY29tcGxldGVseSBtYXNraW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLCBvciBwcm92aWRpbmcgYSB0cmFuc3BhcmVudCBpbnRlcmZhY2UgdG8gdGhlIGVuZCB1c2VyPwoKSSBhc3N1bWUgdGhlIGludGVudGlvbiBpcyBmb3IgZGV2ZWxvcG1lbnQsIGVtdWxhdGlvbiwgb3IgdGVzdGluZyBvZiB6b25lZCBzdG9yYWdlLCBhcyB0aGUgb3ZlcmhlYWQgd291bGQgbGlrZWx5IGJlIGhpZ2ggaWYgdGhpcyB3ZXJlIGRlcGxveWVkIGluIGEgcHJvZHVjdGlvbiBzZXR0aW5nLiBJdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBhcHByb2FjaCwgYnV0IG15IGZpcnN0IHF1ZXN0aW9ucyB3b3VsZCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaG93IHdyaXRlIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgYW5kIHdoYXQga2luZCBvZiB3cml0ZSBwZW5hbHRpZXMgYXJlIGJlaW5nIGltcG9zZWQuIE5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTG9vcCBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBsb29wIGRldmljZSBzaXR1YXRpb24uIFRoZSB0d28gY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFRob3NlIGFyZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLCBvciBhdCBsZWFzdCB0aGV5IHNob3VsZCBiZS4KCk15IG1haW4gdGFyZ2V0cywgZnVuY3Rpb24td2lzZSwgYXJlIGdvaW5nIHRvIGJlIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBhbmQgYHpsb29wX2dldF9ibG9ja19zaXplYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHJlbGF0ZWQgdG8gZGlyZWN0IEkvTyBhbmQgcGVyaGFwcyB6b25lZCBzdG9yYWdlIGNvbnNpZGVyYXRpb25zIHdpdGhpbiB0aG9zZS4KClRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGp1bXAgcmlnaHQgaW50byBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gSG9wZWZ1bGx5LCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgaWxsdW1pbmF0ZSB0aGUgaW1wYWN0IG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTQzOT1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUxOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE4PXN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjUtXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyNjpcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtNTI3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU5OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBBcyBJJiMzOTttIGNvbmZpZ3VyaW5nIGEgbG9vcCBkZXZpY2UsIEkmIzM5O20gbm93IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBvbmUgYXJlIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIG9uZXMgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIGdyYXNwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgpTbywgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgYXJlIHdlIGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgcGljdHVyZSB3aXRoIGBsb29wX2NvbmZpZ3VyZWA/IE9yIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaW4gc2V0dGluZyB1cCB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpdGggYGxvb3Bfc2V0X2ZkYD8gT3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIHNldHRpbmcgdXAgdGhlIHN0YXR1cyBvciBmbGFncyB3aXRoIGBsb29wX3NldF9zdGF0dXNgPyBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBlYWNoIG9mIHRoZXNlIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBwaWVjZXMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9hc3NpZ25fYmFja2luZ19maWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTQ5Mz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MTctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MTg6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01NDg9c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTYwNS1cdG1hcHBpbmdfc2V0X2dmcF9tYXNrKG9sZF9maWxlLVx1MDAzZWZfbWFwcGluZywgbG8tXHUwMDNlb2xkX2dmcF9tYXNrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjYwNjpcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02MDctXHRsb29wX3VwZGF0ZV9kaW8obG8pO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDU9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Mi1cdGxvLVx1MDAzZWxvX2RldmljZSA9IGJkZXY7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDgzOlx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbnMqKgoKSG1tLCB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHN0cmVhbWxpbmUgdGhpc+KApiBgbG9vcF9jb25maWd1cmVgIGFuZCBgbG9vcF9jaGFuZ2VfZmRgIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgbGlrZWx5IHRvIG9mZmVyIHNvbWUgcm9vbSBmb3IgaW1wcm92ZW1lbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlLCBvZiBjb3Vyc2UuCgpNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGNoZWNrIGB6bG9vcC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgd29ya3Mgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgYmxvY2tpbmcgYmVoYXZpb3Igd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTc9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM1OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzYtXHRcdFx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA3OD1zdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEzLVx0XHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTExNDpcdFx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXHRcdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1My1cdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU0Olx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTUtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1OTpcdHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIGB6bG9vcF9pbml0X3pvbmVgIENhbGwgU3RhY2sqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gU29tZXRoaW5nJiMzOTtzIGdvaW5nIG9uIHdpdGggYHpsb29wX2luaXRfem9uZWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogZXhhY3RseS4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjaywgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBpdHMgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSB0byBwaW5wb2ludCB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcgb3IgdGhlIGlzc3VlIEkgc3VzcGVjdC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgZ3JlcHBpbmcgb3IgdXNpbmcgbXkgSURFJiMzOTtzIGNhbGwgaGllcmFyY2h5IGZlYXR1cmUgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfaW5pdF96b25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMDM1PXN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc3LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNzg6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVx0XHRcdCAgIHVuc2lnbmVkIGludCB6b25lX25vLCBib29sIHJlc3RvcmUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExODc9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjgzLVx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIHpvbmUgZmlsZXMsIHdlIGFyZSByZXN0b3JpbmcgYSBkZXZpY2UgY3JlYXRlZCBieSBhXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4NDpcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyODUtXHQgKiB0aGF0IHRoZSB6b25lIGZpbGVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgY29uZmlndXJhdGlvbiBnaXZlbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3pvbmVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyODk6XHRcdHJldCA9IHpsb29wX2luaXRfem9uZSh6bG8sIG9wdHMsIGksIHJlc3RvcmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTAtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIFpsb29wIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIGB6bG9vcF9jdGxfYWRkYCBpcyB0aGUgYWR2ZXJ0aXNlZCBlbnRyeSBwb2ludCBmb3IgdGhlIFpsb29wIGZ1bmN0aW9uYWxpdHkuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQmIzM5O3MgaW52b2tlZC4gSXMgdGhpcyBhIHRyYWRpdGlvbmFsIHN5c3RlbSBjYWxsPyBPciBhcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLCBsaWtlIGFuIGBpb2N0bGA/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgbmF0dXJlLiBLbm93aW5nIHRoYXQgd2lsbCBzaGFwZSBteSBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbiBwYXRoIOKAkyB1bmRlcnN0YW5kaW5nIGRhdGEgc3RydWN0dXJlcywgcGVybWlzc2lvbiBtb2RlbHMsIG9yIGVycm9yIGNvZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9jdGxfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMTY4PXN0YXRpYyBib29sIHpsb29wX2Rldl9leGlzdHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg2LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExODc6c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODgte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjYxPXN0YXRpYyBzc2l6ZV90IHpsb29wX2N0bF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2OTktXHRjYXNlIFpMT09QX0NUTF9BREQ6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTcwMDpcdFx0cmV0ID0gemxvb3BfY3RsX2FkZChcdTAwMjZvcHRzKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzAxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxNwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKk15IEltbWVkaWF0ZSBBbmFseXNpcyBvZiB0aGUgemxvb3AgQ29udHJvbCBQYXRoKioKCkFscmlnaHQsIGB6bG9vcF9jdGxfd3JpdGVgIGlzIGNsZWFybHkgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgemxvb3AgY29udHJvbCBjb21tYW5kcy4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBjb250cm9sbGluZyB0aGUgbG9vcCBkZXZpY2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnRlcm5hbGx5IHdpdGhpbiBgbG9vcF9jb25maWd1cmVgIGFuZCBgbG9vcF9jaGFuZ2VfZmRgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFsbW9zdCBjZXJ0YWlubHkgcmVseSBvbiBgaW9jdGxgIGNhbGxzIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIGxvb3AgZGV2aWNlIGl0c2VsZi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlbSBiZWluZyBpb2N0bHMgYXJlIGNvcnJlY3QsIGJlY2F1c2UgdGhhdCBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBrZXJuZWwuIEkgY2FuIGltbWVkaWF0ZWx5IHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGRyaXZlciYjMzk7cyBjb2RlIGZvciB0aGVzZSBmdW5jdGlvbnMgdG8gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGlvY3RsIGNhbGwsIGFuZCB3aGF0IGRhdGEgZ2V0cyBwYXNzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9uIG9mIHRoZSBvcGVyYXRpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9OTY9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDctICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwODogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA5LSAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTQ5Mz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MDgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MDk6XHRcdC8qIE9yZGVyIHdydCBzZXR0aW5nIGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSBpbiBsb29wX2NvbmZpZ3VyZSgpLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtNTEwLVx0XHRybWIoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz05NzA9c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTAwNTpzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMDYtXHRcdFx0ICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMzQtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSkge1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTAzNTpcdFx0ZXJyb3IgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGJkZXYsIGxvb3BfY29uZmlndXJlLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMzYtXHRcdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTIyLVx0aWYgKCEobW9kZSBcdTAwMjYgQkxLX09QRU5fRVhDTCkpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTIzOlx0XHRiZF9hYm9ydF9jbGFpbWluZyhiZGV2LCBsb29wX2NvbmZpZ3VyZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTI0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzAtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMzE6XHRcdGJkX2Fib3J0X2NsYWltaW5nKGJkZXYsIGxvb3BfY29uZmlndXJlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzItb3V0X3B1dGY6XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTIxMj1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNy1cdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVx0ICpcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIxLVx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcJiMzNDtzdHJ1Y3QgZmlsZVwmIzM0O1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTIyMjpcdCAqIHdoaWNoIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBmb3VuZCB2aWEgZmdldCgpIHdhcyB0aGlzXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIzLVx0ICogbG9vcCBkZXZpY2UuXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUzOT1zdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTU3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU1ODpcdFx0cmV0dXJuIGxvb3BfY29uZmlndXJlKGxvLCBtb2RlLCBiZGV2LCBcdTAwMjZjb25maWcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU1OS1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU2NjpcdFx0cmV0dXJuIGxvb3BfY29uZmlndXJlKGxvLCBtb2RlLCBiZGV2LCBcdTAwMjZjb25maWcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2Ny1cdH1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz0zNDk9c3RhdGljIGludCBudm1lX2xvb3BfY29ubmVjdF9pb19xdWV1ZXMoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTM2Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjM2MzpzdGF0aWMgaW50IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtMzY0LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz00NDA9c3RhdGljIHZvaWQgbnZtZV9sb29wX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNDU4LVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NDU5Olx0cmV0ID0gbnZtZV9sb29wX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShjdHJsKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTQ2MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM9NTUyPXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX2xvb3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTU5NS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjU5NjpcdHJldCA9IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy01OTctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2ggZm9yIEJsb2NrIERyaXZlciBBbGlnbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGVudHJ5IHBvaW50czogYGxvb3BfY29uZmlndXJlYCwgYGxvb3BfY2hhbmdlX2ZkYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRocyB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGlzIG5ldyBhbGlnbm1lbnQgbG9naWMuICBMZXQmIzM5O3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBsb29wX2NvbmZpZ3VyZWAgZGlyZWN0bHkgY2FsbHMgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGFuZCB0aGF0LCBpbiB0dXJuLCBjYWxscyBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAuIEdvdCBpdC4gQW5kIGZvciBgemxvb3BgLCBgemxvb3BfY3RsX3dyaXRlYCBzZWVtcyB0byBnbyB0byBgemxvb3BfY3RsX2FkZGAsIHRoZW4gYHpsb29wX2luaXRfem9uZWAsIGFuZCBmaW5hbGx5IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAuCgpOb3cgSSBzZWUsIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjYW4gYmUgemVyby4gVGhpcyBsZWFkcyB0byBhbiBpbnRlZ2VyIHVuZGVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGBsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbmAsIHBvdGVudGlhbGx5IHNldHRpbmcgaXQgdG8gYFVJTlRfTUFYYCBvciBgVUxPTkdfTUFYYCwgd2hpY2ggaXMgY2xlYXJseSBhIHByb2JsZW0uIFNvLCB0aGUgcGF0Y2ggaXMgY2FwcGluZyBpdCBhdCBgUEFHRV9TSVpFIC0gMWAgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nLiBBIGdvb2QgZml4IGZvciB0aGF0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgYmxvY2sgZHJpdmVyIGZpeCBhZmZlY3RpbmcgYm90aCBgbG9vcGAgYW5kIGB6bG9vcGAuICBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggYWxpZ25tZW50IGlzc3VlcywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCB0byBlbnN1cmUgc3RhYmlsaXR5LgoKVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgZWZmb3J0cywgSSB3aWxsIGZvY3VzIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3BfY2hhbmdlX2ZkYCBmb3IgdGhlIGBsb29wYCBkcml2ZXIsIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBmb3IgdGhlIGB6bG9vcGAgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nj1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwNy0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDktICovXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTI5PXN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQwLS8qXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1NDE6ICogbG9vcF9jaGFuZ2VfZmQgc3dpdGNoZWQgdGhlIGJhY2tpbmcgc3RvcmUgb2YgYSBsb29wYmFjayBkZXZpY2UgdG9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0Mi0gKiBhIG5ldyBmaWxlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3BlcmF0aW5nIHN5c3RlbSBpbnN0YWxsZXJzIHRvIGZyZWUgdXBcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01NDctICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1NDg6c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ5LVx0XHRcdCAgdW5zaWduZWQgaW50IGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMjEyPXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjE4Olx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTktXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjEtXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjIyOlx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjMtXHQgKiBsb29wIGRldmljZS5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NjgtXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU2OTpcdFx0cmV0dXJuIGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU3MC1cdGNhc2UgTE9PUF9DTFJfRkQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgemxvb3BfY3RsX3dyaXRlYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHpsb29wX2N0bF93cml0ZWAgZnVuY3Rpb24uIEkgdmFndWVseSByZWNhbGwgc29tZSBzcGVjaWZpYyBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgaXQuIEkga25vdyB0aGUgYmFzaWMgZmxvdywgYnV0IEkgbmVlZCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUgbnVhbmNlcyBvZiBob3cgYHpsb29wX2N0bF93cml0ZWAgZGVhbHMgd2l0aCBwb3RlbnRpYWxseSBjb21wbGV4IGNvbnRyb2wgcGF0aHMuIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGFzc3VtcHRpb25zIGl0IG1ha2VzLCBlc3BlY2lhbGx5IGFyb3VuZCByZXNvdXJjZSBhbGxvY2F0aW9uIG9yIGxvY2tpbmcgc3RyYXRlZ2llcy4gTm8gcG9pbnQgcmUtaW52ZW50aW5nIHRoZSB3aGVlbCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgaW50ZWdyYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY1Mj1zdGF0aWMgc3RydWN0IHpsb29wX2N0bF9vcCB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NjAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY2MTpzdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NjItXHRcdFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemxvb3BfY3RsX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTUtXHQucmVsZWFzZVx0PSB6bG9vcF9jdGxfcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzU2Olx0LndyaXRlXHRcdD0gemxvb3BfY3RsX3dyaXRlLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTctXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk0MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHpsb29wX2N0bF93cml0ZWAgSGFuZGxlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgemxvb3BfY3RsX3dyaXRlYCBoZXJlIOKAkyB0aGF0JiMzOTtzIHRoZSB3cml0ZSBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIHpsb29wIGNvbnRyb2wgZmlsZS4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBpbmZsdWVuY2UgYmVoYXZpb3IuIEJlZm9yZSBkaWdnaW5nIGluIGFueSBkZWVwZXIsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCBJIHNob3VsZCBrbm93IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQgYnV0IGRvbiYjMzk7dCB3YW50IHRvIHJlbHkgb24gcmVjYWxsLiBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgbG9vcF9zZXRfZmRgIGlzIHN0aWxsIGluIHBsYXksIHRoYXQgdGhlIGNvcmUgbWVjaGFuaXNtIEkmIzM5O20gZmFtaWxpYXIgd2l0aCBoYXNuJiMzOTt0IGJlZW4gZGVwcmVjYXRlZCBvciByYWRpY2FsbHkgYWx0ZXJlZC4gQSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgZnVuZGFtZW50YWxzIHN0aWxsIGFwcGx5LCBiZWZvcmUgSSBjYW4gaGF2ZSBjb25maWRlbmNlIGluIHRoZSByZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3Bfc2V0X2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgYExPT1BfU0VUX0ZEYCBJT0NUTCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgY2xlYXI6IHRoYXQgYExPT1BfU0VUX0ZEYCBpb2N0bCBjYWxsIGxlYWRzIGRpcmVjdGx5IGludG8gYGxvb3BfY29uZmlndXJlYC4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgb2YgY291cnNlLCBiZWNhdXNlIGBMT09QX1NFVF9GRGAgaXMgYWxsIGFib3V0IGNvbm5lY3RpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYSBsb29wIGRldmljZSwgYW5kIGBsb29wX2NvbmZpZ3VyZWAgaXMgd2hlcmUgdGhlIGRldmljZSYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MgYXJlLCB3ZWxsLCBjb25maWd1cmVkLCBpbmNsdWRpbmcgYmluZGluZyBhIGZpbGUgdG8gdGhlIGxvb3AgZGV2aWNlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJIGV4cGVjdC4gTm93IHRoZSByZWFsIHF1ZXN0aW9uIGJlY29tZXMsIGhvdyBpcyBgbG9vcF9jb25maWd1cmVgIGltcGxlbWVudGVkIGFuZCB3aGF0IGludGVybmFsIGNhbGxzIG1pZ2h0IGl0IG1ha2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0xPT1BfU0VUX0ZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdD0xMTE9aW5zdGFiaWxpdHkuIFRoaXMgaXMgY29uY2VwdHVhbGx5IHNpbWlsYXIgdG8gdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGVcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdDoxMTI6YGBMT09QX1NFVF9GRGBgIGlvY3RsLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0LTExMy1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDYtXHRzd2l0Y2ggKGNtZCkge1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTU0NzpcdGNhc2UgTE9PUF9TRVRfRkQ6IHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDgtXHRcdC8qXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcwMz1zdGF0aWMgaW50IGxvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyNC1cdFx0ZmFsbHRocm91Z2g7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzI1Olx0Y2FzZSBMT09QX1NFVF9GRDpcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MjYtXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9sb29wLmg9Nzc9c3RydWN0IGxvb3BfY29uZmlnIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbG9vcC5oLTEwMy1cbmluY2x1ZGUvdWFwaS9saW51eC9sb29wLmg6MTA0OiNkZWZpbmUgTE9PUF9TRVRfRkRcdFx0MHg0QzAwXG5pbmNsdWRlL3VhcGkvbGludXgvbG9vcC5oLTEwNS0jZGVmaW5lIExPT1BfQ0xSX0ZEXHRcdDB4NEMwMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgc28gSSYjMzk7bSBjb25uZWN0aW5nIHRoZSBkb3RzIGhlcmUuIGBMT09QX1NFVF9GRGAgKmRlZmluaXRlbHkqIGNhbGxzIGBsb29wX2NvbmZpZ3VyZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gU28sIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBsb29wX2NvbmZpZ3VyZWAsIGRlZmluaXRlbHksIGFuZCBhbHNvIGBsb29wX2NoYW5nZV9mZGAgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIGluIHRoaXMgY29udGV4dC4KCkFuZCB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYXJlIGBCTEtfREVWX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYC4gVGhvc2UgYXJlIHRoZSB0d28gcmVsZXZhbnQgY29uZmlncy4KCldhaXQgYSBzZWNvbmQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBwYXRoLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgQkxLX0RFVl9aT05FRF9MT09QYCBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgYnkgc2tpcHBpbmcgdGhhdCBzdGVwLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDM1Ni4gSSBrbm93IHRoaXMgZmlsZSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgYmxvY2sgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBjb25maWd1cmF0aW9uIHBvaW50IHRoZXJlLCBwZXJoYXBzIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IG9yIGEgZGVmaW5pdGlvbiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBkcml2ZXIuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBibG9jayBkZXZpY2VzLiBLbm93aW5nIHRoZSBkZXRhaWxzIGhlcmUgd2lsbCBoZWxwIG1lIHRvLi4uIHdlbGwsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgZGVidWcgYSBkcml2ZXIsIGN1c3RvbWl6ZSBhIGJ1aWxkLCB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgcGxhdGZvcm0mIzM5O3MgY29uZmlndXJhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0ICBTYXkgTiBpZiB5b3UgZG9uJiMzOTt0IHdhbnQgdG8gc3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGUuIEl0IGlzXG4gMzUxOlx0XHQgIHN1Z2dlc3RlZCB0byBlbmFibGUgTiBpZiB5b3VyIGFwcGxpY2F0aW9uKHVibGsgc2VydmVyKSBzd2l0Y2hlcyB0b1xuIDM1MjpcdFx0ICBpb2N0bCBjb21tYW5kIGVuY29kaW5nLlxuIDM1MzpcdFxuIDM1NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuIDM1NTpcdFxuIDM1NjpcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbiAzNTc6XHRcdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMzU4Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcbiAzNTk6XHRcdGhlbHBcbiAzNjA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgY3JlYXRlIGEgem9uZWQgYmxvY2sgZGV2aWNlIHVzaW5nXG4gMzYxOlx0XHQgIHJlZ3VsYXIgZmlsZXMgZm9yIHpvbmVzIChvbmUgZmlsZSBwZXIgem9uZXMpLiBUaGlzIGlzIHVzZWZ1bCB0byB0ZXN0XG4gMzYyOlx0XHQgIGZpbGUgc3lzdGVtcywgZGV2aWNlIG1hcHBlciBhbmQgYXBwbGljYXRpb25zIHRoYXQgc3VwcG9ydCB6b25lZCBibG9ja1xuIDM2MzpcdFx0ICBkZXZpY2VzLiBUbyBjcmVhdGUgYSB6b25lZCBsb29wIGRldmljZSwgbm8gdXNlciB1dGlsaXR5IGlzIG5lZWRlZCwgYVxuIDM2NDpcdFx0ICB6b25lZCBsb29wIGRldmljZSBjYW4gYmUgY3JlYXRlZCAob3IgcmUtc3RhcnRlZCkgdXNpbmcgYSBjb21tYW5kXG4gMzY1Olx0XHQgIGxpa2U6XG4gMzY2Olx0XG4gMzY3Olx0XHQgIGVjaG8gXCYjMzQ7YWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCYjMzQ7IFx1MDAzZSBcXFxuIDM2ODpcdFx0XHQvZGV2L3psb29wLWNvbnRyb2xcbiAzNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgWm9uZWQgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gYGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIG1ha2Ugc3VyZSBgQkxLX0RFVl9aT05FRGAgaXMgZW5hYmxlZCBpbiBvdXIgY29uZmlndXJhdGlvbi4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9MT09QYC4gQWx3YXlzIGdvb2QgdG8gc2VlIGlmIGVuYWJsaW5nIG9uZSB0aGluZyBoYXMgYW55IHVuZXhwZWN0ZWQga25vY2stb24gZWZmZWN0cyBlbHNld2hlcmUuIEl0JiMzOTtzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRjb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4gMTQxOlx0XHRib29sXG4gMTQyOlx0XHRkZWZhdWx0IEJMS19ERVZfVUJEXG4gMTQzOlx0XG4gMTQ0Olx0Y29uZmlnIEJMS19ERVZfTE9PUFxuIDE0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAxNDY6XHRcdGhlbHBcbiAxNDc6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgYSByZWd1bGFyIGZpbGUgYXMgYSBibG9ja1xuIDE0ODpcdFx0ICBkZXZpY2U7IHlvdSBjYW4gdGhlbiBjcmVhdGUgYSBmaWxlIHN5c3RlbSBvbiB0aGF0IGJsb2NrIGRldmljZSBhbmRcbiAxNDk6XHRcdCAgbW91bnQgaXQganVzdCBhcyB5b3Ugd291bGQgbW91bnQgb3RoZXIgYmxvY2sgZGV2aWNlcyBzdWNoIGFzIGhhcmRcbiAxNTA6XHRcdCAgZHJpdmUgcGFydGl0aW9ucywgQ0QtUk9NIGRyaXZlcyBvciBmbG9wcHkgZHJpdmVzLiBUaGUgbG9vcCBkZXZpY2VzXG4gMTUxOlx0XHQgIGFyZSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIG51bWJlciA3IGFuZCB0eXBpY2FsbHlcbiAxNTI6XHRcdCAgY2FsbGVkIC9kZXYvbG9vcDAsIC9kZXYvbG9vcDEgZXRjLlxuIDE1MzpcdFxuIDE1NDpcdFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcbiAxNTU6XHRcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcbiAxNTY6XHRcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxuIDE1NzpcdFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcbiAxNTg6XHRcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxuIDE1OTpcdFx0ICBkcml2ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzkxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBMb29wIERldmljZSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBsb29wIGRldmljZSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHpvbmVkIGxvb3BzLiBJIHNlZSB0aGVyZSBhcmUgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAgb24gdGhlIHN1cmZhY2UuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3aGljaCBhcmUgYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgLCBhbmQgYEJMS19ERVZfWk9ORURgLgoKSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGVudHJ5IHBvaW50cyB0byB1c2UsIGtlZXBpbmcgaW4gbWluZCB0aGUgZ3VpZGFuY2UgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSYjMzk7dmUgbm90ZWQgdGhyZWUga2V5IHN5bWJvbHMgdG8gY29uc2lkZXI6IGBsb29wX2NvbmZpZ3VyZWAsIGBsb29wX2NoYW5nZV9mZGAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYC4KCkluaXRpYWxseSwgSSBzZWUgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBub3QgaWRlYWwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBwcmVmZXJlbmNlLiBJIGluaXRpYWxseSB0aG91Z2h0IGl0IG1pZ2h0IGJlIGV4cG9ydGVkLCBidXQgbm8sIGl0JiMzOTtzIHN0YXRpYy4gTGV0IG1lIHNlZSBpZiBgemxvb3BfY3RsX2FkZGAgaXMgYSBiZXR0ZXIgb3B0aW9uLiBOb3BlLCB0aGF0JiMzOTtzIGFsc28gc3RhdGljLiBIb3dldmVyLCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgYHpsb29wX2N0bF93cml0ZWAgaXMgYWN0dWFsbHkgdGhlIGBmaWxlX29wZXJhdGlvbnNgIHdyaXRlIGhhbmRsZXIuIFRoYXQmIzM5O3MgYSBzdHJvbmcgZW50cnkgcG9pbnQgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gY29udGV4dC4gU28sIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBhbmFseXNpcy4KCmBsb29wX2NvbmZpZ3VyZWAgYW5kIGBsb29wX2NoYW5nZV9mZGAgYXJlIGFsc28gc3RhdGljLCBzbyB0aGV5IG5lZWQgZnVydGhlciBjb25zaWRlcmF0aW9uLiBUaGUgcHJvbXB0IHNheXMgdGhhdCB0aGUgcHJlZmVycmVkIGZ1bmN0aW9ucyBzaG91bGQgYmUgbm9uLXN0YXRpYy4gSG93ZXZlciwgYGxvb3BfY29uZmlndXJlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBiZF9wcmVwYXJlX3RvX2NsYWltYC4gU2luY2UgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXTigJlzIGEgZ29vZCBzaWduLiBTaW1pbGFybHksIGBsb29wX2NoYW5nZV9mZGAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGxvX2lvY3RsYCwgd2hpY2ggaXMgYSBzd2l0Y2ggc3RhdGVtZW50LiBUaGUgY29tcGlsZXIgbWlnaHQgbm90IGlubGluZSBpbiB0aGlzIGNhc2UgZWl0aGVyLgoKYHpsb29wX2N0bF93cml0ZWAgaXMgYWxzbyBwYXNzZWQgYXMgcGFydCBvZiBgZmlsZV9vcGVyYXRpb25zYCwgc28gdGhhdCB3b24mIzM5O3QgYmUgaW5saW5lZC4KCkxldCBtZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnRzLgoKRm9yIHRoZSBiYXNpYyBsb29wIGZ1bmN0aW9uYWxpdHksIGBsb19pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgc28gbGV0IG1lIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIGNoZWNrIGBsb19pb2N0bGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvX2lvY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTEyMTI9c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTYtXHQvKlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNzpcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOC1cdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNz1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MzgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTM5OnN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MC1cdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3MDM9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MjgtXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3Mjk6XHRcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MzAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3OTMtXHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc5NDpcdC5pb2N0bCA9XHRsb19pb2N0bCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3OTUtI2lmZGVmIENPTkZJR19DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MjgKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExvb3AgRGV2aWNlIERpcmVjdC1JTyBQYXRjaCoqCgpPa2F5LCBzbyBgbG9faW9jdGxgIGJlaW5nIHN0YXRpYyBpc24mIzM5O3QgYSBwcm9ibGVtLCBpdCYjMzk7cyBwYXJ0IG9mIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWVhbnMgdXNpbmcgdGhvc2UgbGFyZ2UgZnVuY3Rpb25zIGxpa2UgYGxvb3BfY29uZmlndXJlYCwgYGxvb3BfY2hhbmdlX2ZkYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIGlzIHBlcmZlY3RseSBhY2NlcHRhYmxlLCBhcyB0aGV5IGRlZmluaXRlbHkgd29uJiMzOTt0IGJlIGlubGluZWQuIEkgd2FzIHJpZ2h0IHRvIHJldmlldyB0aGUgcGF0Y2ggYWdhaW4gLSBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlOgoKYGBgYwogCWlmICghdmZzX2dldGF0dHIoJmFtcDtmaWxlLSZndDtmX3BhdGgsICZhbXA7c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSAmYW1wOyZhbXA7Ci0JICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikgJmFtcDsmYW1wOyBzdC5kaW9fbWVtX2FsaWduKSB7CiAJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwotCQlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpOwogCQlyZXR1cm47CiAJfQpgYGAKClJpZ2h0LCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmb2N1c2luZyBvbiBmaXhpbmcgYSBidWcgaW4gZGlyZWN0LUlPIGFsaWdubWVudCB3aGVuIHVzaW5nIGxvb3AgZGV2aWNlcy4gSXQmIzM5O3MgYSBjbGVhciBpbXByb3ZlbWVudCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcgdGhvcm91Z2hseS4gTXkgaW5zdGluY3Qgd2FzIHNwb3Qtb24uCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYW5hbHlzaXMuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2xvb3BfY2hhbmdlX2ZkJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBkaXJlY3QtaW8gYWxpZ25tZW50IGhhbmRsaW5nIGZvciBsb29wIGFuZCB6bG9vcCBkZXZpY2VzIGJ5IHByZXZlbnRpbmcgYW4gdW5kZXJmbG93IHdoZW4gdGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgYSB6ZXJvZWQgZGlvX21lbV9hbGlnbiwgYW5kIGNhcHBpbmcgaXQgYXQgUEFHRV9TSVpFIC0gMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGxvb3AgZGV2aWNlIGlvY3RscyBhbmQgemxvb3AgY29udHJvbCBmaWxlIHdyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHVuZGVyZmxvdyBidWcgd2hlcmUgYHN0LmRpb19tZW1fYWxpZ25gIGNvdWxkIGJlIDAsIHJlc3VsdGluZyBpbiBgc3QuZGlvX21lbV9hbGlnbiAtIDFgIGV2YWx1YXRpbmcgdG8gYSBodWdlIHZhbHVlIChlLmcuLCBgMHhmZmZmZmZmZmApLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGFsaWdubWVudCBjYWxjdWxhdGlvbnMgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzLiBUaGUgZml4IGFkZHMgYSBjaGVjayBmb3IgYHN0LmRpb19tZW1fYWxpZ24gIT0gMGAgYW5kIGJvdW5kcyB0aGUgYWxpZ25tZW50IHRvIGBQQUdFX1NJWkUgLSAxYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbm9yIGFyZSB0aGVyZSBhbnkga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMgcmVzdWx0aW5nIGZyb20gdGhlIHVuZGVyZmxvdyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlZDdkYThlMzc5MDQxOTY2YWFlMDgyNjNkYzRlYTY3YmRjMmY4NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggODYzOWZhMzRiODQ3MC4uY2JmMWUyY2UyNzEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTQ1OCwxMiAmIzQzOzQ1OCwxNCBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbW9pbmcKIAkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKIAkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KLQkgKiB1c2VkIGZvciBkaXJlY3QtaW8uCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZQomIzQzOwkgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrCiYjNDM7CSAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLgogCSAqLwogCWlmICghdmZzX2dldGF0dHIoJmFtcDtmaWxlLSZndDtmX3BhdGgsICZhbXA7c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSAmYW1wOyZhbXA7Ci0JICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikgJmFtcDsmYW1wOyBzdC5kaW9fbWVtX2FsaWduKSB7CiAJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwotCQlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmMKaW5kZXggNDMyM2FjMTA4Y2FlOC4uZjBjYTIyMTUyNGRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtMTA0MiwxMiAmIzQzOzEwNDIsMTQgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sCiAJICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbWluZwogCSAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0cwogCSAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJiMzOTtzIGRtYV9hbGlnbm1lbnQgd2hlbgotCSAqIHVzZWQgZm9yIGRpcmVjdC1pby4KJiM0MzsJICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlCiYjNDM7CSAqIGZpbGUgY2FuJiMzOTt0IGJlIHVzZWQgZm9yIGRpcmVjdC1pbyBhdCBhbGwsIHNvIGZhbGwgYmFjayB0byB0aGUgYmxvY2sKJiM0MzsJICogZGV2aWNlIGxpbWl0cyBpbiB0aGF0IGNhc2UuCiAJICovCiAJaWYgKCF2ZnNfZ2V0YXR0cigmYW1wO3pvbmUtJmd0O2ZpbGUtJmd0O2ZfcGF0aCwgJmFtcDtzdCwgU1RBVFhfRElPQUxJR04sIDApICZhbXA7JmFtcDsKLQkgICAgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSkgewomIzQzOwkgICAgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSAmYW1wOyZhbXA7IHN0LmRpb19tZW1fYWxpZ24pIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7CiYjNDM7CQl6bG8tJmd0O2Rpb19tZW1fYWxpZ24gPSBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpOwogCX0gZWxzZSBpZiAoc2JfYmRldikgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7CiAJCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjYKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogNTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW50ZWdlciBVbmRlcmZsb3cgaW4gTG9vcCBhbmQgWmxvb3AgRHJpdmVycyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGZpeGluZyBhbiBpbnRlZ2VyIHVuZGVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIHRoZSBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgYW5kIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbG9vcCBhbmQgemxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYnVnLCBhbmQgd2hldGhlciBpdCBjb3VsZCBwb3RlbnRpYWxseSBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCwgYSBgdTMyYCBtZW1iZXIgd2l0aGluIGEgYHN0cnVjdCBrc3RhdGAsIG1pZ2h0IGJlIHplcm8uIFRoaXMgbGlrZWx5IGhhcHBlbnMgd2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSByZXBvcnRzIHRoYXQgZGlyZWN0IEkvTyBpc24mIzM5O3QgcG9zc2libGUgKGUuZy4sIHplcm9lZCBhbGlnbm1lbnRzKS4gVGhlIHByb2JsZW1hdGljIHBhcnQgbGllcyBpbiB0aGUgc3VidHJhY3Rpb246IGBzdC5kaW9fbWVtX2FsaWduIC0gMWAuIElmIGBzdC5kaW9fbWVtX2FsaWduYCBpcyB6ZXJvLCB0aGlzIGxlYWRzIHRvIGFuIGludGVnZXIgdW5kZXJmbG93LCByZXN1bHRpbmcgaW4gYSBsYXJnZSB2YWx1ZSAoYDB4ZmZmZmZmZmZgIG9yIHNpbWlsYXIpLCB3aGljaCBpcyBhbiBpbnZhbGlkIG9yIG91dC1vZi1ib3VuZHMgYWxpZ25tZW50LgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdG8gY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduYCBiZWluZyBub24temVybywgYW5kIHRoZW4gdXNlIGBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpYCBpbnN0ZWFkLiBUaGlzIGVmZmVjdGl2ZWx5IGNsYW1wcyB0aGUgYWxpZ25tZW50IHZhbHVlLgoKSSBkaWQgYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBub3QgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0uIExvb2tpbmcgYXQgaG93IGBzdGAgaXMgcG9wdWxhdGVkIHRocm91Z2ggYHZmc19nZXRhdHRyYCBhbmQgdGhhdCBpdCYjMzk7cyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLCB0aGUgY2hlY2tzIG9uIHJldHVybiBtYWtlIGl0IGNsZWFyIHRoYXQgaXQmIzM5O3Mgbm90IHVuaW5pdGlhbGl6ZWQuIFRoZSBjYWxsIHRvIGB2ZnNfZ2V0YXR0cmAgaGFuZGxlcyB0aGF0LiBUaGUgcGF0Y2ggY29ycmVjdGx5IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCBvbmx5IHByb2NlZWRzIGlmIHRoZSBzdGF0IGRhdGEgaXMgdmFsaWQsIG9yIHRoZSBgU1RBVFhfRElPQUxJR05gIGZsYWcgaXMgc2V0LgoKVGhlIHJlYWwgaXNzdWUgaXMgdGhlIGludGVnZXIgdW5kZXJmbG93IGFuZCB0aGUgcmVzdWx0aW5nIGludmFsaWQgYWxpZ25tZW50IHZhbHVlLiBUaGlzIGNvdWxkLCBpbiB0aGVvcnksIHRyaWdnZXIgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3Igb3RoZXIgY3Jhc2hlcywgYW5kIEtBU0FOL1VCU0FOIG9yIGdlbmVyYWwgZnV6emluZyB3b3VsZCBjZXJ0YWlubHkgY2F0Y2ggdGhlc2UuIFNpbmNlIHRoaXMgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciB1bmRlcmZsb3cgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjb3VsZCBiZSAwLCByZXN1bHRpbmcgaW4gYHN0LmRpb19tZW1fYWxpZ24gLSAxYCBldmFsdWF0aW5nIHRvIGEgaHVnZSB2YWx1ZSAoZS5nLiwgYDB4ZmZmZmZmZmZgKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduICE9IDBgIGFuZCBib3VuZHMgdGhlIGFsaWdubWVudCB0byBgUEFHRV9TSVpFIC0gMWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIG5vciBhcmUgdGhlcmUgYW55IGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIHRoZSB1bmRlcmZsb3cgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciB1bmRlcmZsb3cgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjb3VsZCBiZSAwLCByZXN1bHRpbmcgaW4gYHN0LmRpb19tZW1fYWxpZ24gLSAxYCBldmFsdWF0aW5nIHRvIGEgaHVnZSB2YWx1ZSAoZS5nLiwgYDB4ZmZmZmZmZmZgKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduICE9IDBgIGFuZCBib3VuZHMgdGhlIGFsaWdubWVudCB0byBgUEFHRV9TSVpFIC0gMWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIG5vciBhcmUgdGhlcmUgYW55IGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIHRoZSB1bmRlcmZsb3cgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDoxMC45MDYzMTgzNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3Njc3MTM5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NvbmZpZ3VyZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcInpsb29wX2N0bF93cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciB1bmRlcmZsb3cgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjb3VsZCBiZSAwLCByZXN1bHRpbmcgaW4gYHN0LmRpb19tZW1fYWxpZ24gLSAxYCBldmFsdWF0aW5nIHRvIGEgaHVnZSB2YWx1ZSAoZS5nLiwgYDB4ZmZmZmZmZmZgKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduICE9IDBgIGFuZCBib3VuZHMgdGhlIGFsaWdubWVudCB0byBgUEFHRV9TSVpFIC0gMWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIG5vciBhcmUgdGhlcmUgYW55IGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIHRoZSB1bmRlcmZsb3cgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGRpcmVjdC1pbyBhbGlnbm1lbnQgaGFuZGxpbmcgZm9yIGxvb3AgYW5kIHpsb29wIGRldmljZXMgYnkgcHJldmVudGluZyBhbiB1bmRlcmZsb3cgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyBhIHplcm9lZCBkaW9fbWVtX2FsaWduLCBhbmQgY2FwcGluZyBpdCBhdCBQQUdFX1NJWkUgLSAxLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbG9vcCBkZXZpY2UgaW9jdGxzIGFuZCB6bG9vcCBjb250cm9sIGZpbGUgd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDoxMC45MDYzMjQwNzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTY0NTYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZlZDdkYThlMzc5MDQxOTY2YWFlMDgyNjNkYzRlYTY3YmRjMmY4NjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbmluZGV4IDg2MzlmYTM0Yjg0NzAuLmNiZjFlMmNlMjcxMjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbkBAIC00NTgsMTIgKzQ1OCwxNCBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXFxuIFxcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXFxuIFxcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXFxuLVxcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cXG4rXFx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXFxuK1xcdCAqIGZpbGUgY2FuJ3QgYmUgdXNlZCBmb3IgZGlyZWN0LWlvIGF0IGFsbCwgc28gZmFsbCBiYWNrIHRvIHRoZSBibG9ja1xcbitcXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cXG4gXFx0ICovXFxuIFxcdGlmICghdmZzX2dldGF0dHIoXFx1MDAyNmZpbGUtXFx1MDAzZWZfcGF0aCwgXFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pIFxcdTAwMjZcXHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XFxuLVxcdFxcdGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5pbmRleCA0MzIzYWMxMDhjYWU4Li5mMGNhMjIxNTI0ZGI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbkBAIC0xMDQyLDEyICsxMDQyLDE0IEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbiBcXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXFxuIFxcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXFxuIFxcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXFxuLVxcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cXG4rXFx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXFxuK1xcdCAqIGZpbGUgY2FuJ3QgYmUgdXNlZCBmb3IgZGlyZWN0LWlvIGF0IGFsbCwgc28gZmFsbCBiYWNrIHRvIHRoZSBibG9ja1xcbitcXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cXG4gXFx0ICovXFxuIFxcdGlmICghdmZzX2dldGF0dHIoXFx1MDAyNnpvbmUtXFx1MDAzZWZpbGUtXFx1MDAzZWZfcGF0aCwgXFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pIFxcdTAwMjZcXHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4tXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XFxuIFxcdH0gZWxzZSBpZiAoc2JfYmRldikge1xcbiBcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XFxuIFxcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MTEuMzQyNjc4MDMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1Nzk1OTgzODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcF9jb25maWd1cmVcIixcbiAgICBcImxvb3BfY2hhbmdlX2ZkXCIsXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBkaXJlY3QtaW8gYWxpZ25tZW50IGhhbmRsaW5nIGZvciBsb29wIGFuZCB6bG9vcCBkZXZpY2VzIGJ5IHByZXZlbnRpbmcgYW4gdW5kZXJmbG93IHdoZW4gdGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgYSB6ZXJvZWQgZGlvX21lbV9hbGlnbiwgYW5kIGNhcHBpbmcgaXQgYXQgUEFHRV9TSVpFIC0gMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGxvb3AgZGV2aWNlIGlvY3RscyBhbmQgemxvb3AgY29udHJvbCBmaWxlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmVkN2RhOGUzNzkwNDE5NjZhYWUwODI2M2RjNGVhNjdiZGMyZjg2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIxOjEwOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggODYzOWZhMzRiODQ3MC4uY2JmMWUyY2UyNzEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTQ1OCwxMiArNDU4LDE0IEBAIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXG4gXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuIFx0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZVxuK1x0ICogZmlsZSBjYW4ndCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4rXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xuK1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pIFx1MDAyNlx1MDAyNiBzdC5kaW9fbWVtX2FsaWduKSB7XG4gXHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbitcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDQzMjNhYzEwOGNhZTguLmYwY2EyMjE1MjRkYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTEwNDIsMTIgKzEwNDIsMTQgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG4gXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXG4gXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuIFx0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZVxuK1x0ICogZmlsZSBjYW4ndCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4rXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuLVx0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4gXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MTEuMzQyNjc5MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MTc0NTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBob3cgYHN0LmRpb19tZW1fYWxpZ25gIGlzIGhhbmRsZWQgd2l0aGluIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCAoaW4gYGxvb3AuY2ApIGFuZCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIChpbiBgemxvb3AuY2ApLiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBuZXcgY2hlY2ssIGBcdTAwMjZcdTAwMjYgc3QuZGlvX21lbV9hbGlnbmAsIGFuZCBhIGxpbWl0aW5nIGNvbmRpdGlvbjogYGxvX2Rpb19tZW1fYWxpZ25gIGlzIG5vdyBjYXBwZWQgYXQgYG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGl0IHNlZW1zIHJlbGF0ZWQgdG8gRGlyZWN0IEkvTyBhbGlnbm1lbnQuXG5cbk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8gZGVlcGVyPyBJcyB0aGlzIHBhdGNoIGV2ZW4gcmVhY2hhYmxlLCBhbmQgY291bGQgaXQgYmVuZWZpdCBmcm9tIGZ1enppbmc/IExldCdzIHNlZS4uLiBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgaXMgcGFydCBvZiB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBHaXZlbiB0aGUgd2lkZXNwcmVhZCB1c2Ugb2YgbG9vcCBkZXZpY2VzLCB0aGF0J3MgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBmdW5jdGlvbiBhbmQgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFdlIG1pZ2h0IHdhbnQgdG8gbG9vayBhdCBob3cgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGFmZmVjdCB0aGlzLlxuXG5gemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGFsc28gc2VlbXMgaW50ZXJlc3RpbmcuIEJ1dCB3YWl0IGEgbWludXRlLCBgemxvb3AuY2AuLi4gaXMgdGhhdCBhIHN0YW5kYXJkIGtlcm5lbCBkcml2ZXIsIG9yIGEgbW9kdWxlIEkgbmVlZCB0byBsb29rIHVwPyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IEkgZG9uJ3QgcmVjYWxsIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQuIExldCdzIGxvb2sgdGhhdCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjE1Ljc5NDQyNjk4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ5OTU0NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX2dldF9ibG9ja19zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNTpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDc4PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMy1cXHRcXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE0OlxcdFxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUzLVxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTQ6XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTk6XFx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MTcuNTQ0Mzg3NjE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1OTk1ODQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKktjb25maWcgRGl2ZSBmb3IgTG9vcGluZyBDb25zdHJ1Y3RzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgS2NvbmZpZywgaGFuZGxlcyBsb29wcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGNvbnN0cnVjdHMuIEkga25vdyB0aGV5J3JlIG91dCB0aGVyZSBzb21ld2hlcmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgZGlmZmVyZW5jZXMgdGhhdCBpbmZsdWVuY2UgdGhlaXIgYmVoYXZpb3IuIEkgd2lsbCBjaGVjayB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIGFuZCByZWxldmFudCBmaWxlcyBmb3IgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhvc2UgY29uc3RydWN0cy4gQW5kIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhhdCB0aGV5IHdvcmsgd2l0aCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgY29uZGl0aW9uYWxzLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IEkgY2FuIGV4cGxvaXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjIwLjIwNDM0OTMwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4NTA1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjIxLjk2Mjg2MTI5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjc5OTU3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBgemxvb3BgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gS2NvbmZpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHJlZ2FyZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBwb3RlbnRpYWxseSBlbmNhcHN1bGF0ZWQgYnkgXCJ6bG9vcC5cIiBJcyBpdCBhIGZlYXR1cmUsIGEgZHJpdmVyLCBhbiBvcHRpb24sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5PyBUaGUgc3BlY2lmaWNzIG9mIHdoYXQgYHpsb29wYCAqaXMqIHdpbGwgZHJhbWF0aWNhbGx5IGluZmx1ZW5jZSB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIGl0cyBLY29uZmlnIGVudHJpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3ltYm9scywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGNvbmRpdGlvbmFsIGJsb2NrcyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBLY29uZmlnIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IGB6bG9vcGAgZml0cyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MjUuNTkwODYxMTExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM1Njk1NDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pMT09QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDoyNy4yMDQ0Mzk5NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTI4MDM4ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5IbW0sIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCBlbGVnYW50IHdheSB0byBoYW5kbGUgdGhpcy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgbG9vcCwgcG90ZW50aWFsbHkgd2l0aGluIGEgYmxvY2ssIHJlbGF0ZWQgdG8gWi1heGlzIG1vdmVtZW50LiBJbnN0ZWFkIG9mIGEgbW9yZSB2ZXJib3NlIGFwcHJvYWNoLCB3b3VsZCBhIGNvbmNpc2UgYGNvbmZpZyBaTE9PUGAgb3IgZXZlbiBgY29uZmlnIEJMS19aTE9PUGAgY29tbWFuZCBiZSBzdWZmaWNpZW50PyBUaGF0IGFwcHJvYWNoIHdvdWxkIGJlIG11Y2ggY2xlYW5lciB0aGFuIGFueSBvdGhlciBhcHByb2FjaC4gSSBuZWVkIHRvIGJhbGFuY2UgY2xhcml0eSBhbmQgZWZmaWNpZW5jeSwgYW5kIHRoZXNlIHNob3J0IG9wdGlvbnMgZmVlbCBsaWtlIGEgcG90ZW50aWFsIHdpbi4gSSBqdXN0IG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgc2VtYW50aWNhbGx5IGFwcHJvcHJpYXRlLCBvciBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBiZWhhdmlvciBJJ20gb3Zlcmxvb2tpbmcgd2l0aCBlaXRoZXIgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MzAuMTMyNDgxODU4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2MzgxNzQzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipaTE9PUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MzIuNDI4ODcyOTExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjQxMDcxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipDaGVja2luZyB0aGUgQmxvY2sgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCBpZiBgemxvb3AuY2AgaXMgcGFydCBvZiB0aGUgYmxvY2sgZHJpdmVyIGVjb3N5c3RlbSwgc3BlY2lmaWNhbGx5IGlmIGl0cyBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL01ha2VmaWxlYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBpbml0aWFsIGRpYWdub3N0aWMgc3RlcCBmb3IgYW55IGtlcm5lbCBtb2R1bGUuIEknbGwgbmVlZCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSB0aGVyZSwgaWYgaXQncyB0aGVyZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDozNS4wOTI5ODMzMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTgxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfQkxLX0RFVl9VQkxLKVxcdFxcdFxcdCs9IHVibGtfZHJ2Lm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1ApICs9IHpsb29wLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTQyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDozNS4xNDUxODc5NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MjUwMzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIFpvbmVkIEJsb2NrIERldmljZSBTdXBwb3J0IHdpdGggTG9vcCBEZXZpY2VzKipcblxuUmlnaHQsIGBDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QYC4uLiBUaGF0IGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBhIGZldyBjb25zaWRlcmF0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBlbXVsYXRpbmcgYSB6b25lZCBibG9jayBkZXZpY2UsIGxpa2VseSBTTVIgb3Igc29tZSBvdGhlciBmb3JtIG9mIGhvc3QtbWFuYWdlZCBzdG9yYWdlLCB1c2luZyBhIHJlZ3VsYXIgbG9vcCBkZXZpY2Ugb24gYSBzdGFuZGFyZCBmaWxlIHN5c3RlbS4gT2theSwgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZmFpcmx5IGdyYW51bGFyLCBzbyB0aGlzIHNwZWNpZmljIG9wdGlvbiBwcm9iYWJseSBlbmFibGVzIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoaXMgKnNwZWNpZmljKiB1c2UgY2FzZSDigJMgem9uZSBzdXBwb3J0IG9uIGEgbG9vcCBkZXZpY2UuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY2hhbGxlbmdlcy4gVGhlIGZ1bmRhbWVudGFsIGFic3RyYWN0aW9uIG1pc21hdGNoIGlzIG9idmlvdXMuIEEgc3RhbmRhcmQgZmlsZSBzeXN0ZW0gaXNuJ3Qgem9uZS1hd2FyZSwgc28gaG93IGFyZSB3ZSBnb2luZyB0byB0cmFuc2xhdGUgem9uZSBib3VuZGFyaWVzIGFuZCBjb25zdHJhaW50cyBvbnRvIGEgYmxvY2stYmFzZWQgbG9vcCBkZXZpY2U/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzaW5nbGUgdW5kZXJseWluZyBmaWxlLCBvciBtdWx0aXBsZSBmaWxlcyByZXByZXNlbnRpbmcgem9uZXM/IFdoYXQgbWV0YWRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgZW1wbG95ZWQ/IEFyZSB3ZSBhdHRlbXB0aW5nIHRvIHNpbXVsYXRlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgU01SLCBvciBqdXN0IHByb3ZpZGluZyBhIGZ1bmN0aW9uYWwgaW50ZXJmYWNlIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudD9cblxuVGhlbiBJIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHdyaXRlIHBhdGhzLiBEb2VzIHRoaXMgaW52b2x2ZSBzb21lIHNvcnQgb2YgYnVmZmVyaW5nIGFuZCBjb2FsZXNjaW5nIHRvIGVtdWxhdGUgc2VxdWVudGlhbCB3cml0ZSByZXF1aXJlbWVudHM/IEFyZSB0aGVyZSBzcGVjaWZpYyB6b25lIG1hbmFnZW1lbnQgY29tbWFuZHMgaW1wbGVtZW50ZWQgdG8gbWFwIHRvIHRoZSBsb29wIGRldmljZSdzIHVuZGVybHlpbmcgYmxvY2sgc3RvcmFnZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmljIGJsb2NrIGxheWVyIGFuZCBpdHMgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcz8gTGF0ZW5jeSBjb25zaWRlcmF0aW9ucz8gQXJlIHdlIGNvbXBsZXRlbHkgbWFza2luZyB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSwgb3IgcHJvdmlkaW5nIGEgdHJhbnNwYXJlbnQgaW50ZXJmYWNlIHRvIHRoZSBlbmQgdXNlcj9cblxuSSBhc3N1bWUgdGhlIGludGVudGlvbiBpcyBmb3IgZGV2ZWxvcG1lbnQsIGVtdWxhdGlvbiwgb3IgdGVzdGluZyBvZiB6b25lZCBzdG9yYWdlLCBhcyB0aGUgb3ZlcmhlYWQgd291bGQgbGlrZWx5IGJlIGhpZ2ggaWYgdGhpcyB3ZXJlIGRlcGxveWVkIGluIGEgcHJvZHVjdGlvbiBzZXR0aW5nLiBJdCdzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoLCBidXQgbXkgZmlyc3QgcXVlc3Rpb25zIHdvdWxkIGludm9sdmUgdW5kZXJzdGFuZGluZyBob3cgd3JpdGUgb3BlcmF0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgd2hhdCBraW5kIG9mIHdyaXRlIHBlbmFsdGllcyBhcmUgYmVpbmcgaW1wb3NlZC4gTmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MzkuMjA3Njk1MTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0ODIwOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cXHR0cmlzdGF0ZSBcXFwiWm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjQwLjgzMjUyMzI0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYwNTA1NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBMb29wIERldmljZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBsb29wIGRldmljZSBzaXR1YXRpb24uIFRoZSB0d28gY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFRob3NlIGFyZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLCBvciBhdCBsZWFzdCB0aGV5IHNob3VsZCBiZS5cblxuTXkgbWFpbiB0YXJnZXRzLCBmdW5jdGlvbi13aXNlLCBhcmUgZ29pbmcgdG8gYmUgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGFuZCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgcmVsYXRlZCB0byBkaXJlY3QgSS9PIGFuZCBwZXJoYXBzIHpvbmVkIHN0b3JhZ2UgY29uc2lkZXJhdGlvbnMgd2l0aGluIHRob3NlLlxuXG5UaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlLi4uIEknbGwganVtcCByaWdodCBpbnRvIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBIb3BlZnVsbHksIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgZnVuY3Rpb24gd2lsbCBpbGx1bWluYXRlIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDo0NC4wOTMwMzE4MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg1MDI5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxOD1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjUtXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjY6XFx0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NDUuNzgxNTUyNjYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTg0NjU5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gQXMgSSdtIGNvbmZpZ3VyaW5nIGEgbG9vcCBkZXZpY2UsIEknbSBub3cgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG9uZSBhcmUgdGhlIGtleSBjb21wb25lbnRzLCB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdG8gZ3Jhc3AgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuU28sIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgYXJlIHdlIGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgcGljdHVyZSB3aXRoIGBsb29wX2NvbmZpZ3VyZWA/IE9yIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaW4gc2V0dGluZyB1cCB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpdGggYGxvb3Bfc2V0X2ZkYD8gT3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIHNldHRpbmcgdXAgdGhlIHN0YXR1cyBvciBmbGFncyB3aXRoIGBsb29wX3NldF9zdGF0dXNgPyBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGVhY2ggb2YgdGhlc2UgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBpZWNlcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDo0OC43ODAwMjE1MjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDg4NDY4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9hc3NpZ25fYmFja2luZ19maWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTQ5Mz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUxNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MTg6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUxOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01NDg9c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjA1LVxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKG9sZF9maWxlLVxcdTAwM2VmX21hcHBpbmcsIGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2spO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjYwNjpcXHRsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUobG8sIGZpbGUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTYwNy1cXHRsb29wX3VwZGF0ZV9kaW8obG8pO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwNT1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODItXFx0bG8tXFx1MDAzZWxvX2RldmljZSA9IGJkZXY7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4MzpcXHRsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUobG8sIGZpbGUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjUwLjYyODg3NDU2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk4MDcxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbnMqKlxuXG5IbW0sIHRoaW5raW5nIGFib3V0IGhvdyB3ZSBjYW4gc3RyZWFtbGluZSB0aGlz4oCmIGBsb29wX2NvbmZpZ3VyZWAgYW5kIGBsb29wX2NoYW5nZV9mZGAgYXJlIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbW9zdCBsaWtlbHkgdG8gb2ZmZXIgc29tZSByb29tIGZvciBpbXByb3ZlbWVudC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRvIGJlIHN1cmUsIG9mIGNvdXJzZS5cblxuTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBjaGVjayBgemxvb3AuY2AuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgd29ya3Mgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgYmxvY2tpbmcgYmVoYXZpb3Igd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTc0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NTMuNzI2OTQ5OTEyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MzAwMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX2dldF9ibG9ja19zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNTpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDc4PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMy1cXHRcXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE0OlxcdFxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUzLVxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTQ6XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTk6XFx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NTUuMzAyMjU5MjI2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODM2NTc1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHpsb29wX2luaXRfem9uZWAgQ2FsbCBTdGFjayoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vay4gU29tZXRoaW5nJ3MgZ29pbmcgb24gd2l0aCBgemxvb3BfaW5pdF96b25lYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBleGFjdGx5LiBNeSBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrLCB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgaXRzIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgdG8gcGlucG9pbnQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcgb3IgdGhlIGlzc3VlIEkgc3VzcGVjdC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgZ3JlcHBpbmcgb3IgdXNpbmcgbXkgSURFJ3MgY2FsbCBoaWVyYXJjaHkgZmVhdHVyZSB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NTguMTg1OTIwMjI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NTU5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX2luaXRfem9uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTAzNT1zdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDc4OnN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzktXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTg3PXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjgzLVxcdCAqIElmIHdlIGFscmVhZHkgaGF2ZSB6b25lIGZpbGVzLCB3ZSBhcmUgcmVzdG9yaW5nIGEgZGV2aWNlIGNyZWF0ZWQgYnkgYVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjg0OlxcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg1LVxcdCAqIHRoYXQgdGhlIHpvbmUgZmlsZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSBjb25maWd1cmF0aW9uIGdpdmVuLlxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyODgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4OTpcXHRcXHRyZXQgPSB6bG9vcF9pbml0X3pvbmUoemxvLCBvcHRzLCBpLCByZXN0b3JlKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI5MC1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDo1OS43NDU0ODU1OThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5OTM1MDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBabG9vcCBFbnRyeSBQb2ludCoqXG5cbk9rYXksIHNvIGB6bG9vcF9jdGxfYWRkYCBpcyB0aGUgYWR2ZXJ0aXNlZCBlbnRyeSBwb2ludCBmb3IgdGhlIFpsb29wIGZ1bmN0aW9uYWxpdHkuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQncyBpbnZva2VkLiBJcyB0aGlzIGEgdHJhZGl0aW9uYWwgc3lzdGVtIGNhbGw/IE9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMsIGxpa2UgYW4gYGlvY3RsYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBuYXR1cmUuIEtub3dpbmcgdGhhdCB3aWxsIHNoYXBlIG15IGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uIHBhdGgg4oCTIHVuZGVyc3RhbmRpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJtaXNzaW9uIG1vZGVscywgb3IgZXJyb3IgY29kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTowMi44NDQ4MzgwMjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODM2Njc3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTE2OD1zdGF0aWMgYm9vbCB6bG9vcF9kZXZfZXhpc3RzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg2LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTg3OnN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY2MT1zdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2OTktXFx0Y2FzZSBaTE9PUF9DVExfQUREOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzAwOlxcdFxcdHJldCA9IHpsb29wX2N0bF9hZGQoXFx1MDAyNm9wdHMpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzAxLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTowNC40Mjg1MTA4NDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NDA1OTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqTXkgSW1tZWRpYXRlIEFuYWx5c2lzIG9mIHRoZSB6bG9vcCBDb250cm9sIFBhdGgqKlxuXG5BbHJpZ2h0LCBgemxvb3BfY3RsX3dyaXRlYCBpcyBjbGVhcmx5IHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHpsb29wIGNvbnRyb2wgY29tbWFuZHMuIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBjb250cm9sbGluZyB0aGUgbG9vcCBkZXZpY2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0J3MgaGFwcGVuaW5nIGludGVybmFsbHkgd2l0aGluIGBsb29wX2NvbmZpZ3VyZWAgYW5kIGBsb29wX2NoYW5nZV9mZGAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYWxtb3N0IGNlcnRhaW5seSByZWx5IG9uIGBpb2N0bGAgY2FsbHMgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLiBJIG5lZWQgdG8gY29uZmlybSBpZiBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGVtIGJlaW5nIGlvY3RscyBhcmUgY29ycmVjdCwgYmVjYXVzZSB0aGF0IGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4gaW1tZWRpYXRlbHkgc3RhcnQgbG9va2luZyBhdCB0aGUgZHJpdmVyJ3MgY29kZSBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBpb2N0bCBjYWxsLCBhbmQgd2hhdCBkYXRhIGdldHMgcGFzc2VkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgb3BlcmF0aW9ucyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MTcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTowNy42MjI1NzIzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzY1MDkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX2NvbmZpZ3VyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nj1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA3LSAqIGlzX2xvb3BfZGV2aWNlKCkgaXMgdHJ1ZSwgd2UgbmVlZCBhIGdsb2JhbCBsb2NrIGZvciBzZXJpYWxpemluZyBjb25jdXJyZW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA5LSAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NDkzPXN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTA4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUwOTpcXHRcXHQvKiBPcmRlciB3cnQgc2V0dGluZyBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlIGluIGxvb3BfY29uZmlndXJlKCkuICovXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTEwLVxcdFxcdHJtYigpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTcwPXN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDU6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwNi1cXHRcXHRcXHQgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDM0LVxcdGlmICghKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9FWENMKSkge1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMzU6XFx0XFx0ZXJyb3IgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGJkZXYsIGxvb3BfY29uZmlndXJlLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDM2LVxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMjItXFx0aWYgKCEobW9kZSBcXHUwMDI2IEJMS19PUEVOX0VYQ0wpKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMjM6XFx0XFx0YmRfYWJvcnRfY2xhaW1pbmcoYmRldiwgbG9vcF9jb25maWd1cmUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMjQtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTMwLVxcdGlmICghKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTMxOlxcdFxcdGJkX2Fib3J0X2NsYWltaW5nKGJkZXYsIGxvb3BfY29uZmlndXJlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTMyLW91dF9wdXRmOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTIxMj1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMTg6XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVxcdCAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIxLVxcdCAqIG1ha2Ugc3VyZSB0aGF0IGxvb3BfdmFsaWRhdGVfZmlsZSgpIHdpbGwgZmFpbCBpZiB0aGUgXFxcInN0cnVjdCBmaWxlXFxcIlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMjI6XFx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIzLVxcdCAqIGxvb3AgZGV2aWNlLlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUzOT1zdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NTctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU1ODpcXHRcXHRyZXR1cm4gbG9vcF9jb25maWd1cmUobG8sIG1vZGUsIGJkZXYsIFxcdTAwMjZjb25maWcpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NTktXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTY2OlxcdFxcdHJldHVybiBsb29wX2NvbmZpZ3VyZShsbywgbW9kZSwgYmRldiwgXFx1MDAyNmNvbmZpZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2Ny1cXHR9XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz0zNDk9c3RhdGljIGludCBudm1lX2xvb3BfY29ubmVjdF9pb19xdWV1ZXMoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtMzYyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjM2MzpzdGF0aWMgaW50IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTM2NC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz00NDA9c3RhdGljIHZvaWQgbnZtZV9sb29wX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy00NTgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NDU5OlxcdHJldCA9IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNDYwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz01NTI9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfbG9vcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy01OTUtXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NTk2OlxcdHJldCA9IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNTk3LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjA5LjIwNjIyOTk2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY2MzMzNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2ggZm9yIEJsb2NrIERyaXZlciBBbGlnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBlbnRyeSBwb2ludHM6IGBsb29wX2NvbmZpZ3VyZWAsIGBsb29wX2NoYW5nZV9mZGAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBuZXcgYWxpZ25tZW50IGxvZ2ljLiAgTGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBsb29wX2NvbmZpZ3VyZWAgZGlyZWN0bHkgY2FsbHMgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGFuZCB0aGF0LCBpbiB0dXJuLCBjYWxscyBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAuIEdvdCBpdC4gQW5kIGZvciBgemxvb3BgLCBgemxvb3BfY3RsX3dyaXRlYCBzZWVtcyB0byBnbyB0byBgemxvb3BfY3RsX2FkZGAsIHRoZW4gYHpsb29wX2luaXRfem9uZWAsIGFuZCBmaW5hbGx5IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAuXG5cbk5vdyBJIHNlZSwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2hlcmUgYHN0LmRpb19tZW1fYWxpZ25gIGNhbiBiZSB6ZXJvLiBUaGlzIGxlYWRzIHRvIGFuIGludGVnZXIgdW5kZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgYGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ25gLCBwb3RlbnRpYWxseSBzZXR0aW5nIGl0IHRvIGBVSU5UX01BWGAgb3IgYFVMT05HX01BWGAsIHdoaWNoIGlzIGNsZWFybHkgYSBwcm9ibGVtLiBTbywgdGhlIHBhdGNoIGlzIGNhcHBpbmcgaXQgYXQgYFBBR0VfU0laRSAtIDFgIHRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4gQSBnb29kIGZpeCBmb3IgdGhhdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgYmxvY2sgZHJpdmVyIGZpeCBhZmZlY3RpbmcgYm90aCBgbG9vcGAgYW5kIGB6bG9vcGAuICBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggYWxpZ25tZW50IGlzc3VlcywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCB0byBlbnN1cmUgc3RhYmlsaXR5LlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgZnV6emluZyBlZmZvcnRzLCBJIHdpbGwgZm9jdXMgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9jaGFuZ2VfZmRgIGZvciB0aGUgYGxvb3BgIGRyaXZlciwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIGZvciB0aGUgYHpsb29wYCBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MTQuMjcyNTY2NDc4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA1Mjg1MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2hhbmdlX2ZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTk2PXN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDctICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDg6ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpL19fbG9vcF9jbHJfZmQoKSBjYWxscy5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDktICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01Mjk9c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0MC0vKlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjU0MTogKiBsb29wX2NoYW5nZV9mZCBzd2l0Y2hlZCB0aGUgYmFja2luZyBzdG9yZSBvZiBhIGxvb3BiYWNrIGRldmljZSB0b1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0Mi0gKiBhIG5ldyBmaWxlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3BlcmF0aW5nIHN5c3RlbSBpbnN0YWxsZXJzIHRvIGZyZWUgdXBcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0Ny0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1NDg6c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0OS1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMjEyPXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTctXFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTktXFx0ICpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjEtXFx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcXFwic3RydWN0IGZpbGVcXFwiXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIyMjpcXHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjMtXFx0ICogbG9vcCBkZXZpY2UuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2OC1cXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1Njk6XFx0XFx0cmV0dXJuIGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NzAtXFx0Y2FzZSBMT09QX0NMUl9GRDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MTUuODc3ODU3OTkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTI0ODA4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYHpsb29wX2N0bF93cml0ZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHpsb29wX2N0bF93cml0ZWAgZnVuY3Rpb24uIEkgdmFndWVseSByZWNhbGwgc29tZSBzcGVjaWZpYyBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXQncyBlc3NlbnRpYWwgSSBjYW4gcXVpY2tseSBncmFzcCBpdC4gSSBrbm93IHRoZSBiYXNpYyBmbG93LCBidXQgSSBuZWVkIGEgcXVpY2sgcmVmcmVzaGVyIG9uIHRoZSBudWFuY2VzIG9mIGhvdyBgemxvb3BfY3RsX3dyaXRlYCBkZWFscyB3aXRoIHBvdGVudGlhbGx5IGNvbXBsZXggY29udHJvbCBwYXRocy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgYXNzdW1wdGlvbnMgaXQgbWFrZXMsIGVzcGVjaWFsbHkgYXJvdW5kIHJlc291cmNlIGFsbG9jYXRpb24gb3IgbG9ja2luZyBzdHJhdGVnaWVzLiBObyBwb2ludCByZS1pbnZlbnRpbmcgdGhlIHdoZWVsLCBsZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgaW50ZWdyYXRpb25zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToxOC43OTAzNDE1MjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc1NTU1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjUyPXN0YXRpYyBzdHJ1Y3Qgemxvb3BfY3RsX29wIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjYwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjYxOnN0YXRpYyBzc2l6ZV90IHpsb29wX2N0bF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NjItXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU1LVxcdC5yZWxlYXNlXFx0PSB6bG9vcF9jdGxfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc1NjpcXHQud3JpdGVcXHRcXHQ9IHpsb29wX2N0bF93cml0ZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1Ny1cXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjIwLjQxNzkwMzExOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg4NTAxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB6bG9vcF9jdGxfd3JpdGVgIEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYHpsb29wX2N0bF93cml0ZWAgaGVyZSDigJMgdGhhdCdzIHRoZSB3cml0ZSBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIHpsb29wIGNvbnRyb2wgZmlsZS4gUmlnaHQsIHRoYXQncyB3aGF0IEkgdGhvdWdodC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgd2UncmUgZ29pbmcgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBpbmZsdWVuY2UgYmVoYXZpb3IuIEJlZm9yZSBkaWdnaW5nIGluIGFueSBkZWVwZXIsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCBJIHNob3VsZCBrbm93IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQgYnV0IGRvbid0IHdhbnQgdG8gcmVseSBvbiByZWNhbGwuIExldCdzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGxvb3Bfc2V0X2ZkYCBpcyBzdGlsbCBpbiBwbGF5LCB0aGF0IHRoZSBjb3JlIG1lY2hhbmlzbSBJJ20gZmFtaWxpYXIgd2l0aCBoYXNuJ3QgYmVlbiBkZXByZWNhdGVkIG9yIHJhZGljYWxseSBhbHRlcmVkLiBBIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIGZ1bmRhbWVudGFscyBzdGlsbCBhcHBseSwgYmVmb3JlIEkgY2FuIGhhdmUgY29uZmlkZW5jZSBpbiB0aGUgcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToyMy45MDY0MDg1NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYwMzE2MTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3Bfc2V0X2ZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToyNS41MjI0NDg3NDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNjUzMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgYExPT1BfU0VUX0ZEYCBJT0NUTCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2xlYXI6IHRoYXQgYExPT1BfU0VUX0ZEYCBpb2N0bCBjYWxsIGxlYWRzIGRpcmVjdGx5IGludG8gYGxvb3BfY29uZmlndXJlYC4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgb2YgY291cnNlLCBiZWNhdXNlIGBMT09QX1NFVF9GRGAgaXMgYWxsIGFib3V0IGNvbm5lY3RpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYSBsb29wIGRldmljZSwgYW5kIGBsb29wX2NvbmZpZ3VyZWAgaXMgd2hlcmUgdGhlIGRldmljZSdzIGNoYXJhY3RlcmlzdGljcyBhcmUsIHdlbGwsIGNvbmZpZ3VyZWQsIGluY2x1ZGluZyBiaW5kaW5nIGEgZmlsZSB0byB0aGUgbG9vcCBkZXZpY2UuIFRoaXMgcmVpbmZvcmNlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEkgZXhwZWN0LiBOb3cgdGhlIHJlYWwgcXVlc3Rpb24gYmVjb21lcywgaG93IGlzIGBsb29wX2NvbmZpZ3VyZWAgaW1wbGVtZW50ZWQgYW5kIHdoYXQgaW50ZXJuYWwgY2FsbHMgbWlnaHQgaXQgbWFrZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToyOC40NTg5ODU2NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzkyMDgxODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTE9PUF9TRVRfRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0PTExMT1pbnN0YWJpbGl0eS4gVGhpcyBpcyBjb25jZXB0dWFsbHkgc2ltaWxhciB0byB0aGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdDoxMTI6YGBMT09QX1NFVF9GRGBgIGlvY3RsLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0xMTMtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0Ni1cXHRzd2l0Y2ggKGNtZCkge1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NDc6XFx0Y2FzZSBMT09QX1NFVF9GRDoge1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDgtXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3MDM9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyNC1cXHRcXHRmYWxsdGhyb3VnaDtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzI1OlxcdGNhc2UgTE9PUF9TRVRfRkQ6XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyNi1cXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xvb3AuaD03Nz1zdHJ1Y3QgbG9vcF9jb25maWcge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xvb3AuaC0xMDMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xvb3AuaDoxMDQ6I2RlZmluZSBMT09QX1NFVF9GRFxcdFxcdDB4NEMwMFxcbmluY2x1ZGUvdWFwaS9saW51eC9sb29wLmgtMTA1LSNkZWZpbmUgTE9PUF9DTFJfRkRcXHRcXHQweDRDMDFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MzAuMDk4MjA1NjMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzAyOTAwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyoqXG5cbk9rYXksIHNvIEknbSBjb25uZWN0aW5nIHRoZSBkb3RzIGhlcmUuIGBMT09QX1NFVF9GRGAgKmRlZmluaXRlbHkqIGNhbGxzIGBsb29wX2NvbmZpZ3VyZWAuIFRoYXQncyB0aGUga2V5LiBTbywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGxvb3BfY29uZmlndXJlYCwgZGVmaW5pdGVseSwgYW5kIGFsc28gYGxvb3BfY2hhbmdlX2ZkYCBhbmQgYHpsb29wX2N0bF93cml0ZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaW4gdGhpcyBjb250ZXh0LlxuXG5BbmQgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFRob3NlIGFyZSB0aGUgdHdvIHJlbGV2YW50IGNvbmZpZ3MuXG5cbldhaXQgYSBzZWNvbmQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBwYXRoLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgQkxLX0RFVl9aT05FRF9MT09QYCBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBieSBza2lwcGluZyB0aGF0IHN0ZXAuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGVsdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjMzLjg2ODQ5ODEwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwODQwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cXHR0cmlzdGF0ZSBcXFwiWm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjMzLjkyMjU4NjU5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTExNzE3MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMzU2LiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBibG9jayBkZXZpY2VzIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCB0aGVyZSwgcGVyaGFwcyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBvciBhIGRlZmluaXRpb24gcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYmxvY2sgZGV2aWNlcy4gS25vd2luZyB0aGUgZGV0YWlscyBoZXJlIHdpbGwgaGVscCBtZSB0by4uLiB3ZWxsLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGRlYnVnIGEgZHJpdmVyLCBjdXN0b21pemUgYSBidWlsZCwgdW5kZXJzdGFuZCBhIHNwZWNpZmljIHBsYXRmb3JtJ3MgY29uZmlndXJhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MzcuNDM0MzA1ODIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0ICBTYXkgTiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcXG4gMzUxOlxcdFxcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXFxuIDM1MjpcXHRcXHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuIDM1NTpcXHRcXG4gMzU2OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4gMzU3OlxcdFxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMzU4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcXG4gMzYxOlxcdFxcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcXG4gMzYyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXFxuIDM2MzpcXHRcXHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXFxuIDM2NDpcXHRcXHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcXG4gMzY1OlxcdFxcdCAgbGlrZTpcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbiAzNjg6XFx0XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuIDM2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MzcuNDM0MzgxMDAxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDA0NjI5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gYGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRGAuIFRoYXQncyB0aGUga2V5LiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIGBCTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkIGluIG91ciBjb25maWd1cmF0aW9uLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAuIEFsd2F5cyBnb29kIHRvIHNlZSBpZiBlbmFibGluZyBvbmUgdGhpbmcgaGFzIGFueSB1bmV4cGVjdGVkIGtub2NrLW9uIGVmZmVjdHMgZWxzZXdoZXJlLiBJdCdzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo0MS41NzQ4NDY2NzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRjb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuIDE0MTpcXHRcXHRib29sXFxuIDE0MjpcXHRcXHRkZWZhdWx0IEJMS19ERVZfVUJEXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdGNvbmZpZyBCTEtfREVWX0xPT1BcXG4gMTQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMTQ2OlxcdFxcdGhlbHBcXG4gMTQ3OlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgYSByZWd1bGFyIGZpbGUgYXMgYSBibG9ja1xcbiAxNDg6XFx0XFx0ICBkZXZpY2U7IHlvdSBjYW4gdGhlbiBjcmVhdGUgYSBmaWxlIHN5c3RlbSBvbiB0aGF0IGJsb2NrIGRldmljZSBhbmRcXG4gMTQ5OlxcdFxcdCAgbW91bnQgaXQganVzdCBhcyB5b3Ugd291bGQgbW91bnQgb3RoZXIgYmxvY2sgZGV2aWNlcyBzdWNoIGFzIGhhcmRcXG4gMTUwOlxcdFxcdCAgZHJpdmUgcGFydGl0aW9ucywgQ0QtUk9NIGRyaXZlcyBvciBmbG9wcHkgZHJpdmVzLiBUaGUgbG9vcCBkZXZpY2VzXFxuIDE1MTpcXHRcXHQgIGFyZSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIG51bWJlciA3IGFuZCB0eXBpY2FsbHlcXG4gMTUyOlxcdFxcdCAgY2FsbGVkIC9kZXYvbG9vcDAsIC9kZXYvbG9vcDEgZXRjLlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoZWNrIGFuIElTTyA5NjYwIGZpbGUgc3lzdGVtIGJlZm9yZVxcbiAxNTU6XFx0XFx0ICBidXJuaW5nIHRoZSBDRCwgb3IgaWYgeW91IHdhbnQgdG8gdXNlIGZsb3BweSBpbWFnZXMgd2l0aG91dCBmaXJzdFxcbiAxNTY6XFx0XFx0ICB3cml0aW5nIHRoZW0gdG8gZmxvcHB5LiBGdXJ0aGVybW9yZSwgc29tZSBMaW51eCBkaXN0cmlidXRpb25zIGF2b2lkXFxuIDE1NzpcXHRcXHQgIHRoZSBuZWVkIGZvciBhIGRlZGljYXRlZCBMaW51eCBwYXJ0aXRpb24gYnkga2VlcGluZyB0aGVpciBjb21wbGV0ZVxcbiAxNTg6XFx0XFx0ICByb290IGZpbGUgc3lzdGVtIGluc2lkZSBhIERPUyBGQVQgZmlsZSB1c2luZyB0aGlzIGxvb3AgZGV2aWNlXFxuIDE1OTpcXHRcXHQgIGRyaXZlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6NDEuNTc0OTIzMTAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTY0MTIwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIExvb3AgRGV2aWNlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBsb29wIGRldmljZSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHpvbmVkIGxvb3BzLiBJIHNlZSB0aGVyZSBhcmUgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAgb24gdGhlIHN1cmZhY2UuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3aGljaCBhcmUgYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgLCBhbmQgYEJMS19ERVZfWk9ORURgLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzIHRvIHVzZSwga2VlcGluZyBpbiBtaW5kIHRoZSBndWlkYW5jZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJJ3ZlIG5vdGVkIHRocmVlIGtleSBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgbG9vcF9jb25maWd1cmVgLCBgbG9vcF9jaGFuZ2VfZmRgLCBhbmQgYHpsb29wX2N0bF93cml0ZWAuXG5cbkluaXRpYWxseSwgSSBzZWUgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBzdGF0aWMuIEhtbSwgdGhhdCdzIG5vdCBpZGVhbCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZS4gSSBpbml0aWFsbHkgdGhvdWdodCBpdCBtaWdodCBiZSBleHBvcnRlZCwgYnV0IG5vLCBpdCdzIHN0YXRpYy4gTGV0IG1lIHNlZSBpZiBgemxvb3BfY3RsX2FkZGAgaXMgYSBiZXR0ZXIgb3B0aW9uLiBOb3BlLCB0aGF0J3MgYWxzbyBzdGF0aWMuIEhvd2V2ZXIsIHdhaXQsIEkgcmVtZW1iZXIgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBhY3R1YWxseSB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agd3JpdGUgaGFuZGxlci4gVGhhdCdzIGEgc3Ryb25nIGVudHJ5IHBvaW50IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gY29udGV4dC4gU28sIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5gbG9vcF9jb25maWd1cmVgIGFuZCBgbG9vcF9jaGFuZ2VfZmRgIGFyZSBhbHNvIHN0YXRpYywgc28gdGhleSBuZWVkIGZ1cnRoZXIgY29uc2lkZXJhdGlvbi4gVGhlIHByb21wdCBzYXlzIHRoYXQgdGhlIHByZWZlcnJlZCBmdW5jdGlvbnMgc2hvdWxkIGJlIG5vbi1zdGF0aWMuIEhvd2V2ZXIsIGBsb29wX2NvbmZpZ3VyZWAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgYmRfcHJlcGFyZV90b19jbGFpbWAuIFNpbmNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJ3QgYmUgaW5saW5lZC4gVGhhdOKAmXMgYSBnb29kIHNpZ24uIFNpbWlsYXJseSwgYGxvb3BfY2hhbmdlX2ZkYCBpcyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBmcm9tIGBsb19pb2N0bGAsIHdoaWNoIGlzIGEgc3dpdGNoIHN0YXRlbWVudC4gVGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBpbmxpbmUgaW4gdGhpcyBjYXNlIGVpdGhlci5cblxuYHpsb29wX2N0bF93cml0ZWAgaXMgYWxzbyBwYXNzZWQgYXMgcGFydCBvZiBgZmlsZV9vcGVyYXRpb25zYCwgc28gdGhhdCB3b24ndCBiZSBpbmxpbmVkLlxuXG5MZXQgbWUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm5vbiotc3RhdGljIGVudHJ5IHBvaW50cy5cblxuRm9yIHRoZSBiYXNpYyBsb29wIGZ1bmN0aW9uYWxpdHksIGBsb19pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgc28gbGV0IG1lIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIGNoZWNrIGBsb19pb2N0bGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzkxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6NDguMzcxMzM4NjA2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0NTE1MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTEyMTI9c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNi1cXHQvKlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMTc6XFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOC1cXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNz1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUzOC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTM5OnN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDAtXFx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzAzPXN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MjgtXFx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTcyOTpcXHRcXHRlcnIgPSBsb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTczMC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc5My1cXHQucmVsZWFzZSA9XFx0bG9fcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk0OlxcdC5pb2N0bCA9XFx0bG9faW9jdGwsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc5NS0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo0OS45OTU4NTg2MThaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3MDMzMzg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29wIERldmljZSBEaXJlY3QtSU8gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgbG9faW9jdGxgIGJlaW5nIHN0YXRpYyBpc24ndCBhIHByb2JsZW0sIGl0J3MgcGFydCBvZiBgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHVzaW5nIHRob3NlIGxhcmdlIGZ1bmN0aW9ucyBsaWtlIGBsb29wX2NvbmZpZ3VyZWAsIGBsb29wX2NoYW5nZV9mZGAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBpcyBwZXJmZWN0bHkgYWNjZXB0YWJsZSwgYXMgdGhleSBkZWZpbml0ZWx5IHdvbid0IGJlIGlubGluZWQuIEkgd2FzIHJpZ2h0IHRvIHJldmlldyB0aGUgcGF0Y2ggYWdhaW4gLSBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlOlxuXG5gYGBjXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuYGBgXG5cblJpZ2h0LCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGZvY3VzaW5nIG9uIGZpeGluZyBhIGJ1ZyBpbiBkaXJlY3QtSU8gYWxpZ25tZW50IHdoZW4gdXNpbmcgbG9vcCBkZXZpY2VzLiBJdCdzIGEgY2xlYXIgaW1wcm92ZW1lbnQgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcgdGhvcm91Z2hseS4gTXkgaW5zdGluY3Qgd2FzIHNwb3Qtb24uXG5cbkknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcyOCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6NTcuMDY2MTk2MzQ5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NjI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcF9jb25maWd1cmVcIixcbiAgICBcImxvb3BfY2hhbmdlX2ZkXCIsXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBkaXJlY3QtaW8gYWxpZ25tZW50IGhhbmRsaW5nIGZvciBsb29wIGFuZCB6bG9vcCBkZXZpY2VzIGJ5IHByZXZlbnRpbmcgYW4gdW5kZXJmbG93IHdoZW4gdGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgYSB6ZXJvZWQgZGlvX21lbV9hbGlnbiwgYW5kIGNhcHBpbmcgaXQgYXQgUEFHRV9TSVpFIC0gMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGxvb3AgZGV2aWNlIGlvY3RscyBhbmQgemxvb3AgY29udHJvbCBmaWxlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX2NoYW5nZV9mZFwiLFxuICAgIFwiemxvb3BfY3RsX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjU3LjEzODY2NTMwN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzUzNTY3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo1Ny4xMzkxMjU5MzZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM1MzQ4OTI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgdW5kZXJmbG93IGJ1ZyB3aGVyZSBgc3QuZGlvX21lbV9hbGlnbmAgY291bGQgYmUgMCwgcmVzdWx0aW5nIGluIGBzdC5kaW9fbWVtX2FsaWduIC0gMWAgZXZhbHVhdGluZyB0byBhIGh1Z2UgdmFsdWUgKGUuZy4sIGAweGZmZmZmZmZmYCkuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWxpZ25tZW50IGNhbGN1bGF0aW9ucyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMuIFRoZSBmaXggYWRkcyBhIGNoZWNrIGZvciBgc3QuZGlvX21lbV9hbGlnbiAhPSAwYCBhbmQgYm91bmRzIHRoZSBhbGlnbm1lbnQgdG8gYFBBR0VfU0laRSAtIDFgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBub3IgYXJlIHRoZXJlIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSB0aGUgdW5kZXJmbG93IHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWQ3ZGE4ZTM3OTA0MTk2NmFhZTA4MjYzZGM0ZWE2N2JkYzJmODY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA4NjM5ZmEzNGI4NDcwLi5jYmYxZTJjZTI3MTI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNDU4LDEyICs0NTgsMTQgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbW9pbmdcbiBcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxuLVx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuK1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXG4rXHQgKiBmaWxlIGNhbid0IGJlIHVzZWQgZm9yIGRpcmVjdC1pbyBhdCBhbGwsIHNvIGZhbGwgYmFjayB0byB0aGUgYmxvY2tcbitcdCAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNDMyM2FjMTA4Y2FlOC4uZjBjYTIyMTUyNGRiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMTA0MiwxMiArMTA0MiwxNCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbiBcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmdcbiBcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxuLVx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuK1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXG4rXHQgKiBmaWxlIGNhbid0IGJlIHVzZWQgZm9yIGRpcmVjdC1pbyBhdCBhbGwsIHNvIGZhbGwgYmFjayB0byB0aGUgYmxvY2tcbitcdCAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbitcdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSBcdTAwMjZcdTAwMjYgc3QuZGlvX21lbV9hbGlnbikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4rXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcbiBcdH0gZWxzZSBpZiAoc2JfYmRldikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbiBcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo1Ny4xMzkxMjY3NTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MzQ4Njg3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlZ2VyIFVuZGVyZmxvdyBpbiBMb29wIGFuZCBabG9vcCBEcml2ZXJzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBmaXhpbmcgYW4gaW50ZWdlciB1bmRlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiB0aGUgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGFuZCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxvb3AgYW5kIHpsb29wIGJsb2NrIGRldmljZSBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZywgYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCwgYSBgdTMyYCBtZW1iZXIgd2l0aGluIGEgYHN0cnVjdCBrc3RhdGAsIG1pZ2h0IGJlIHplcm8uIFRoaXMgbGlrZWx5IGhhcHBlbnMgd2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSByZXBvcnRzIHRoYXQgZGlyZWN0IEkvTyBpc24ndCBwb3NzaWJsZSAoZS5nLiwgemVyb2VkIGFsaWdubWVudHMpLiBUaGUgcHJvYmxlbWF0aWMgcGFydCBsaWVzIGluIHRoZSBzdWJ0cmFjdGlvbjogYHN0LmRpb19tZW1fYWxpZ24gLSAxYC4gSWYgYHN0LmRpb19tZW1fYWxpZ25gIGlzIHplcm8sIHRoaXMgbGVhZHMgdG8gYW4gaW50ZWdlciB1bmRlcmZsb3csIHJlc3VsdGluZyBpbiBhIGxhcmdlIHZhbHVlIChgMHhmZmZmZmZmZmAgb3Igc2ltaWxhciksIHdoaWNoIGlzIGFuIGludmFsaWQgb3Igb3V0LW9mLWJvdW5kcyBhbGlnbm1lbnQuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdG8gY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduYCBiZWluZyBub24temVybywgYW5kIHRoZW4gdXNlIGBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpYCBpbnN0ZWFkLiBUaGlzIGVmZmVjdGl2ZWx5IGNsYW1wcyB0aGUgYWxpZ25tZW50IHZhbHVlLlxuXG5JIGRpZCBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIG5vdCB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gTG9va2luZyBhdCBob3cgYHN0YCBpcyBwb3B1bGF0ZWQgdGhyb3VnaCBgdmZzX2dldGF0dHJgIGFuZCB0aGF0IGl0J3MgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgdGhlIGNoZWNrcyBvbiByZXR1cm4gbWFrZSBpdCBjbGVhciB0aGF0IGl0J3Mgbm90IHVuaW5pdGlhbGl6ZWQuIFRoZSBjYWxsIHRvIGB2ZnNfZ2V0YXR0cmAgaGFuZGxlcyB0aGF0LiBUaGUgcGF0Y2ggY29ycmVjdGx5IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCBvbmx5IHByb2NlZWRzIGlmIHRoZSBzdGF0IGRhdGEgaXMgdmFsaWQsIG9yIHRoZSBgU1RBVFhfRElPQUxJR05gIGZsYWcgaXMgc2V0LlxuXG5UaGUgcmVhbCBpc3N1ZSBpcyB0aGUgaW50ZWdlciB1bmRlcmZsb3cgYW5kIHRoZSByZXN1bHRpbmcgaW52YWxpZCBhbGlnbm1lbnQgdmFsdWUuIFRoaXMgY291bGQsIGluIHRoZW9yeSwgdHJpZ2dlciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBvdGhlciBjcmFzaGVzLCBhbmQgS0FTQU4vVUJTQU4gb3IgZ2VuZXJhbCBmdXp6aW5nIHdvdWxkIGNlcnRhaW5seSBjYXRjaCB0aGVzZS4gU2luY2UgdGhpcyBpc24ndCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNiwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoxMC42NzM5OTg1MjdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgdW5kZXJmbG93IGJ1ZyB3aGVyZSBgc3QuZGlvX21lbV9hbGlnbmAgY291bGQgYmUgMCwgcmVzdWx0aW5nIGluIGBzdC5kaW9fbWVtX2FsaWduIC0gMWAgZXZhbHVhdGluZyB0byBhIGh1Z2UgdmFsdWUgKGUuZy4sIGAweGZmZmZmZmZmYCkuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWxpZ25tZW50IGNhbGN1bGF0aW9ucyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMuIFRoZSBmaXggYWRkcyBhIGNoZWNrIGZvciBgc3QuZGlvX21lbV9hbGlnbiAhPSAwYCBhbmQgYm91bmRzIHRoZSBhbGlnbm1lbnQgdG8gYFBBR0VfU0laRSAtIDFgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBub3IgYXJlIHRoZXJlIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSB0aGUgdW5kZXJmbG93IHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHVuZGVyZmxvdyBidWcgd2hlcmUgYHN0LmRpb19tZW1fYWxpZ25gIGNvdWxkIGJlIDAsIHJlc3VsdGluZyBpbiBgc3QuZGlvX21lbV9hbGlnbiAtIDFgIGV2YWx1YXRpbmcgdG8gYSBodWdlIHZhbHVlIChlLmcuLCBgMHhmZmZmZmZmZmApLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGFsaWdubWVudCBjYWxjdWxhdGlvbnMgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzLiBUaGUgZml4IGFkZHMgYSBjaGVjayBmb3IgYHN0LmRpb19tZW1fYWxpZ24gIT0gMGAgYW5kIGJvdW5kcyB0aGUgYWxpZ25tZW50IHRvIGBQQUdFX1NJWkUgLSAxYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbm9yIGFyZSB0aGVyZSBhbnkga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMgcmVzdWx0aW5nIGZyb20gdGhlIHVuZGVyZmxvdyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowmrp4t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 20:41:44 +0000 UTC FinishedAt: 2026-08-10 21:12:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "44d7c598-ee45-48ad-bd8c-d2bbea6fb038" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_configure", "loop_change_fd", "zloop_ctl_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2xvb3BfY2hhbmdlX2ZkJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgdW5kZXJmbG93IGJ1ZyB3aGVyZSBgc3QuZGlvX21lbV9hbGlnbmAgY291bGQgYmUgMCwgcmVzdWx0aW5nIGluIGBzdC5kaW9fbWVtX2FsaWduIC0gMWAgZXZhbHVhdGluZyB0byBhIGh1Z2UgdmFsdWUgKGUuZy4sIGAweGZmZmZmZmZmYCkuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWxpZ25tZW50IGNhbGN1bGF0aW9ucyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMuIFRoZSBmaXggYWRkcyBhIGNoZWNrIGZvciBgc3QuZGlvX21lbV9hbGlnbiAhPSAwYCBhbmQgYm91bmRzIHRoZSBhbGlnbm1lbnQgdG8gYFBBR0VfU0laRSAtIDFgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBub3IgYXJlIHRoZXJlIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSB0aGUgdW5kZXJmbG93IHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZWQ3ZGE4ZTM3OTA0MTk2NmFhZTA4MjYzZGM0ZWE2N2JkYzJmODY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggODYzOWZhMzRiODQ3MC4uY2JmMWUyY2UyNzEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTQ1OCwxMiAmIzQzOzQ1OCwxNCBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xuIFx0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiYjNDM7XHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uICBUaGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyB6ZXJvZWQgYWxpZ25tZW50cyBpZiB0aGVcbiYjNDM7XHQgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4mIzQzO1x0ICogZGV2aWNlIGxpbWl0cyBpbiB0aGF0IGNhc2UuXG4gXHQgKi9cbiBcdGlmICghdmZzX2dldGF0dHIoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbiYjNDM7XHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDQzMjNhYzEwOGNhZTguLmYwY2EyMjE1MjRkYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTEwNDIsMTIgJiM0MzsxMDQyLDE0IEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuIFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbWluZ1xuIFx0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiYjNDM7XHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uICBUaGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyB6ZXJvZWQgYWxpZ25tZW50cyBpZiB0aGVcbiYjNDM7XHQgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4mIzQzO1x0ICogZGV2aWNlIGxpbWl0cyBpbiB0aGF0IGNhc2UuXG4gXHQgKi9cbiBcdGlmICghdmZzX2dldGF0dHIoXHUwMDI2em9uZS1cdTAwM2VmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xuJiM0MztcdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSBcdTAwMjZcdTAwMjYgc3QuZGlvX21lbV9hbGlnbikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4gXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZWQ3ZGE4ZTM3OTA0MTk2NmFhZTA4MjYzZGM0ZWE2N2JkYzJmODY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDg2MzlmYTM0Yjg0NzAuLmNiZjFlMmNlMjcxMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC00NTgsMTIgJiM0Mzs0NTgsMTQgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCSAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nCiAJICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzCiAJICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuCi0JICogdXNlZCBmb3IgZGlyZWN0LWlvLgomIzQzOwkgKiB1c2VkIGZvciBkaXJlY3QtaW8uICBUaGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyB6ZXJvZWQgYWxpZ25tZW50cyBpZiB0aGUKJiM0MzsJICogZmlsZSBjYW4mIzM5O3QgYmUgdXNlZCBmb3IgZGlyZWN0LWlvIGF0IGFsbCwgc28gZmFsbCBiYWNrIHRvIHRoZSBibG9jawomIzQzOwkgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS4KIAkgKi8KIAlpZiAoIXZmc19nZXRhdHRyKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pKSB7CiYjNDM7CSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pICZhbXA7JmFtcDsgc3QuZGlvX21lbV9hbGlnbikgewogCQlsby0mZ3Q7bG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTsKJiM0MzsJCWxvLSZndDtsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jCmluZGV4IDQzMjNhYzEwOGNhZTguLmYwY2EyMjE1MjRkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmMKQEAgLTEwNDIsMTIgJiM0MzsxMDQyLDE0IEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLAogCSAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmcKIAkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKIAkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KLQkgKiB1c2VkIGZvciBkaXJlY3QtaW8uCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZQomIzQzOwkgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrCiYjNDM7CSAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLgogCSAqLwogCWlmICghdmZzX2dldGF0dHIoJmFtcDt6b25lLSZndDtmaWxlLSZndDtmX3BhdGgsICZhbXA7c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSAmYW1wOyZhbXA7Ci0JICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikgJmFtcDsmYW1wOyBzdC5kaW9fbWVtX2FsaWduKSB7CiAJCXpsby0mZ3Q7YmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247Ci0JCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxOwomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTsKIAl9IGVsc2UgaWYgKHNiX2JkZXYpIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gYmRldl9waHlzaWNhbF9ibG9ja19zaXplKHNiX2JkZXYpOwogCQl6bG8tJmd0O2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIExvb3AgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgc3QuZGlvX21lbV9hbGlnbmAgaXMgaGFuZGxlZCB3aXRoaW4gYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIChpbiBgbG9vcC5jYCkgYW5kIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgKGluIGB6bG9vcC5jYCkuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2ssIGAmYW1wOyZhbXA7IHN0LmRpb19tZW1fYWxpZ25gLCBhbmQgYSBsaW1pdGluZyBjb25kaXRpb246IGBsb19kaW9fbWVtX2FsaWduYCBpcyBub3cgY2FwcGVkIGF0IGBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgaXQgc2VlbXMgcmVsYXRlZCB0byBEaXJlY3QgSS9PIGFsaWdubWVudC4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8gZGVlcGVyPyBJcyB0aGlzIHBhdGNoIGV2ZW4gcmVhY2hhYmxlLCBhbmQgY291bGQgaXQgYmVuZWZpdCBmcm9tIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGlzIHBhcnQgb2YgdGhlIGxvb3AgZGV2aWNlIGRyaXZlci4gR2l2ZW4gdGhlIHdpZGVzcHJlYWQgdXNlIG9mIGxvb3AgZGV2aWNlcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGZ1bmN0aW9uIGFuZCBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gV2UgbWlnaHQgd2FudCB0byBsb29rIGF0IGhvdyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYWZmZWN0IHRoaXMuCgpgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGFsc28gc2VlbXMgaW50ZXJlc3RpbmcuIEJ1dCB3YWl0IGEgbWludXRlLCBgemxvb3AuY2AuLi4gaXMgdGhhdCBhIHN0YW5kYXJkIGtlcm5lbCBkcml2ZXIsIG9yIGEgbW9kdWxlIEkgbmVlZCB0byBsb29rIHVwPyBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0OyBJIGRvbiYjMzk7dCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZC4gTGV0JiMzOTtzIGxvb2sgdGhhdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9nZXRfYmxvY2tfc2l6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTAxNz1zdGF0aWMgc3RydWN0IGZpbGUgKnpsb29wX2ZpbHBfb3Blbl9mbXQoaW50IG9mbGFncywgdW1vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMzU6c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi1cdFx0XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDc4PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTMtXHRcdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE0Olx0XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExNS1cdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUzLVx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTQ6XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1OC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU5Olx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqS2NvbmZpZyBEaXZlIGZvciBMb29waW5nIENvbnN0cnVjdHMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgS2NvbmZpZywgaGFuZGxlcyBsb29wcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGNvbnN0cnVjdHMuIEkga25vdyB0aGV5JiMzOTtyZSBvdXQgdGhlcmUgc29tZXdoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb24uIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc3VidGxlIGRpZmZlcmVuY2VzIHRoYXQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yLiBJIHdpbGwgY2hlY2sgdGhlIEtjb25maWcgZG9jdW1lbnRhdGlvbiBhbmQgcmVsZXZhbnQgZmlsZXMgZm9yIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIHRob3NlIGNvbnN0cnVjdHMuIEFuZCBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoYXQgdGhleSB3b3JrIHdpdGggZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGNvbmRpdGlvbmFscy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCBJIGNhbiBleHBsb2l0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBLY29uZmlnIGZvciBgemxvb3BgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgcmVnYXJkaW5nIHRoZSBmdW5jdGlvbmFsaXR5IHBvdGVudGlhbGx5IGVuY2Fwc3VsYXRlZCBieSAmIzM0O3psb29wLiYjMzQ7IElzIGl0IGEgZmVhdHVyZSwgYSBkcml2ZXIsIGFuIG9wdGlvbiwgb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3k/IFRoZSBzcGVjaWZpY3Mgb2Ygd2hhdCBgemxvb3BgICppcyogd2lsbCBkcmFtYXRpY2FsbHkgaW5mbHVlbmNlIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgaXRzIEtjb25maWcgZW50cmllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3ltYm9scywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGNvbmRpdGlvbmFsIGJsb2NrcyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgS2NvbmZpZyBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IGB6bG9vcGAgZml0cyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWkxPT1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKSG1tLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVsZWdhbnQgd2F5IHRvIGhhbmRsZSB0aGlzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGJvaWxzIGRvd24gdG8gYSBsb29wLCBwb3RlbnRpYWxseSB3aXRoaW4gYSBibG9jaywgcmVsYXRlZCB0byBaLWF4aXMgbW92ZW1lbnQuIEluc3RlYWQgb2YgYSBtb3JlIHZlcmJvc2UgYXBwcm9hY2gsIHdvdWxkIGEgY29uY2lzZSBgY29uZmlnIFpMT09QYCBvciBldmVuIGBjb25maWcgQkxLX1pMT09QYCBjb21tYW5kIGJlIHN1ZmZpY2llbnQ/IFRoYXQgYXBwcm9hY2ggd291bGQgYmUgbXVjaCBjbGVhbmVyIHRoYW4gYW55IG90aGVyIGFwcHJvYWNoLiBJIG5lZWQgdG8gYmFsYW5jZSBjbGFyaXR5IGFuZCBlZmZpY2llbmN5LCBhbmQgdGhlc2Ugc2hvcnQgb3B0aW9ucyBmZWVsIGxpa2UgYSBwb3RlbnRpYWwgd2luLiBJIGp1c3QgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggaXMgbW9yZSBzZW1hbnRpY2FsbHkgYXBwcm9wcmlhdGUsIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBpbXBsaWNpdCBiZWhhdmlvciBJJiMzOTttIG92ZXJsb29raW5nIHdpdGggZWl0aGVyIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgLipaTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqQ2hlY2tpbmcgdGhlIEJsb2NrIERyaXZlciBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgb3V0IGlmIGB6bG9vcC5jYCBpcyBwYXJ0IG9mIHRoZSBibG9jayBkcml2ZXIgZWNvc3lzdGVtLCBzcGVjaWZpY2FsbHkgaWYgaXRzIGJ1aWxkIGluc3RydWN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgYGRyaXZlcnMvYmxvY2svTWFrZWZpbGVgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGluaXRpYWwgZGlhZ25vc3RpYyBzdGVwIGZvciBhbnkga2VybmVsIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSB0aGVyZSwgaWYgaXQmIzM5O3MgdGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGU9NDA9b2JqLSQoQ09ORklHX0JMS19ERVZfVUJMSylcdFx0XHQmIzQzOz0gdWJsa19kcnYub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QKSAmIzQzOz0gemxvb3Aub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS00Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBab25lZCBCbG9jayBEZXZpY2UgU3VwcG9ydCB3aXRoIExvb3AgRGV2aWNlcyoqCgpSaWdodCwgYENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1BgLi4uIFRoYXQgaW1tZWRpYXRlbHkgYnJpbmdzIHVwIGEgZmV3IGNvbnNpZGVyYXRpb25zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBlbXVsYXRpbmcgYSB6b25lZCBibG9jayBkZXZpY2UsIGxpa2VseSBTTVIgb3Igc29tZSBvdGhlciBmb3JtIG9mIGhvc3QtbWFuYWdlZCBzdG9yYWdlLCB1c2luZyBhIHJlZ3VsYXIgbG9vcCBkZXZpY2Ugb24gYSBzdGFuZGFyZCBmaWxlIHN5c3RlbS4gT2theSwgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGZhaXJseSBncmFudWxhciwgc28gdGhpcyBzcGVjaWZpYyBvcHRpb24gcHJvYmFibHkgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciB0aGlzICpzcGVjaWZpYyogdXNlIGNhc2Ug4oCTIHpvbmUgc3VwcG9ydCBvbiBhIGxvb3AgZGV2aWNlLgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHBvdGVudGlhbCBjaGFsbGVuZ2VzLiBUaGUgZnVuZGFtZW50YWwgYWJzdHJhY3Rpb24gbWlzbWF0Y2ggaXMgb2J2aW91cy4gQSBzdGFuZGFyZCBmaWxlIHN5c3RlbSBpc24mIzM5O3Qgem9uZS1hd2FyZSwgc28gaG93IGFyZSB3ZSBnb2luZyB0byB0cmFuc2xhdGUgem9uZSBib3VuZGFyaWVzIGFuZCBjb25zdHJhaW50cyBvbnRvIGEgYmxvY2stYmFzZWQgbG9vcCBkZXZpY2U/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzaW5nbGUgdW5kZXJseWluZyBmaWxlLCBvciBtdWx0aXBsZSBmaWxlcyByZXByZXNlbnRpbmcgem9uZXM/IFdoYXQgbWV0YWRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgZW1wbG95ZWQ/IEFyZSB3ZSBhdHRlbXB0aW5nIHRvIHNpbXVsYXRlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgU01SLCBvciBqdXN0IHByb3ZpZGluZyBhIGZ1bmN0aW9uYWwgaW50ZXJmYWNlIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudD8KClRoZW4gSSB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB3cml0ZSBwYXRocy4gRG9lcyB0aGlzIGludm9sdmUgc29tZSBzb3J0IG9mIGJ1ZmZlcmluZyBhbmQgY29hbGVzY2luZyB0byBlbXVsYXRlIHNlcXVlbnRpYWwgd3JpdGUgcmVxdWlyZW1lbnRzPyBBcmUgdGhlcmUgc3BlY2lmaWMgem9uZSBtYW5hZ2VtZW50IGNvbW1hbmRzIGltcGxlbWVudGVkIHRvIG1hcCB0byB0aGUgbG9vcCBkZXZpY2UmIzM5O3MgdW5kZXJseWluZyBibG9jayBzdG9yYWdlPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGdlbmVyaWMgYmxvY2sgbGF5ZXIgYW5kIGl0cyBzY2hlZHVsaW5nIGFsZ29yaXRobXMuIEFyZSB0aGVyZSBwZXJmb3JtYW5jZSB0cmFkZS1vZmZzPyBMYXRlbmN5IGNvbnNpZGVyYXRpb25zPyBBcmUgd2UgY29tcGxldGVseSBtYXNraW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLCBvciBwcm92aWRpbmcgYSB0cmFuc3BhcmVudCBpbnRlcmZhY2UgdG8gdGhlIGVuZCB1c2VyPwoKSSBhc3N1bWUgdGhlIGludGVudGlvbiBpcyBmb3IgZGV2ZWxvcG1lbnQsIGVtdWxhdGlvbiwgb3IgdGVzdGluZyBvZiB6b25lZCBzdG9yYWdlLCBhcyB0aGUgb3ZlcmhlYWQgd291bGQgbGlrZWx5IGJlIGhpZ2ggaWYgdGhpcyB3ZXJlIGRlcGxveWVkIGluIGEgcHJvZHVjdGlvbiBzZXR0aW5nLiBJdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBhcHByb2FjaCwgYnV0IG15IGZpcnN0IHF1ZXN0aW9ucyB3b3VsZCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaG93IHdyaXRlIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgYW5kIHdoYXQga2luZCBvZiB3cml0ZSBwZW5hbHRpZXMgYXJlIGJlaW5nIGltcG9zZWQuIE5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTG9vcCBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBsb29wIGRldmljZSBzaXR1YXRpb24uIFRoZSB0d28gY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFRob3NlIGFyZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLCBvciBhdCBsZWFzdCB0aGV5IHNob3VsZCBiZS4KCk15IG1haW4gdGFyZ2V0cywgZnVuY3Rpb24td2lzZSwgYXJlIGdvaW5nIHRvIGJlIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBhbmQgYHpsb29wX2dldF9ibG9ja19zaXplYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHJlbGF0ZWQgdG8gZGlyZWN0IEkvTyBhbmQgcGVyaGFwcyB6b25lZCBzdG9yYWdlIGNvbnNpZGVyYXRpb25zIHdpdGhpbiB0aG9zZS4KClRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGp1bXAgcmlnaHQgaW50byBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gSG9wZWZ1bGx5LCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgaWxsdW1pbmF0ZSB0aGUgaW1wYWN0IG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTQzOT1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUxOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE4PXN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjUtXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyNjpcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtNTI3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU5OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBBcyBJJiMzOTttIGNvbmZpZ3VyaW5nIGEgbG9vcCBkZXZpY2UsIEkmIzM5O20gbm93IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBvbmUgYXJlIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIG9uZXMgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIGdyYXNwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgpTbywgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgYXJlIHdlIGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgcGljdHVyZSB3aXRoIGBsb29wX2NvbmZpZ3VyZWA/IE9yIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaW4gc2V0dGluZyB1cCB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpdGggYGxvb3Bfc2V0X2ZkYD8gT3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIHNldHRpbmcgdXAgdGhlIHN0YXR1cyBvciBmbGFncyB3aXRoIGBsb29wX3NldF9zdGF0dXNgPyBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBlYWNoIG9mIHRoZXNlIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBwaWVjZXMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9hc3NpZ25fYmFja2luZ19maWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTQ5Mz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MTctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MTg6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01NDg9c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTYwNS1cdG1hcHBpbmdfc2V0X2dmcF9tYXNrKG9sZF9maWxlLVx1MDAzZWZfbWFwcGluZywgbG8tXHUwMDNlb2xkX2dmcF9tYXNrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjYwNjpcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02MDctXHRsb29wX3VwZGF0ZV9kaW8obG8pO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDU9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Mi1cdGxvLVx1MDAzZWxvX2RldmljZSA9IGJkZXY7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDgzOlx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbnMqKgoKSG1tLCB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHN0cmVhbWxpbmUgdGhpc+KApiBgbG9vcF9jb25maWd1cmVgIGFuZCBgbG9vcF9jaGFuZ2VfZmRgIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgbGlrZWx5IHRvIG9mZmVyIHNvbWUgcm9vbSBmb3IgaW1wcm92ZW1lbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlLCBvZiBjb3Vyc2UuCgpNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGNoZWNrIGB6bG9vcC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgd29ya3Mgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgYmxvY2tpbmcgYmVoYXZpb3Igd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTc9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM1OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzYtXHRcdFx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA3OD1zdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEzLVx0XHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTExNDpcdFx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXHRcdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1My1cdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU0Olx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTUtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1OTpcdHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIGB6bG9vcF9pbml0X3pvbmVgIENhbGwgU3RhY2sqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gU29tZXRoaW5nJiMzOTtzIGdvaW5nIG9uIHdpdGggYHpsb29wX2luaXRfem9uZWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogZXhhY3RseS4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjaywgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBpdHMgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSB0byBwaW5wb2ludCB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcgb3IgdGhlIGlzc3VlIEkgc3VzcGVjdC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgZ3JlcHBpbmcgb3IgdXNpbmcgbXkgSURFJiMzOTtzIGNhbGwgaGllcmFyY2h5IGZlYXR1cmUgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfaW5pdF96b25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMDM1PXN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc3LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNzg6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVx0XHRcdCAgIHVuc2lnbmVkIGludCB6b25lX25vLCBib29sIHJlc3RvcmUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExODc9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjgzLVx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIHpvbmUgZmlsZXMsIHdlIGFyZSByZXN0b3JpbmcgYSBkZXZpY2UgY3JlYXRlZCBieSBhXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4NDpcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyODUtXHQgKiB0aGF0IHRoZSB6b25lIGZpbGVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgY29uZmlndXJhdGlvbiBnaXZlbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3pvbmVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyODk6XHRcdHJldCA9IHpsb29wX2luaXRfem9uZSh6bG8sIG9wdHMsIGksIHJlc3RvcmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTAtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIFpsb29wIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIGB6bG9vcF9jdGxfYWRkYCBpcyB0aGUgYWR2ZXJ0aXNlZCBlbnRyeSBwb2ludCBmb3IgdGhlIFpsb29wIGZ1bmN0aW9uYWxpdHkuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQmIzM5O3MgaW52b2tlZC4gSXMgdGhpcyBhIHRyYWRpdGlvbmFsIHN5c3RlbSBjYWxsPyBPciBhcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLCBsaWtlIGFuIGBpb2N0bGA/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgbmF0dXJlLiBLbm93aW5nIHRoYXQgd2lsbCBzaGFwZSBteSBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbiBwYXRoIOKAkyB1bmRlcnN0YW5kaW5nIGRhdGEgc3RydWN0dXJlcywgcGVybWlzc2lvbiBtb2RlbHMsIG9yIGVycm9yIGNvZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9jdGxfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMTY4PXN0YXRpYyBib29sIHpsb29wX2Rldl9leGlzdHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg2LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExODc6c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODgte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjYxPXN0YXRpYyBzc2l6ZV90IHpsb29wX2N0bF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2OTktXHRjYXNlIFpMT09QX0NUTF9BREQ6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTcwMDpcdFx0cmV0ID0gemxvb3BfY3RsX2FkZChcdTAwMjZvcHRzKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzAxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxNwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKk15IEltbWVkaWF0ZSBBbmFseXNpcyBvZiB0aGUgemxvb3AgQ29udHJvbCBQYXRoKioKCkFscmlnaHQsIGB6bG9vcF9jdGxfd3JpdGVgIGlzIGNsZWFybHkgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgemxvb3AgY29udHJvbCBjb21tYW5kcy4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBjb250cm9sbGluZyB0aGUgbG9vcCBkZXZpY2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnRlcm5hbGx5IHdpdGhpbiBgbG9vcF9jb25maWd1cmVgIGFuZCBgbG9vcF9jaGFuZ2VfZmRgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFsbW9zdCBjZXJ0YWlubHkgcmVseSBvbiBgaW9jdGxgIGNhbGxzIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIGxvb3AgZGV2aWNlIGl0c2VsZi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlbSBiZWluZyBpb2N0bHMgYXJlIGNvcnJlY3QsIGJlY2F1c2UgdGhhdCBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBrZXJuZWwuIEkgY2FuIGltbWVkaWF0ZWx5IHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGRyaXZlciYjMzk7cyBjb2RlIGZvciB0aGVzZSBmdW5jdGlvbnMgdG8gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGlvY3RsIGNhbGwsIGFuZCB3aGF0IGRhdGEgZ2V0cyBwYXNzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9uIG9mIHRoZSBvcGVyYXRpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9OTY9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDctICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwODogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA5LSAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTQ5Mz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MDgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MDk6XHRcdC8qIE9yZGVyIHdydCBzZXR0aW5nIGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSBpbiBsb29wX2NvbmZpZ3VyZSgpLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtNTEwLVx0XHRybWIoKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz05NzA9c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTAwNTpzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMDYtXHRcdFx0ICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMzQtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSkge1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTAzNTpcdFx0ZXJyb3IgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGJkZXYsIGxvb3BfY29uZmlndXJlLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwMzYtXHRcdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTIyLVx0aWYgKCEobW9kZSBcdTAwMjYgQkxLX09QRU5fRVhDTCkpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTIzOlx0XHRiZF9hYm9ydF9jbGFpbWluZyhiZGV2LCBsb29wX2NvbmZpZ3VyZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTI0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzAtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMzE6XHRcdGJkX2Fib3J0X2NsYWltaW5nKGJkZXYsIGxvb3BfY29uZmlndXJlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMzItb3V0X3B1dGY6XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTIxMj1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNy1cdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVx0ICpcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIxLVx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcJiMzNDtzdHJ1Y3QgZmlsZVwmIzM0O1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTIyMjpcdCAqIHdoaWNoIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBmb3VuZCB2aWEgZmdldCgpIHdhcyB0aGlzXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIzLVx0ICogbG9vcCBkZXZpY2UuXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUzOT1zdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTU3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU1ODpcdFx0cmV0dXJuIGxvb3BfY29uZmlndXJlKGxvLCBtb2RlLCBiZGV2LCBcdTAwMjZjb25maWcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU1OS1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTY1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU2NjpcdFx0cmV0dXJuIGxvb3BfY29uZmlndXJlKGxvLCBtb2RlLCBiZGV2LCBcdTAwMjZjb25maWcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2Ny1cdH1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz0zNDk9c3RhdGljIGludCBudm1lX2xvb3BfY29ubmVjdF9pb19xdWV1ZXMoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTM2Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjM2MzpzdGF0aWMgaW50IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtMzY0LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz00NDA9c3RhdGljIHZvaWQgbnZtZV9sb29wX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNDU4LVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NDU5Olx0cmV0ID0gbnZtZV9sb29wX2NvbmZpZ3VyZV9hZG1pbl9xdWV1ZShjdHJsKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTQ2MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM9NTUyPXN0YXRpYyBzdHJ1Y3QgbnZtZV9jdHJsICpudm1lX2xvb3BfY3JlYXRlX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTU5NS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjU5NjpcdHJldCA9IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCk7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy01OTctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2ggZm9yIEJsb2NrIERyaXZlciBBbGlnbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGVudHJ5IHBvaW50czogYGxvb3BfY29uZmlndXJlYCwgYGxvb3BfY2hhbmdlX2ZkYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRocyB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGlzIG5ldyBhbGlnbm1lbnQgbG9naWMuICBMZXQmIzM5O3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBsb29wX2NvbmZpZ3VyZWAgZGlyZWN0bHkgY2FsbHMgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGFuZCB0aGF0LCBpbiB0dXJuLCBjYWxscyBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAuIEdvdCBpdC4gQW5kIGZvciBgemxvb3BgLCBgemxvb3BfY3RsX3dyaXRlYCBzZWVtcyB0byBnbyB0byBgemxvb3BfY3RsX2FkZGAsIHRoZW4gYHpsb29wX2luaXRfem9uZWAsIGFuZCBmaW5hbGx5IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAuCgpOb3cgSSBzZWUsIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjYW4gYmUgemVyby4gVGhpcyBsZWFkcyB0byBhbiBpbnRlZ2VyIHVuZGVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGBsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbmAsIHBvdGVudGlhbGx5IHNldHRpbmcgaXQgdG8gYFVJTlRfTUFYYCBvciBgVUxPTkdfTUFYYCwgd2hpY2ggaXMgY2xlYXJseSBhIHByb2JsZW0uIFNvLCB0aGUgcGF0Y2ggaXMgY2FwcGluZyBpdCBhdCBgUEFHRV9TSVpFIC0gMWAgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nLiBBIGdvb2QgZml4IGZvciB0aGF0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgYmxvY2sgZHJpdmVyIGZpeCBhZmZlY3RpbmcgYm90aCBgbG9vcGAgYW5kIGB6bG9vcGAuICBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggYWxpZ25tZW50IGlzc3VlcywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCB0byBlbnN1cmUgc3RhYmlsaXR5LgoKVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgZWZmb3J0cywgSSB3aWxsIGZvY3VzIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3BfY2hhbmdlX2ZkYCBmb3IgdGhlIGBsb29wYCBkcml2ZXIsIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBmb3IgdGhlIGB6bG9vcGAgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nj1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwNy0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDktICovXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTI5PXN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQwLS8qXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1NDE6ICogbG9vcF9jaGFuZ2VfZmQgc3dpdGNoZWQgdGhlIGJhY2tpbmcgc3RvcmUgb2YgYSBsb29wYmFjayBkZXZpY2UgdG9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0Mi0gKiBhIG5ldyBmaWxlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3BlcmF0aW5nIHN5c3RlbSBpbnN0YWxsZXJzIHRvIGZyZWUgdXBcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01NDctICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1NDg6c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTQ5LVx0XHRcdCAgdW5zaWduZWQgaW50IGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMjEyPXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjE4Olx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTktXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjEtXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjIyOlx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjMtXHQgKiBsb29wIGRldmljZS5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NjgtXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU2OTpcdFx0cmV0dXJuIGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU3MC1cdGNhc2UgTE9PUF9DTFJfRkQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgemxvb3BfY3RsX3dyaXRlYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHpsb29wX2N0bF93cml0ZWAgZnVuY3Rpb24uIEkgdmFndWVseSByZWNhbGwgc29tZSBzcGVjaWZpYyBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgaXQuIEkga25vdyB0aGUgYmFzaWMgZmxvdywgYnV0IEkgbmVlZCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUgbnVhbmNlcyBvZiBob3cgYHpsb29wX2N0bF93cml0ZWAgZGVhbHMgd2l0aCBwb3RlbnRpYWxseSBjb21wbGV4IGNvbnRyb2wgcGF0aHMuIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGFzc3VtcHRpb25zIGl0IG1ha2VzLCBlc3BlY2lhbGx5IGFyb3VuZCByZXNvdXJjZSBhbGxvY2F0aW9uIG9yIGxvY2tpbmcgc3RyYXRlZ2llcy4gTm8gcG9pbnQgcmUtaW52ZW50aW5nIHRoZSB3aGVlbCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgaW50ZWdyYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY1Mj1zdGF0aWMgc3RydWN0IHpsb29wX2N0bF9vcCB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NjAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY2MTpzdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NjItXHRcdFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemxvb3BfY3RsX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTUtXHQucmVsZWFzZVx0PSB6bG9vcF9jdGxfcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzU2Olx0LndyaXRlXHRcdD0gemxvb3BfY3RsX3dyaXRlLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTctXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk0MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHpsb29wX2N0bF93cml0ZWAgSGFuZGxlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgemxvb3BfY3RsX3dyaXRlYCBoZXJlIOKAkyB0aGF0JiMzOTtzIHRoZSB3cml0ZSBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIHpsb29wIGNvbnRyb2wgZmlsZS4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBpbmZsdWVuY2UgYmVoYXZpb3IuIEJlZm9yZSBkaWdnaW5nIGluIGFueSBkZWVwZXIsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCBJIHNob3VsZCBrbm93IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQgYnV0IGRvbiYjMzk7dCB3YW50IHRvIHJlbHkgb24gcmVjYWxsLiBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgbG9vcF9zZXRfZmRgIGlzIHN0aWxsIGluIHBsYXksIHRoYXQgdGhlIGNvcmUgbWVjaGFuaXNtIEkmIzM5O20gZmFtaWxpYXIgd2l0aCBoYXNuJiMzOTt0IGJlZW4gZGVwcmVjYXRlZCBvciByYWRpY2FsbHkgYWx0ZXJlZC4gQSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgZnVuZGFtZW50YWxzIHN0aWxsIGFwcGx5LCBiZWZvcmUgSSBjYW4gaGF2ZSBjb25maWRlbmNlIGluIHRoZSByZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3Bfc2V0X2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgYExPT1BfU0VUX0ZEYCBJT0NUTCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgY2xlYXI6IHRoYXQgYExPT1BfU0VUX0ZEYCBpb2N0bCBjYWxsIGxlYWRzIGRpcmVjdGx5IGludG8gYGxvb3BfY29uZmlndXJlYC4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgb2YgY291cnNlLCBiZWNhdXNlIGBMT09QX1NFVF9GRGAgaXMgYWxsIGFib3V0IGNvbm5lY3RpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYSBsb29wIGRldmljZSwgYW5kIGBsb29wX2NvbmZpZ3VyZWAgaXMgd2hlcmUgdGhlIGRldmljZSYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MgYXJlLCB3ZWxsLCBjb25maWd1cmVkLCBpbmNsdWRpbmcgYmluZGluZyBhIGZpbGUgdG8gdGhlIGxvb3AgZGV2aWNlLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJIGV4cGVjdC4gTm93IHRoZSByZWFsIHF1ZXN0aW9uIGJlY29tZXMsIGhvdyBpcyBgbG9vcF9jb25maWd1cmVgIGltcGxlbWVudGVkIGFuZCB3aGF0IGludGVybmFsIGNhbGxzIG1pZ2h0IGl0IG1ha2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0xPT1BfU0VUX0ZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdD0xMTE9aW5zdGFiaWxpdHkuIFRoaXMgaXMgY29uY2VwdHVhbGx5IHNpbWlsYXIgdG8gdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGVcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdDoxMTI6YGBMT09QX1NFVF9GRGBgIGlvY3RsLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgLlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0LTExMy1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDYtXHRzd2l0Y2ggKGNtZCkge1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTU0NzpcdGNhc2UgTE9PUF9TRVRfRkQ6IHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDgtXHRcdC8qXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTcwMz1zdGF0aWMgaW50IGxvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyNC1cdFx0ZmFsbHRocm91Z2g7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzI1Olx0Y2FzZSBMT09QX1NFVF9GRDpcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MjYtXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9sb29wLmg9Nzc9c3RydWN0IGxvb3BfY29uZmlnIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbG9vcC5oLTEwMy1cbmluY2x1ZGUvdWFwaS9saW51eC9sb29wLmg6MTA0OiNkZWZpbmUgTE9PUF9TRVRfRkRcdFx0MHg0QzAwXG5pbmNsdWRlL3VhcGkvbGludXgvbG9vcC5oLTEwNS0jZGVmaW5lIExPT1BfQ0xSX0ZEXHRcdDB4NEMwMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgc28gSSYjMzk7bSBjb25uZWN0aW5nIHRoZSBkb3RzIGhlcmUuIGBMT09QX1NFVF9GRGAgKmRlZmluaXRlbHkqIGNhbGxzIGBsb29wX2NvbmZpZ3VyZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gU28sIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBsb29wX2NvbmZpZ3VyZWAsIGRlZmluaXRlbHksIGFuZCBhbHNvIGBsb29wX2NoYW5nZV9mZGAgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIGluIHRoaXMgY29udGV4dC4KCkFuZCB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYXJlIGBCTEtfREVWX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYC4gVGhvc2UgYXJlIHRoZSB0d28gcmVsZXZhbnQgY29uZmlncy4KCldhaXQgYSBzZWNvbmQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBwYXRoLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgQkxLX0RFVl9aT05FRF9MT09QYCBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgYnkgc2tpcHBpbmcgdGhhdCBzdGVwLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDM1Ni4gSSBrbm93IHRoaXMgZmlsZSBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgYmxvY2sgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBjb25maWd1cmF0aW9uIHBvaW50IHRoZXJlLCBwZXJoYXBzIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IG9yIGEgZGVmaW5pdGlvbiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBkcml2ZXIuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBibG9jayBkZXZpY2VzLiBLbm93aW5nIHRoZSBkZXRhaWxzIGhlcmUgd2lsbCBoZWxwIG1lIHRvLi4uIHdlbGwsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgZGVidWcgYSBkcml2ZXIsIGN1c3RvbWl6ZSBhIGJ1aWxkLCB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgcGxhdGZvcm0mIzM5O3MgY29uZmlndXJhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0ICBTYXkgTiBpZiB5b3UgZG9uJiMzOTt0IHdhbnQgdG8gc3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGUuIEl0IGlzXG4gMzUxOlx0XHQgIHN1Z2dlc3RlZCB0byBlbmFibGUgTiBpZiB5b3VyIGFwcGxpY2F0aW9uKHVibGsgc2VydmVyKSBzd2l0Y2hlcyB0b1xuIDM1MjpcdFx0ICBpb2N0bCBjb21tYW5kIGVuY29kaW5nLlxuIDM1MzpcdFxuIDM1NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuIDM1NTpcdFxuIDM1NjpcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbiAzNTc6XHRcdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMzU4Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcbiAzNTk6XHRcdGhlbHBcbiAzNjA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgY3JlYXRlIGEgem9uZWQgYmxvY2sgZGV2aWNlIHVzaW5nXG4gMzYxOlx0XHQgIHJlZ3VsYXIgZmlsZXMgZm9yIHpvbmVzIChvbmUgZmlsZSBwZXIgem9uZXMpLiBUaGlzIGlzIHVzZWZ1bCB0byB0ZXN0XG4gMzYyOlx0XHQgIGZpbGUgc3lzdGVtcywgZGV2aWNlIG1hcHBlciBhbmQgYXBwbGljYXRpb25zIHRoYXQgc3VwcG9ydCB6b25lZCBibG9ja1xuIDM2MzpcdFx0ICBkZXZpY2VzLiBUbyBjcmVhdGUgYSB6b25lZCBsb29wIGRldmljZSwgbm8gdXNlciB1dGlsaXR5IGlzIG5lZWRlZCwgYVxuIDM2NDpcdFx0ICB6b25lZCBsb29wIGRldmljZSBjYW4gYmUgY3JlYXRlZCAob3IgcmUtc3RhcnRlZCkgdXNpbmcgYSBjb21tYW5kXG4gMzY1Olx0XHQgIGxpa2U6XG4gMzY2Olx0XG4gMzY3Olx0XHQgIGVjaG8gXCYjMzQ7YWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCYjMzQ7IFx1MDAzZSBcXFxuIDM2ODpcdFx0XHQvZGV2L3psb29wLWNvbnRyb2xcbiAzNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgWm9uZWQgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gYGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIG1ha2Ugc3VyZSBgQkxLX0RFVl9aT05FRGAgaXMgZW5hYmxlZCBpbiBvdXIgY29uZmlndXJhdGlvbi4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9MT09QYC4gQWx3YXlzIGdvb2QgdG8gc2VlIGlmIGVuYWJsaW5nIG9uZSB0aGluZyBoYXMgYW55IHVuZXhwZWN0ZWQga25vY2stb24gZWZmZWN0cyBlbHNld2hlcmUuIEl0JiMzOTtzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRjb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4gMTQxOlx0XHRib29sXG4gMTQyOlx0XHRkZWZhdWx0IEJMS19ERVZfVUJEXG4gMTQzOlx0XG4gMTQ0Olx0Y29uZmlnIEJMS19ERVZfTE9PUFxuIDE0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAxNDY6XHRcdGhlbHBcbiAxNDc6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgYSByZWd1bGFyIGZpbGUgYXMgYSBibG9ja1xuIDE0ODpcdFx0ICBkZXZpY2U7IHlvdSBjYW4gdGhlbiBjcmVhdGUgYSBmaWxlIHN5c3RlbSBvbiB0aGF0IGJsb2NrIGRldmljZSBhbmRcbiAxNDk6XHRcdCAgbW91bnQgaXQganVzdCBhcyB5b3Ugd291bGQgbW91bnQgb3RoZXIgYmxvY2sgZGV2aWNlcyBzdWNoIGFzIGhhcmRcbiAxNTA6XHRcdCAgZHJpdmUgcGFydGl0aW9ucywgQ0QtUk9NIGRyaXZlcyBvciBmbG9wcHkgZHJpdmVzLiBUaGUgbG9vcCBkZXZpY2VzXG4gMTUxOlx0XHQgIGFyZSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIG51bWJlciA3IGFuZCB0eXBpY2FsbHlcbiAxNTI6XHRcdCAgY2FsbGVkIC9kZXYvbG9vcDAsIC9kZXYvbG9vcDEgZXRjLlxuIDE1MzpcdFxuIDE1NDpcdFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcbiAxNTU6XHRcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcbiAxNTY6XHRcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxuIDE1NzpcdFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcbiAxNTg6XHRcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxuIDE1OTpcdFx0ICBkcml2ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzkxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBMb29wIERldmljZSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBsb29wIGRldmljZSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHpvbmVkIGxvb3BzLiBJIHNlZSB0aGVyZSBhcmUgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAgb24gdGhlIHN1cmZhY2UuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3aGljaCBhcmUgYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgLCBhbmQgYEJMS19ERVZfWk9ORURgLgoKSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGVudHJ5IHBvaW50cyB0byB1c2UsIGtlZXBpbmcgaW4gbWluZCB0aGUgZ3VpZGFuY2UgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSYjMzk7dmUgbm90ZWQgdGhyZWUga2V5IHN5bWJvbHMgdG8gY29uc2lkZXI6IGBsb29wX2NvbmZpZ3VyZWAsIGBsb29wX2NoYW5nZV9mZGAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYC4KCkluaXRpYWxseSwgSSBzZWUgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBub3QgaWRlYWwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBwcmVmZXJlbmNlLiBJIGluaXRpYWxseSB0aG91Z2h0IGl0IG1pZ2h0IGJlIGV4cG9ydGVkLCBidXQgbm8sIGl0JiMzOTtzIHN0YXRpYy4gTGV0IG1lIHNlZSBpZiBgemxvb3BfY3RsX2FkZGAgaXMgYSBiZXR0ZXIgb3B0aW9uLiBOb3BlLCB0aGF0JiMzOTtzIGFsc28gc3RhdGljLiBIb3dldmVyLCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgYHpsb29wX2N0bF93cml0ZWAgaXMgYWN0dWFsbHkgdGhlIGBmaWxlX29wZXJhdGlvbnNgIHdyaXRlIGhhbmRsZXIuIFRoYXQmIzM5O3MgYSBzdHJvbmcgZW50cnkgcG9pbnQgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gY29udGV4dC4gU28sIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBhbmFseXNpcy4KCmBsb29wX2NvbmZpZ3VyZWAgYW5kIGBsb29wX2NoYW5nZV9mZGAgYXJlIGFsc28gc3RhdGljLCBzbyB0aGV5IG5lZWQgZnVydGhlciBjb25zaWRlcmF0aW9uLiBUaGUgcHJvbXB0IHNheXMgdGhhdCB0aGUgcHJlZmVycmVkIGZ1bmN0aW9ucyBzaG91bGQgYmUgbm9uLXN0YXRpYy4gSG93ZXZlciwgYGxvb3BfY29uZmlndXJlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBiZF9wcmVwYXJlX3RvX2NsYWltYC4gU2luY2UgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXTigJlzIGEgZ29vZCBzaWduLiBTaW1pbGFybHksIGBsb29wX2NoYW5nZV9mZGAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGxvX2lvY3RsYCwgd2hpY2ggaXMgYSBzd2l0Y2ggc3RhdGVtZW50LiBUaGUgY29tcGlsZXIgbWlnaHQgbm90IGlubGluZSBpbiB0aGlzIGNhc2UgZWl0aGVyLgoKYHpsb29wX2N0bF93cml0ZWAgaXMgYWxzbyBwYXNzZWQgYXMgcGFydCBvZiBgZmlsZV9vcGVyYXRpb25zYCwgc28gdGhhdCB3b24mIzM5O3QgYmUgaW5saW5lZC4KCkxldCBtZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnRzLgoKRm9yIHRoZSBiYXNpYyBsb29wIGZ1bmN0aW9uYWxpdHksIGBsb19pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgc28gbGV0IG1lIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIGNoZWNrIGBsb19pb2N0bGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvX2lvY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTEyMTI9c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTYtXHQvKlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNzpcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOC1cdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNz1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MzgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTM5OnN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MC1cdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3MDM9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MjgtXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3Mjk6XHRcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MzAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3OTMtXHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc5NDpcdC5pb2N0bCA9XHRsb19pb2N0bCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3OTUtI2lmZGVmIENPTkZJR19DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MjgKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExvb3AgRGV2aWNlIERpcmVjdC1JTyBQYXRjaCoqCgpPa2F5LCBzbyBgbG9faW9jdGxgIGJlaW5nIHN0YXRpYyBpc24mIzM5O3QgYSBwcm9ibGVtLCBpdCYjMzk7cyBwYXJ0IG9mIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2AsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWVhbnMgdXNpbmcgdGhvc2UgbGFyZ2UgZnVuY3Rpb25zIGxpa2UgYGxvb3BfY29uZmlndXJlYCwgYGxvb3BfY2hhbmdlX2ZkYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIGlzIHBlcmZlY3RseSBhY2NlcHRhYmxlLCBhcyB0aGV5IGRlZmluaXRlbHkgd29uJiMzOTt0IGJlIGlubGluZWQuIEkgd2FzIHJpZ2h0IHRvIHJldmlldyB0aGUgcGF0Y2ggYWdhaW4gLSBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlOgoKYGBgYwogCWlmICghdmZzX2dldGF0dHIoJmFtcDtmaWxlLSZndDtmX3BhdGgsICZhbXA7c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSAmYW1wOyZhbXA7Ci0JICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikgJmFtcDsmYW1wOyBzdC5kaW9fbWVtX2FsaWduKSB7CiAJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwotCQlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpOwogCQlyZXR1cm47CiAJfQpgYGAKClJpZ2h0LCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmb2N1c2luZyBvbiBmaXhpbmcgYSBidWcgaW4gZGlyZWN0LUlPIGFsaWdubWVudCB3aGVuIHVzaW5nIGxvb3AgZGV2aWNlcy4gSXQmIzM5O3MgYSBjbGVhciBpbXByb3ZlbWVudCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcgdGhvcm91Z2hseS4gTXkgaW5zdGluY3Qgd2FzIHNwb3Qtb24uCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYW5hbHlzaXMuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2xvb3BfY2hhbmdlX2ZkJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBkaXJlY3QtaW8gYWxpZ25tZW50IGhhbmRsaW5nIGZvciBsb29wIGFuZCB6bG9vcCBkZXZpY2VzIGJ5IHByZXZlbnRpbmcgYW4gdW5kZXJmbG93IHdoZW4gdGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgYSB6ZXJvZWQgZGlvX21lbV9hbGlnbiwgYW5kIGNhcHBpbmcgaXQgYXQgUEFHRV9TSVpFIC0gMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGxvb3AgZGV2aWNlIGlvY3RscyBhbmQgemxvb3AgY29udHJvbCBmaWxlIHdyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHVuZGVyZmxvdyBidWcgd2hlcmUgYHN0LmRpb19tZW1fYWxpZ25gIGNvdWxkIGJlIDAsIHJlc3VsdGluZyBpbiBgc3QuZGlvX21lbV9hbGlnbiAtIDFgIGV2YWx1YXRpbmcgdG8gYSBodWdlIHZhbHVlIChlLmcuLCBgMHhmZmZmZmZmZmApLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGFsaWdubWVudCBjYWxjdWxhdGlvbnMgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzLiBUaGUgZml4IGFkZHMgYSBjaGVjayBmb3IgYHN0LmRpb19tZW1fYWxpZ24gIT0gMGAgYW5kIGJvdW5kcyB0aGUgYWxpZ25tZW50IHRvIGBQQUdFX1NJWkUgLSAxYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbm9yIGFyZSB0aGVyZSBhbnkga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMgcmVzdWx0aW5nIGZyb20gdGhlIHVuZGVyZmxvdyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlZDdkYThlMzc5MDQxOTY2YWFlMDgyNjNkYzRlYTY3YmRjMmY4NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggODYzOWZhMzRiODQ3MC4uY2JmMWUyY2UyNzEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTQ1OCwxMiAmIzQzOzQ1OCwxNCBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbW9pbmcKIAkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKIAkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KLQkgKiB1c2VkIGZvciBkaXJlY3QtaW8uCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZQomIzQzOwkgKiBmaWxlIGNhbiYjMzk7dCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrCiYjNDM7CSAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLgogCSAqLwogCWlmICghdmZzX2dldGF0dHIoJmFtcDtmaWxlLSZndDtmX3BhdGgsICZhbXA7c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSAmYW1wOyZhbXA7Ci0JICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikgJmFtcDsmYW1wOyBzdC5kaW9fbWVtX2FsaWduKSB7CiAJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwotCQlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmMKaW5kZXggNDMyM2FjMTA4Y2FlOC4uZjBjYTIyMTUyNGRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtMTA0MiwxMiAmIzQzOzEwNDIsMTQgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sCiAJICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbWluZwogCSAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0cwogCSAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJiMzOTtzIGRtYV9hbGlnbm1lbnQgd2hlbgotCSAqIHVzZWQgZm9yIGRpcmVjdC1pby4KJiM0MzsJICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlCiYjNDM7CSAqIGZpbGUgY2FuJiMzOTt0IGJlIHVzZWQgZm9yIGRpcmVjdC1pbyBhdCBhbGwsIHNvIGZhbGwgYmFjayB0byB0aGUgYmxvY2sKJiM0MzsJICogZGV2aWNlIGxpbWl0cyBpbiB0aGF0IGNhc2UuCiAJICovCiAJaWYgKCF2ZnNfZ2V0YXR0cigmYW1wO3pvbmUtJmd0O2ZpbGUtJmd0O2ZfcGF0aCwgJmFtcDtzdCwgU1RBVFhfRElPQUxJR04sIDApICZhbXA7JmFtcDsKLQkgICAgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSkgewomIzQzOwkgICAgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSAmYW1wOyZhbXA7IHN0LmRpb19tZW1fYWxpZ24pIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7CiYjNDM7CQl6bG8tJmd0O2Rpb19tZW1fYWxpZ24gPSBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpOwogCX0gZWxzZSBpZiAoc2JfYmRldikgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7CiAJCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjYKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogNTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW50ZWdlciBVbmRlcmZsb3cgaW4gTG9vcCBhbmQgWmxvb3AgRHJpdmVycyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGZpeGluZyBhbiBpbnRlZ2VyIHVuZGVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIHRoZSBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgYW5kIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbG9vcCBhbmQgemxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYnVnLCBhbmQgd2hldGhlciBpdCBjb3VsZCBwb3RlbnRpYWxseSBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCwgYSBgdTMyYCBtZW1iZXIgd2l0aGluIGEgYHN0cnVjdCBrc3RhdGAsIG1pZ2h0IGJlIHplcm8uIFRoaXMgbGlrZWx5IGhhcHBlbnMgd2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSByZXBvcnRzIHRoYXQgZGlyZWN0IEkvTyBpc24mIzM5O3QgcG9zc2libGUgKGUuZy4sIHplcm9lZCBhbGlnbm1lbnRzKS4gVGhlIHByb2JsZW1hdGljIHBhcnQgbGllcyBpbiB0aGUgc3VidHJhY3Rpb246IGBzdC5kaW9fbWVtX2FsaWduIC0gMWAuIElmIGBzdC5kaW9fbWVtX2FsaWduYCBpcyB6ZXJvLCB0aGlzIGxlYWRzIHRvIGFuIGludGVnZXIgdW5kZXJmbG93LCByZXN1bHRpbmcgaW4gYSBsYXJnZSB2YWx1ZSAoYDB4ZmZmZmZmZmZgIG9yIHNpbWlsYXIpLCB3aGljaCBpcyBhbiBpbnZhbGlkIG9yIG91dC1vZi1ib3VuZHMgYWxpZ25tZW50LgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdG8gY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduYCBiZWluZyBub24temVybywgYW5kIHRoZW4gdXNlIGBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpYCBpbnN0ZWFkLiBUaGlzIGVmZmVjdGl2ZWx5IGNsYW1wcyB0aGUgYWxpZ25tZW50IHZhbHVlLgoKSSBkaWQgYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBub3QgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0uIExvb2tpbmcgYXQgaG93IGBzdGAgaXMgcG9wdWxhdGVkIHRocm91Z2ggYHZmc19nZXRhdHRyYCBhbmQgdGhhdCBpdCYjMzk7cyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLCB0aGUgY2hlY2tzIG9uIHJldHVybiBtYWtlIGl0IGNsZWFyIHRoYXQgaXQmIzM5O3Mgbm90IHVuaW5pdGlhbGl6ZWQuIFRoZSBjYWxsIHRvIGB2ZnNfZ2V0YXR0cmAgaGFuZGxlcyB0aGF0LiBUaGUgcGF0Y2ggY29ycmVjdGx5IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCBvbmx5IHByb2NlZWRzIGlmIHRoZSBzdGF0IGRhdGEgaXMgdmFsaWQsIG9yIHRoZSBgU1RBVFhfRElPQUxJR05gIGZsYWcgaXMgc2V0LgoKVGhlIHJlYWwgaXNzdWUgaXMgdGhlIGludGVnZXIgdW5kZXJmbG93IGFuZCB0aGUgcmVzdWx0aW5nIGludmFsaWQgYWxpZ25tZW50IHZhbHVlLiBUaGlzIGNvdWxkLCBpbiB0aGVvcnksIHRyaWdnZXIgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3Igb3RoZXIgY3Jhc2hlcywgYW5kIEtBU0FOL1VCU0FOIG9yIGdlbmVyYWwgZnV6emluZyB3b3VsZCBjZXJ0YWlubHkgY2F0Y2ggdGhlc2UuIFNpbmNlIHRoaXMgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciB1bmRlcmZsb3cgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjb3VsZCBiZSAwLCByZXN1bHRpbmcgaW4gYHN0LmRpb19tZW1fYWxpZ24gLSAxYCBldmFsdWF0aW5nIHRvIGEgaHVnZSB2YWx1ZSAoZS5nLiwgYDB4ZmZmZmZmZmZgKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduICE9IDBgIGFuZCBib3VuZHMgdGhlIGFsaWdubWVudCB0byBgUEFHRV9TSVpFIC0gMWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIG5vciBhcmUgdGhlcmUgYW55IGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIHRoZSB1bmRlcmZsb3cgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciB1bmRlcmZsb3cgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjb3VsZCBiZSAwLCByZXN1bHRpbmcgaW4gYHN0LmRpb19tZW1fYWxpZ24gLSAxYCBldmFsdWF0aW5nIHRvIGEgaHVnZSB2YWx1ZSAoZS5nLiwgYDB4ZmZmZmZmZmZgKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduICE9IDBgIGFuZCBib3VuZHMgdGhlIGFsaWdubWVudCB0byBgUEFHRV9TSVpFIC0gMWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIG5vciBhcmUgdGhlcmUgYW55IGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIHRoZSB1bmRlcmZsb3cgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDoxMC45MDYzMTgzNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3Njc3MTM5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NvbmZpZ3VyZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcInpsb29wX2N0bF93cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciB1bmRlcmZsb3cgYnVnIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCBjb3VsZCBiZSAwLCByZXN1bHRpbmcgaW4gYHN0LmRpb19tZW1fYWxpZ24gLSAxYCBldmFsdWF0aW5nIHRvIGEgaHVnZSB2YWx1ZSAoZS5nLiwgYDB4ZmZmZmZmZmZgKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zIGFuZCBzdWJzZXF1ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduICE9IDBgIGFuZCBib3VuZHMgdGhlIGFsaWdubWVudCB0byBgUEFHRV9TSVpFIC0gMWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIG5vciBhcmUgdGhlcmUgYW55IGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIHRoZSB1bmRlcmZsb3cgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGRpcmVjdC1pbyBhbGlnbm1lbnQgaGFuZGxpbmcgZm9yIGxvb3AgYW5kIHpsb29wIGRldmljZXMgYnkgcHJldmVudGluZyBhbiB1bmRlcmZsb3cgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gcmVwb3J0cyBhIHplcm9lZCBkaW9fbWVtX2FsaWduLCBhbmQgY2FwcGluZyBpdCBhdCBQQUdFX1NJWkUgLSAxLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBibG9jayBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbG9vcCBkZXZpY2UgaW9jdGxzIGFuZCB6bG9vcCBjb250cm9sIGZpbGUgd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDoxMC45MDYzMjQwNzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTY0NTYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZlZDdkYThlMzc5MDQxOTY2YWFlMDgyNjNkYzRlYTY3YmRjMmY4NjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbmluZGV4IDg2MzlmYTM0Yjg0NzAuLmNiZjFlMmNlMjcxMjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbkBAIC00NTgsMTIgKzQ1OCwxNCBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXFxuIFxcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXFxuIFxcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXFxuLVxcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cXG4rXFx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXFxuK1xcdCAqIGZpbGUgY2FuJ3QgYmUgdXNlZCBmb3IgZGlyZWN0LWlvIGF0IGFsbCwgc28gZmFsbCBiYWNrIHRvIHRoZSBibG9ja1xcbitcXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cXG4gXFx0ICovXFxuIFxcdGlmICghdmZzX2dldGF0dHIoXFx1MDAyNmZpbGUtXFx1MDAzZWZfcGF0aCwgXFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pIFxcdTAwMjZcXHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XFxuLVxcdFxcdGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5pbmRleCA0MzIzYWMxMDhjYWU4Li5mMGNhMjIxNTI0ZGI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbkBAIC0xMDQyLDEyICsxMDQyLDE0IEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbiBcXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXFxuIFxcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXFxuIFxcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXFxuLVxcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cXG4rXFx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXFxuK1xcdCAqIGZpbGUgY2FuJ3QgYmUgdXNlZCBmb3IgZGlyZWN0LWlvIGF0IGFsbCwgc28gZmFsbCBiYWNrIHRvIHRoZSBibG9ja1xcbitcXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cXG4gXFx0ICovXFxuIFxcdGlmICghdmZzX2dldGF0dHIoXFx1MDAyNnpvbmUtXFx1MDAzZWZpbGUtXFx1MDAzZWZfcGF0aCwgXFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pIFxcdTAwMjZcXHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4tXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XFxuIFxcdH0gZWxzZSBpZiAoc2JfYmRldikge1xcbiBcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XFxuIFxcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MTEuMzQyNjc4MDMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1Nzk1OTgzODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcF9jb25maWd1cmVcIixcbiAgICBcImxvb3BfY2hhbmdlX2ZkXCIsXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBkaXJlY3QtaW8gYWxpZ25tZW50IGhhbmRsaW5nIGZvciBsb29wIGFuZCB6bG9vcCBkZXZpY2VzIGJ5IHByZXZlbnRpbmcgYW4gdW5kZXJmbG93IHdoZW4gdGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgYSB6ZXJvZWQgZGlvX21lbV9hbGlnbiwgYW5kIGNhcHBpbmcgaXQgYXQgUEFHRV9TSVpFIC0gMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGxvb3AgZGV2aWNlIGlvY3RscyBhbmQgemxvb3AgY29udHJvbCBmaWxlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmVkN2RhOGUzNzkwNDE5NjZhYWUwODI2M2RjNGVhNjdiZGMyZjg2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIxOjEwOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggODYzOWZhMzRiODQ3MC4uY2JmMWUyY2UyNzEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTQ1OCwxMiArNDU4LDE0IEBAIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXG4gXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuIFx0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZVxuK1x0ICogZmlsZSBjYW4ndCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4rXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xuK1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pIFx1MDAyNlx1MDAyNiBzdC5kaW9fbWVtX2FsaWduKSB7XG4gXHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbitcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDQzMjNhYzEwOGNhZTguLmYwY2EyMjE1MjRkYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTEwNDIsMTIgKzEwNDIsMTQgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG4gXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXG4gXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuIFx0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbi1cdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby4gIFRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIHplcm9lZCBhbGlnbm1lbnRzIGlmIHRoZVxuK1x0ICogZmlsZSBjYW4ndCBiZSB1c2VkIGZvciBkaXJlY3QtaW8gYXQgYWxsLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGJsb2NrXG4rXHQgKiBkZXZpY2UgbGltaXRzIGluIHRoYXQgY2FzZS5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuLVx0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSk7XG4gXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4gXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MTEuMzQyNjc5MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MTc0NTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBob3cgYHN0LmRpb19tZW1fYWxpZ25gIGlzIGhhbmRsZWQgd2l0aGluIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCAoaW4gYGxvb3AuY2ApIGFuZCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIChpbiBgemxvb3AuY2ApLiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBuZXcgY2hlY2ssIGBcdTAwMjZcdTAwMjYgc3QuZGlvX21lbV9hbGlnbmAsIGFuZCBhIGxpbWl0aW5nIGNvbmRpdGlvbjogYGxvX2Rpb19tZW1fYWxpZ25gIGlzIG5vdyBjYXBwZWQgYXQgYG1pbihzdC5kaW9fbWVtX2FsaWduIC0gMSwgUEFHRV9TSVpFIC0gMSlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGl0IHNlZW1zIHJlbGF0ZWQgdG8gRGlyZWN0IEkvTyBhbGlnbm1lbnQuXG5cbk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkaWdnaW5nIGludG8gZGVlcGVyPyBJcyB0aGlzIHBhdGNoIGV2ZW4gcmVhY2hhYmxlLCBhbmQgY291bGQgaXQgYmVuZWZpdCBmcm9tIGZ1enppbmc/IExldCdzIHNlZS4uLiBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgaXMgcGFydCBvZiB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBHaXZlbiB0aGUgd2lkZXNwcmVhZCB1c2Ugb2YgbG9vcCBkZXZpY2VzLCB0aGF0J3MgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBmdW5jdGlvbiBhbmQgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFdlIG1pZ2h0IHdhbnQgdG8gbG9vayBhdCBob3cgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGFmZmVjdCB0aGlzLlxuXG5gemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGFsc28gc2VlbXMgaW50ZXJlc3RpbmcuIEJ1dCB3YWl0IGEgbWludXRlLCBgemxvb3AuY2AuLi4gaXMgdGhhdCBhIHN0YW5kYXJkIGtlcm5lbCBkcml2ZXIsIG9yIGEgbW9kdWxlIEkgbmVlZCB0byBsb29rIHVwPyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IEkgZG9uJ3QgcmVjYWxsIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQuIExldCdzIGxvb2sgdGhhdCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjE1Ljc5NDQyNjk4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ5OTU0NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX2dldF9ibG9ja19zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNTpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDc4PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMy1cXHRcXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE0OlxcdFxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUzLVxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTQ6XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTk6XFx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MTcuNTQ0Mzg3NjE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1OTk1ODQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKktjb25maWcgRGl2ZSBmb3IgTG9vcGluZyBDb25zdHJ1Y3RzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgS2NvbmZpZywgaGFuZGxlcyBsb29wcyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGNvbnN0cnVjdHMuIEkga25vdyB0aGV5J3JlIG91dCB0aGVyZSBzb21ld2hlcmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgZGlmZmVyZW5jZXMgdGhhdCBpbmZsdWVuY2UgdGhlaXIgYmVoYXZpb3IuIEkgd2lsbCBjaGVjayB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIGFuZCByZWxldmFudCBmaWxlcyBmb3IgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhvc2UgY29uc3RydWN0cy4gQW5kIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhhdCB0aGV5IHdvcmsgd2l0aCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgY29uZGl0aW9uYWxzLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IEkgY2FuIGV4cGxvaXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjIwLjIwNDM0OTMwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4NTA1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjIxLjk2Mjg2MTI5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjc5OTU3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBgemxvb3BgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gS2NvbmZpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHJlZ2FyZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBwb3RlbnRpYWxseSBlbmNhcHN1bGF0ZWQgYnkgXCJ6bG9vcC5cIiBJcyBpdCBhIGZlYXR1cmUsIGEgZHJpdmVyLCBhbiBvcHRpb24sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5PyBUaGUgc3BlY2lmaWNzIG9mIHdoYXQgYHpsb29wYCAqaXMqIHdpbGwgZHJhbWF0aWNhbGx5IGluZmx1ZW5jZSB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIGl0cyBLY29uZmlnIGVudHJpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3ltYm9scywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGNvbmRpdGlvbmFsIGJsb2NrcyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBLY29uZmlnIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IGB6bG9vcGAgZml0cyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MjUuNTkwODYxMTExWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM1Njk1NDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pMT09QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDoyNy4yMDQ0Mzk5NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTI4MDM4ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5IbW0sIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCBlbGVnYW50IHdheSB0byBoYW5kbGUgdGhpcy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgbG9vcCwgcG90ZW50aWFsbHkgd2l0aGluIGEgYmxvY2ssIHJlbGF0ZWQgdG8gWi1heGlzIG1vdmVtZW50LiBJbnN0ZWFkIG9mIGEgbW9yZSB2ZXJib3NlIGFwcHJvYWNoLCB3b3VsZCBhIGNvbmNpc2UgYGNvbmZpZyBaTE9PUGAgb3IgZXZlbiBgY29uZmlnIEJMS19aTE9PUGAgY29tbWFuZCBiZSBzdWZmaWNpZW50PyBUaGF0IGFwcHJvYWNoIHdvdWxkIGJlIG11Y2ggY2xlYW5lciB0aGFuIGFueSBvdGhlciBhcHByb2FjaC4gSSBuZWVkIHRvIGJhbGFuY2UgY2xhcml0eSBhbmQgZWZmaWNpZW5jeSwgYW5kIHRoZXNlIHNob3J0IG9wdGlvbnMgZmVlbCBsaWtlIGEgcG90ZW50aWFsIHdpbi4gSSBqdXN0IG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgc2VtYW50aWNhbGx5IGFwcHJvcHJpYXRlLCBvciBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBiZWhhdmlvciBJJ20gb3Zlcmxvb2tpbmcgd2l0aCBlaXRoZXIgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MzAuMTMyNDgxODU4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2MzgxNzQzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipaTE9PUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MzIuNDI4ODcyOTExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjQxMDcxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipDaGVja2luZyB0aGUgQmxvY2sgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCBpZiBgemxvb3AuY2AgaXMgcGFydCBvZiB0aGUgYmxvY2sgZHJpdmVyIGVjb3N5c3RlbSwgc3BlY2lmaWNhbGx5IGlmIGl0cyBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL01ha2VmaWxlYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBpbml0aWFsIGRpYWdub3N0aWMgc3RlcCBmb3IgYW55IGtlcm5lbCBtb2R1bGUuIEknbGwgbmVlZCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSB0aGVyZSwgaWYgaXQncyB0aGVyZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDozNS4wOTI5ODMzMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTgxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfQkxLX0RFVl9VQkxLKVxcdFxcdFxcdCs9IHVibGtfZHJ2Lm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1ApICs9IHpsb29wLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTQyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDozNS4xNDUxODc5NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MjUwMzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIFpvbmVkIEJsb2NrIERldmljZSBTdXBwb3J0IHdpdGggTG9vcCBEZXZpY2VzKipcblxuUmlnaHQsIGBDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QYC4uLiBUaGF0IGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBhIGZldyBjb25zaWRlcmF0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBlbXVsYXRpbmcgYSB6b25lZCBibG9jayBkZXZpY2UsIGxpa2VseSBTTVIgb3Igc29tZSBvdGhlciBmb3JtIG9mIGhvc3QtbWFuYWdlZCBzdG9yYWdlLCB1c2luZyBhIHJlZ3VsYXIgbG9vcCBkZXZpY2Ugb24gYSBzdGFuZGFyZCBmaWxlIHN5c3RlbS4gT2theSwgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZmFpcmx5IGdyYW51bGFyLCBzbyB0aGlzIHNwZWNpZmljIG9wdGlvbiBwcm9iYWJseSBlbmFibGVzIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoaXMgKnNwZWNpZmljKiB1c2UgY2FzZSDigJMgem9uZSBzdXBwb3J0IG9uIGEgbG9vcCBkZXZpY2UuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY2hhbGxlbmdlcy4gVGhlIGZ1bmRhbWVudGFsIGFic3RyYWN0aW9uIG1pc21hdGNoIGlzIG9idmlvdXMuIEEgc3RhbmRhcmQgZmlsZSBzeXN0ZW0gaXNuJ3Qgem9uZS1hd2FyZSwgc28gaG93IGFyZSB3ZSBnb2luZyB0byB0cmFuc2xhdGUgem9uZSBib3VuZGFyaWVzIGFuZCBjb25zdHJhaW50cyBvbnRvIGEgYmxvY2stYmFzZWQgbG9vcCBkZXZpY2U/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzaW5nbGUgdW5kZXJseWluZyBmaWxlLCBvciBtdWx0aXBsZSBmaWxlcyByZXByZXNlbnRpbmcgem9uZXM/IFdoYXQgbWV0YWRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgZW1wbG95ZWQ/IEFyZSB3ZSBhdHRlbXB0aW5nIHRvIHNpbXVsYXRlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgU01SLCBvciBqdXN0IHByb3ZpZGluZyBhIGZ1bmN0aW9uYWwgaW50ZXJmYWNlIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudD9cblxuVGhlbiBJIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHdyaXRlIHBhdGhzLiBEb2VzIHRoaXMgaW52b2x2ZSBzb21lIHNvcnQgb2YgYnVmZmVyaW5nIGFuZCBjb2FsZXNjaW5nIHRvIGVtdWxhdGUgc2VxdWVudGlhbCB3cml0ZSByZXF1aXJlbWVudHM/IEFyZSB0aGVyZSBzcGVjaWZpYyB6b25lIG1hbmFnZW1lbnQgY29tbWFuZHMgaW1wbGVtZW50ZWQgdG8gbWFwIHRvIHRoZSBsb29wIGRldmljZSdzIHVuZGVybHlpbmcgYmxvY2sgc3RvcmFnZT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmljIGJsb2NrIGxheWVyIGFuZCBpdHMgc2NoZWR1bGluZyBhbGdvcml0aG1zLiBBcmUgdGhlcmUgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcz8gTGF0ZW5jeSBjb25zaWRlcmF0aW9ucz8gQXJlIHdlIGNvbXBsZXRlbHkgbWFza2luZyB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSwgb3IgcHJvdmlkaW5nIGEgdHJhbnNwYXJlbnQgaW50ZXJmYWNlIHRvIHRoZSBlbmQgdXNlcj9cblxuSSBhc3N1bWUgdGhlIGludGVudGlvbiBpcyBmb3IgZGV2ZWxvcG1lbnQsIGVtdWxhdGlvbiwgb3IgdGVzdGluZyBvZiB6b25lZCBzdG9yYWdlLCBhcyB0aGUgb3ZlcmhlYWQgd291bGQgbGlrZWx5IGJlIGhpZ2ggaWYgdGhpcyB3ZXJlIGRlcGxveWVkIGluIGEgcHJvZHVjdGlvbiBzZXR0aW5nLiBJdCdzIGFuIGludGVyZXN0aW5nIGFwcHJvYWNoLCBidXQgbXkgZmlyc3QgcXVlc3Rpb25zIHdvdWxkIGludm9sdmUgdW5kZXJzdGFuZGluZyBob3cgd3JpdGUgb3BlcmF0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgd2hhdCBraW5kIG9mIHdyaXRlIHBlbmFsdGllcyBhcmUgYmVpbmcgaW1wb3NlZC4gTmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6MzkuMjA3Njk1MTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0ODIwOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cXHR0cmlzdGF0ZSBcXFwiWm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjQwLjgzMjUyMzI0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYwNTA1NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBMb29wIERldmljZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBsb29wIGRldmljZSBzaXR1YXRpb24uIFRoZSB0d28gY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFRob3NlIGFyZSB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLCBvciBhdCBsZWFzdCB0aGV5IHNob3VsZCBiZS5cblxuTXkgbWFpbiB0YXJnZXRzLCBmdW5jdGlvbi13aXNlLCBhcmUgZ29pbmcgdG8gYmUgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGFuZCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgcmVsYXRlZCB0byBkaXJlY3QgSS9PIGFuZCBwZXJoYXBzIHpvbmVkIHN0b3JhZ2UgY29uc2lkZXJhdGlvbnMgd2l0aGluIHRob3NlLlxuXG5UaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlLi4uIEknbGwganVtcCByaWdodCBpbnRvIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBIb3BlZnVsbHksIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgZnVuY3Rpb24gd2lsbCBpbGx1bWluYXRlIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDo0NC4wOTMwMzE4MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg1MDI5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxOD1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjUtXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjY6XFx0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NDUuNzgxNTUyNjYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTg0NjU5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gQXMgSSdtIGNvbmZpZ3VyaW5nIGEgbG9vcCBkZXZpY2UsIEknbSBub3cgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAuIFJpZ2h0LCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG9uZSBhcmUgdGhlIGtleSBjb21wb25lbnRzLCB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdG8gZ3Jhc3AgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuU28sIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgYXJlIHdlIGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgcGljdHVyZSB3aXRoIGBsb29wX2NvbmZpZ3VyZWA/IE9yIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaW4gc2V0dGluZyB1cCB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpdGggYGxvb3Bfc2V0X2ZkYD8gT3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIHNldHRpbmcgdXAgdGhlIHN0YXR1cyBvciBmbGFncyB3aXRoIGBsb29wX3NldF9zdGF0dXNgPyBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGVhY2ggb2YgdGhlc2UgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBpZWNlcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDo0OC43ODAwMjE1MjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDg4NDY4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9hc3NpZ25fYmFja2luZ19maWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTQ5Mz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUxNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MTg6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUxOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01NDg9c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjA1LVxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKG9sZF9maWxlLVxcdTAwM2VmX21hcHBpbmcsIGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2spO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjYwNjpcXHRsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUobG8sIGZpbGUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTYwNy1cXHRsb29wX3VwZGF0ZV9kaW8obG8pO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwNT1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODItXFx0bG8tXFx1MDAzZWxvX2RldmljZSA9IGJkZXY7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4MzpcXHRsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUobG8sIGZpbGUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEwOjUwLjYyODg3NDU2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk4MDcxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbnMqKlxuXG5IbW0sIHRoaW5raW5nIGFib3V0IGhvdyB3ZSBjYW4gc3RyZWFtbGluZSB0aGlz4oCmIGBsb29wX2NvbmZpZ3VyZWAgYW5kIGBsb29wX2NoYW5nZV9mZGAgYXJlIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbW9zdCBsaWtlbHkgdG8gb2ZmZXIgc29tZSByb29tIGZvciBpbXByb3ZlbWVudC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRvIGJlIHN1cmUsIG9mIGNvdXJzZS5cblxuTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBjaGVjayBgemxvb3AuY2AuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgd29ya3Mgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgYmxvY2tpbmcgYmVoYXZpb3Igd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTc0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NTMuNzI2OTQ5OTEyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MzAwMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX2dldF9ibG9ja19zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNTpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDc4PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMy1cXHRcXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE0OlxcdFxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUzLVxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTQ6XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTk6XFx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NTUuMzAyMjU5MjI2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODM2NTc1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHpsb29wX2luaXRfem9uZWAgQ2FsbCBTdGFjayoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vay4gU29tZXRoaW5nJ3MgZ29pbmcgb24gd2l0aCBgemxvb3BfaW5pdF96b25lYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBleGFjdGx5LiBNeSBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrLCB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgaXRzIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgdG8gcGlucG9pbnQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcgb3IgdGhlIGlzc3VlIEkgc3VzcGVjdC4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgZ3JlcHBpbmcgb3IgdXNpbmcgbXkgSURFJ3MgY2FsbCBoaWVyYXJjaHkgZmVhdHVyZSB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTA6NTguMTg1OTIwMjI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NTU5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX2luaXRfem9uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTAzNT1zdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDc4OnN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzktXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTg3PXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjgzLVxcdCAqIElmIHdlIGFscmVhZHkgaGF2ZSB6b25lIGZpbGVzLCB3ZSBhcmUgcmVzdG9yaW5nIGEgZGV2aWNlIGNyZWF0ZWQgYnkgYVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjg0OlxcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg1LVxcdCAqIHRoYXQgdGhlIHpvbmUgZmlsZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSBjb25maWd1cmF0aW9uIGdpdmVuLlxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyODgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4OTpcXHRcXHRyZXQgPSB6bG9vcF9pbml0X3pvbmUoemxvLCBvcHRzLCBpLCByZXN0b3JlKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI5MC1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMDo1OS43NDU0ODU1OThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5OTM1MDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBabG9vcCBFbnRyeSBQb2ludCoqXG5cbk9rYXksIHNvIGB6bG9vcF9jdGxfYWRkYCBpcyB0aGUgYWR2ZXJ0aXNlZCBlbnRyeSBwb2ludCBmb3IgdGhlIFpsb29wIGZ1bmN0aW9uYWxpdHkuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQncyBpbnZva2VkLiBJcyB0aGlzIGEgdHJhZGl0aW9uYWwgc3lzdGVtIGNhbGw/IE9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMsIGxpa2UgYW4gYGlvY3RsYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBuYXR1cmUuIEtub3dpbmcgdGhhdCB3aWxsIHNoYXBlIG15IGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uIHBhdGgg4oCTIHVuZGVyc3RhbmRpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJtaXNzaW9uIG1vZGVscywgb3IgZXJyb3IgY29kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTowMi44NDQ4MzgwMjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODM2Njc3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTE2OD1zdGF0aWMgYm9vbCB6bG9vcF9kZXZfZXhpc3RzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg2LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTg3OnN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY2MT1zdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2OTktXFx0Y2FzZSBaTE9PUF9DVExfQUREOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzAwOlxcdFxcdHJldCA9IHpsb29wX2N0bF9hZGQoXFx1MDAyNm9wdHMpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzAxLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTowNC40Mjg1MTA4NDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NDA1OTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqTXkgSW1tZWRpYXRlIEFuYWx5c2lzIG9mIHRoZSB6bG9vcCBDb250cm9sIFBhdGgqKlxuXG5BbHJpZ2h0LCBgemxvb3BfY3RsX3dyaXRlYCBpcyBjbGVhcmx5IHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHpsb29wIGNvbnRyb2wgY29tbWFuZHMuIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBjb250cm9sbGluZyB0aGUgbG9vcCBkZXZpY2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0J3MgaGFwcGVuaW5nIGludGVybmFsbHkgd2l0aGluIGBsb29wX2NvbmZpZ3VyZWAgYW5kIGBsb29wX2NoYW5nZV9mZGAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYWxtb3N0IGNlcnRhaW5seSByZWx5IG9uIGBpb2N0bGAgY2FsbHMgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLiBJIG5lZWQgdG8gY29uZmlybSBpZiBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGVtIGJlaW5nIGlvY3RscyBhcmUgY29ycmVjdCwgYmVjYXVzZSB0aGF0IGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4gaW1tZWRpYXRlbHkgc3RhcnQgbG9va2luZyBhdCB0aGUgZHJpdmVyJ3MgY29kZSBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBpb2N0bCBjYWxsLCBhbmQgd2hhdCBkYXRhIGdldHMgcGFzc2VkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgb3BlcmF0aW9ucyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MTcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTowNy42MjI1NzIzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzY1MDkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX2NvbmZpZ3VyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz05Nj1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA3LSAqIGlzX2xvb3BfZGV2aWNlKCkgaXMgdHJ1ZSwgd2UgbmVlZCBhIGdsb2JhbCBsb2NrIGZvciBzZXJpYWxpemluZyBjb25jdXJyZW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA5LSAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NDkzPXN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTA4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUwOTpcXHRcXHQvKiBPcmRlciB3cnQgc2V0dGluZyBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlIGluIGxvb3BfY29uZmlndXJlKCkuICovXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTEwLVxcdFxcdHJtYigpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTcwPXN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDU6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwNi1cXHRcXHRcXHQgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDM0LVxcdGlmICghKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9FWENMKSkge1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMzU6XFx0XFx0ZXJyb3IgPSBiZF9wcmVwYXJlX3RvX2NsYWltKGJkZXYsIGxvb3BfY29uZmlndXJlLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDM2LVxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMjItXFx0aWYgKCEobW9kZSBcXHUwMDI2IEJMS19PUEVOX0VYQ0wpKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMjM6XFx0XFx0YmRfYWJvcnRfY2xhaW1pbmcoYmRldiwgbG9vcF9jb25maWd1cmUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMjQtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTMwLVxcdGlmICghKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTMxOlxcdFxcdGJkX2Fib3J0X2NsYWltaW5nKGJkZXYsIGxvb3BfY29uZmlndXJlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTMyLW91dF9wdXRmOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTIxMj1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE3LVxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMTg6XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE5LVxcdCAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIxLVxcdCAqIG1ha2Ugc3VyZSB0aGF0IGxvb3BfdmFsaWRhdGVfZmlsZSgpIHdpbGwgZmFpbCBpZiB0aGUgXFxcInN0cnVjdCBmaWxlXFxcIlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMjI6XFx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjIzLVxcdCAqIGxvb3AgZGV2aWNlLlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUzOT1zdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NTctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU1ODpcXHRcXHRyZXR1cm4gbG9vcF9jb25maWd1cmUobG8sIG1vZGUsIGJkZXYsIFxcdTAwMjZjb25maWcpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NTktXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTY2OlxcdFxcdHJldHVybiBsb29wX2NvbmZpZ3VyZShsbywgbW9kZSwgYmRldiwgXFx1MDAyNmNvbmZpZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2Ny1cXHR9XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz0zNDk9c3RhdGljIGludCBudm1lX2xvb3BfY29ubmVjdF9pb19xdWV1ZXMoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtMzYyLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jOjM2MzpzdGF0aWMgaW50IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfbG9vcF9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jLTM2NC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz00NDA9c3RhdGljIHZvaWQgbnZtZV9sb29wX3Jlc2V0X2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy00NTgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NDU5OlxcdHJldCA9IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNDYwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYz01NTI9c3RhdGljIHN0cnVjdCBudm1lX2N0cmwgKm52bWVfbG9vcF9jcmVhdGVfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYy01OTUtXFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmM6NTk2OlxcdHJldCA9IG52bWVfbG9vcF9jb25maWd1cmVfYWRtaW5fcXVldWUoY3RybCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMtNTk3LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjA5LjIwNjIyOTk2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY2MzMzNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2ggZm9yIEJsb2NrIERyaXZlciBBbGlnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBlbnRyeSBwb2ludHM6IGBsb29wX2NvbmZpZ3VyZWAsIGBsb29wX2NoYW5nZV9mZGAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBuZXcgYWxpZ25tZW50IGxvZ2ljLiAgTGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBsb29wX2NvbmZpZ3VyZWAgZGlyZWN0bHkgY2FsbHMgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGFuZCB0aGF0LCBpbiB0dXJuLCBjYWxscyBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAuIEdvdCBpdC4gQW5kIGZvciBgemxvb3BgLCBgemxvb3BfY3RsX3dyaXRlYCBzZWVtcyB0byBnbyB0byBgemxvb3BfY3RsX2FkZGAsIHRoZW4gYHpsb29wX2luaXRfem9uZWAsIGFuZCBmaW5hbGx5IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAuXG5cbk5vdyBJIHNlZSwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2hlcmUgYHN0LmRpb19tZW1fYWxpZ25gIGNhbiBiZSB6ZXJvLiBUaGlzIGxlYWRzIHRvIGFuIGludGVnZXIgdW5kZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgYGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ25gLCBwb3RlbnRpYWxseSBzZXR0aW5nIGl0IHRvIGBVSU5UX01BWGAgb3IgYFVMT05HX01BWGAsIHdoaWNoIGlzIGNsZWFybHkgYSBwcm9ibGVtLiBTbywgdGhlIHBhdGNoIGlzIGNhcHBpbmcgaXQgYXQgYFBBR0VfU0laRSAtIDFgIHRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4gQSBnb29kIGZpeCBmb3IgdGhhdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgYmxvY2sgZHJpdmVyIGZpeCBhZmZlY3RpbmcgYm90aCBgbG9vcGAgYW5kIGB6bG9vcGAuICBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggYWxpZ25tZW50IGlzc3VlcywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCB0byBlbnN1cmUgc3RhYmlsaXR5LlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgZnV6emluZyBlZmZvcnRzLCBJIHdpbGwgZm9jdXMgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9jaGFuZ2VfZmRgIGZvciB0aGUgYGxvb3BgIGRyaXZlciwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIGZvciB0aGUgYHpsb29wYCBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MTQuMjcyNTY2NDc4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA1Mjg1MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2hhbmdlX2ZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTk2PXN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDctICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDg6ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpL19fbG9vcF9jbHJfZmQoKSBjYWxscy5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDktICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01Mjk9c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0MC0vKlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjU0MTogKiBsb29wX2NoYW5nZV9mZCBzd2l0Y2hlZCB0aGUgYmFja2luZyBzdG9yZSBvZiBhIGxvb3BiYWNrIGRldmljZSB0b1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0Mi0gKiBhIG5ldyBmaWxlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3BlcmF0aW5nIHN5c3RlbSBpbnN0YWxsZXJzIHRvIGZyZWUgdXBcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0Ny0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1NDg6c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU0OS1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMjEyPXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTctXFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxODpcXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMTktXFx0ICpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjEtXFx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcXFwic3RydWN0IGZpbGVcXFwiXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIyMjpcXHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMjMtXFx0ICogbG9vcCBkZXZpY2UuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU2OC1cXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1Njk6XFx0XFx0cmV0dXJuIGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NzAtXFx0Y2FzZSBMT09QX0NMUl9GRDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MTUuODc3ODU3OTkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTI0ODA4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYHpsb29wX2N0bF93cml0ZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHpsb29wX2N0bF93cml0ZWAgZnVuY3Rpb24uIEkgdmFndWVseSByZWNhbGwgc29tZSBzcGVjaWZpYyBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXQncyBlc3NlbnRpYWwgSSBjYW4gcXVpY2tseSBncmFzcCBpdC4gSSBrbm93IHRoZSBiYXNpYyBmbG93LCBidXQgSSBuZWVkIGEgcXVpY2sgcmVmcmVzaGVyIG9uIHRoZSBudWFuY2VzIG9mIGhvdyBgemxvb3BfY3RsX3dyaXRlYCBkZWFscyB3aXRoIHBvdGVudGlhbGx5IGNvbXBsZXggY29udHJvbCBwYXRocy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgYXNzdW1wdGlvbnMgaXQgbWFrZXMsIGVzcGVjaWFsbHkgYXJvdW5kIHJlc291cmNlIGFsbG9jYXRpb24gb3IgbG9ja2luZyBzdHJhdGVnaWVzLiBObyBwb2ludCByZS1pbnZlbnRpbmcgdGhlIHdoZWVsLCBsZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgaW50ZWdyYXRpb25zLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToxOC43OTAzNDE1MjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc1NTU1ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjUyPXN0YXRpYyBzdHJ1Y3Qgemxvb3BfY3RsX29wIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjYwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjYxOnN0YXRpYyBzc2l6ZV90IHpsb29wX2N0bF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NjItXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU1LVxcdC5yZWxlYXNlXFx0PSB6bG9vcF9jdGxfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc1NjpcXHQud3JpdGVcXHRcXHQ9IHpsb29wX2N0bF93cml0ZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1Ny1cXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjIwLjQxNzkwMzExOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg4NTAxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB6bG9vcF9jdGxfd3JpdGVgIEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYHpsb29wX2N0bF93cml0ZWAgaGVyZSDigJMgdGhhdCdzIHRoZSB3cml0ZSBoYW5kbGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIHpsb29wIGNvbnRyb2wgZmlsZS4gUmlnaHQsIHRoYXQncyB3aGF0IEkgdGhvdWdodC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgd2UncmUgZ29pbmcgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byBpbmZsdWVuY2UgYmVoYXZpb3IuIEJlZm9yZSBkaWdnaW5nIGluIGFueSBkZWVwZXIsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCBJIHNob3VsZCBrbm93IG9mZiB0aGUgdG9wIG9mIG15IGhlYWQgYnV0IGRvbid0IHdhbnQgdG8gcmVseSBvbiByZWNhbGwuIExldCdzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGxvb3Bfc2V0X2ZkYCBpcyBzdGlsbCBpbiBwbGF5LCB0aGF0IHRoZSBjb3JlIG1lY2hhbmlzbSBJJ20gZmFtaWxpYXIgd2l0aCBoYXNuJ3QgYmVlbiBkZXByZWNhdGVkIG9yIHJhZGljYWxseSBhbHRlcmVkLiBBIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIGZ1bmRhbWVudGFscyBzdGlsbCBhcHBseSwgYmVmb3JlIEkgY2FuIGhhdmUgY29uZmlkZW5jZSBpbiB0aGUgcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToyMy45MDY0MDg1NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYwMzE2MTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3Bfc2V0X2ZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToyNS41MjI0NDg3NDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNjUzMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgYExPT1BfU0VUX0ZEYCBJT0NUTCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2xlYXI6IHRoYXQgYExPT1BfU0VUX0ZEYCBpb2N0bCBjYWxsIGxlYWRzIGRpcmVjdGx5IGludG8gYGxvb3BfY29uZmlndXJlYC4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgb2YgY291cnNlLCBiZWNhdXNlIGBMT09QX1NFVF9GRGAgaXMgYWxsIGFib3V0IGNvbm5lY3RpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYSBsb29wIGRldmljZSwgYW5kIGBsb29wX2NvbmZpZ3VyZWAgaXMgd2hlcmUgdGhlIGRldmljZSdzIGNoYXJhY3RlcmlzdGljcyBhcmUsIHdlbGwsIGNvbmZpZ3VyZWQsIGluY2x1ZGluZyBiaW5kaW5nIGEgZmlsZSB0byB0aGUgbG9vcCBkZXZpY2UuIFRoaXMgcmVpbmZvcmNlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEkgZXhwZWN0LiBOb3cgdGhlIHJlYWwgcXVlc3Rpb24gYmVjb21lcywgaG93IGlzIGBsb29wX2NvbmZpZ3VyZWAgaW1wbGVtZW50ZWQgYW5kIHdoYXQgaW50ZXJuYWwgY2FsbHMgbWlnaHQgaXQgbWFrZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMToyOC40NTg5ODU2NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzkyMDgxODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTE9PUF9TRVRfRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0PTExMT1pbnN0YWJpbGl0eS4gVGhpcyBpcyBjb25jZXB0dWFsbHkgc2ltaWxhciB0byB0aGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdDoxMTI6YGBMT09QX1NFVF9GRGBgIGlvY3RsLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBgQ0FQX1NZU19BRE1JTmBgLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0xMTMtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTM5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0Ni1cXHRzd2l0Y2ggKGNtZCkge1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NDc6XFx0Y2FzZSBMT09QX1NFVF9GRDoge1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDgtXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3MDM9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyNC1cXHRcXHRmYWxsdGhyb3VnaDtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzI1OlxcdGNhc2UgTE9PUF9TRVRfRkQ6XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTcyNi1cXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xvb3AuaD03Nz1zdHJ1Y3QgbG9vcF9jb25maWcge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xvb3AuaC0xMDMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2xvb3AuaDoxMDQ6I2RlZmluZSBMT09QX1NFVF9GRFxcdFxcdDB4NEMwMFxcbmluY2x1ZGUvdWFwaS9saW51eC9sb29wLmgtMTA1LSNkZWZpbmUgTE9PUF9DTFJfRkRcXHRcXHQweDRDMDFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MzAuMDk4MjA1NjMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzAyOTAwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyoqXG5cbk9rYXksIHNvIEknbSBjb25uZWN0aW5nIHRoZSBkb3RzIGhlcmUuIGBMT09QX1NFVF9GRGAgKmRlZmluaXRlbHkqIGNhbGxzIGBsb29wX2NvbmZpZ3VyZWAuIFRoYXQncyB0aGUga2V5LiBTbywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGxvb3BfY29uZmlndXJlYCwgZGVmaW5pdGVseSwgYW5kIGFsc28gYGxvb3BfY2hhbmdlX2ZkYCBhbmQgYHpsb29wX2N0bF93cml0ZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaW4gdGhpcyBjb250ZXh0LlxuXG5BbmQgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFRob3NlIGFyZSB0aGUgdHdvIHJlbGV2YW50IGNvbmZpZ3MuXG5cbldhaXQgYSBzZWNvbmQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBwYXRoLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgQkxLX0RFVl9aT05FRF9MT09QYCBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBieSBza2lwcGluZyB0aGF0IHN0ZXAuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGVsdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjMzLjg2ODQ5ODEwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwODQwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cXHR0cmlzdGF0ZSBcXFwiWm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjMzLjkyMjU4NjU5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTExNzE3MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMzU2LiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBibG9jayBkZXZpY2VzIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCB0aGVyZSwgcGVyaGFwcyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBvciBhIGRlZmluaXRpb24gcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYmxvY2sgZGV2aWNlcy4gS25vd2luZyB0aGUgZGV0YWlscyBoZXJlIHdpbGwgaGVscCBtZSB0by4uLiB3ZWxsLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGRlYnVnIGEgZHJpdmVyLCBjdXN0b21pemUgYSBidWlsZCwgdW5kZXJzdGFuZCBhIHNwZWNpZmljIHBsYXRmb3JtJ3MgY29uZmlndXJhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MzcuNDM0MzA1ODIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0ICBTYXkgTiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcXG4gMzUxOlxcdFxcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXFxuIDM1MjpcXHRcXHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuIDM1NTpcXHRcXG4gMzU2OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4gMzU3OlxcdFxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMzU4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcXG4gMzYxOlxcdFxcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcXG4gMzYyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXFxuIDM2MzpcXHRcXHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXFxuIDM2NDpcXHRcXHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcXG4gMzY1OlxcdFxcdCAgbGlrZTpcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbiAzNjg6XFx0XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuIDM2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6MzcuNDM0MzgxMDAxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDA0NjI5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gYGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRGAuIFRoYXQncyB0aGUga2V5LiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIGBCTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkIGluIG91ciBjb25maWd1cmF0aW9uLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAuIEFsd2F5cyBnb29kIHRvIHNlZSBpZiBlbmFibGluZyBvbmUgdGhpbmcgaGFzIGFueSB1bmV4cGVjdGVkIGtub2NrLW9uIGVmZmVjdHMgZWxzZXdoZXJlLiBJdCdzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo0MS41NzQ4NDY2NzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRjb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuIDE0MTpcXHRcXHRib29sXFxuIDE0MjpcXHRcXHRkZWZhdWx0IEJMS19ERVZfVUJEXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdGNvbmZpZyBCTEtfREVWX0xPT1BcXG4gMTQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMTQ2OlxcdFxcdGhlbHBcXG4gMTQ3OlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgYSByZWd1bGFyIGZpbGUgYXMgYSBibG9ja1xcbiAxNDg6XFx0XFx0ICBkZXZpY2U7IHlvdSBjYW4gdGhlbiBjcmVhdGUgYSBmaWxlIHN5c3RlbSBvbiB0aGF0IGJsb2NrIGRldmljZSBhbmRcXG4gMTQ5OlxcdFxcdCAgbW91bnQgaXQganVzdCBhcyB5b3Ugd291bGQgbW91bnQgb3RoZXIgYmxvY2sgZGV2aWNlcyBzdWNoIGFzIGhhcmRcXG4gMTUwOlxcdFxcdCAgZHJpdmUgcGFydGl0aW9ucywgQ0QtUk9NIGRyaXZlcyBvciBmbG9wcHkgZHJpdmVzLiBUaGUgbG9vcCBkZXZpY2VzXFxuIDE1MTpcXHRcXHQgIGFyZSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIG51bWJlciA3IGFuZCB0eXBpY2FsbHlcXG4gMTUyOlxcdFxcdCAgY2FsbGVkIC9kZXYvbG9vcDAsIC9kZXYvbG9vcDEgZXRjLlxcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHQgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoZWNrIGFuIElTTyA5NjYwIGZpbGUgc3lzdGVtIGJlZm9yZVxcbiAxNTU6XFx0XFx0ICBidXJuaW5nIHRoZSBDRCwgb3IgaWYgeW91IHdhbnQgdG8gdXNlIGZsb3BweSBpbWFnZXMgd2l0aG91dCBmaXJzdFxcbiAxNTY6XFx0XFx0ICB3cml0aW5nIHRoZW0gdG8gZmxvcHB5LiBGdXJ0aGVybW9yZSwgc29tZSBMaW51eCBkaXN0cmlidXRpb25zIGF2b2lkXFxuIDE1NzpcXHRcXHQgIHRoZSBuZWVkIGZvciBhIGRlZGljYXRlZCBMaW51eCBwYXJ0aXRpb24gYnkga2VlcGluZyB0aGVpciBjb21wbGV0ZVxcbiAxNTg6XFx0XFx0ICByb290IGZpbGUgc3lzdGVtIGluc2lkZSBhIERPUyBGQVQgZmlsZSB1c2luZyB0aGlzIGxvb3AgZGV2aWNlXFxuIDE1OTpcXHRcXHQgIGRyaXZlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6NDEuNTc0OTIzMTAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTY0MTIwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIExvb3AgRGV2aWNlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBsb29wIGRldmljZSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHpvbmVkIGxvb3BzLiBJIHNlZSB0aGVyZSBhcmUgbm8gZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAgb24gdGhlIHN1cmZhY2UuIFRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3aGljaCBhcmUgYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgLCBhbmQgYEJMS19ERVZfWk9ORURgLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzIHRvIHVzZSwga2VlcGluZyBpbiBtaW5kIHRoZSBndWlkYW5jZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJJ3ZlIG5vdGVkIHRocmVlIGtleSBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgbG9vcF9jb25maWd1cmVgLCBgbG9vcF9jaGFuZ2VfZmRgLCBhbmQgYHpsb29wX2N0bF93cml0ZWAuXG5cbkluaXRpYWxseSwgSSBzZWUgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBzdGF0aWMuIEhtbSwgdGhhdCdzIG5vdCBpZGVhbCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZS4gSSBpbml0aWFsbHkgdGhvdWdodCBpdCBtaWdodCBiZSBleHBvcnRlZCwgYnV0IG5vLCBpdCdzIHN0YXRpYy4gTGV0IG1lIHNlZSBpZiBgemxvb3BfY3RsX2FkZGAgaXMgYSBiZXR0ZXIgb3B0aW9uLiBOb3BlLCB0aGF0J3MgYWxzbyBzdGF0aWMuIEhvd2V2ZXIsIHdhaXQsIEkgcmVtZW1iZXIgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBhY3R1YWxseSB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agd3JpdGUgaGFuZGxlci4gVGhhdCdzIGEgc3Ryb25nIGVudHJ5IHBvaW50IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gY29udGV4dC4gU28sIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5gbG9vcF9jb25maWd1cmVgIGFuZCBgbG9vcF9jaGFuZ2VfZmRgIGFyZSBhbHNvIHN0YXRpYywgc28gdGhleSBuZWVkIGZ1cnRoZXIgY29uc2lkZXJhdGlvbi4gVGhlIHByb21wdCBzYXlzIHRoYXQgdGhlIHByZWZlcnJlZCBmdW5jdGlvbnMgc2hvdWxkIGJlIG5vbi1zdGF0aWMuIEhvd2V2ZXIsIGBsb29wX2NvbmZpZ3VyZWAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgYmRfcHJlcGFyZV90b19jbGFpbWAuIFNpbmNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJ3QgYmUgaW5saW5lZC4gVGhhdOKAmXMgYSBnb29kIHNpZ24uIFNpbWlsYXJseSwgYGxvb3BfY2hhbmdlX2ZkYCBpcyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBmcm9tIGBsb19pb2N0bGAsIHdoaWNoIGlzIGEgc3dpdGNoIHN0YXRlbWVudC4gVGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBpbmxpbmUgaW4gdGhpcyBjYXNlIGVpdGhlci5cblxuYHpsb29wX2N0bF93cml0ZWAgaXMgYWxzbyBwYXNzZWQgYXMgcGFydCBvZiBgZmlsZV9vcGVyYXRpb25zYCwgc28gdGhhdCB3b24ndCBiZSBpbmxpbmVkLlxuXG5MZXQgbWUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm5vbiotc3RhdGljIGVudHJ5IHBvaW50cy5cblxuRm9yIHRoZSBiYXNpYyBsb29wIGZ1bmN0aW9uYWxpdHksIGBsb19pb2N0bGAgaXMgc3RhdGljIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgc28gbGV0IG1lIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgYW5kIGNoZWNrIGBsb19pb2N0bGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzkxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6NDguMzcxMzM4NjA2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0NTE1MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTEyMTI9c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNi1cXHQvKlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyMTc6XFx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxOC1cXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNz1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUzOC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTM5OnN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDAtXFx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzAzPXN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MjgtXFx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTcyOTpcXHRcXHRlcnIgPSBsb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTczMC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc5My1cXHQucmVsZWFzZSA9XFx0bG9fcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzk0OlxcdC5pb2N0bCA9XFx0bG9faW9jdGwsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc5NS0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo0OS45OTU4NTg2MThaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3MDMzMzg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29wIERldmljZSBEaXJlY3QtSU8gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgbG9faW9jdGxgIGJlaW5nIHN0YXRpYyBpc24ndCBhIHByb2JsZW0sIGl0J3MgcGFydCBvZiBgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHVzaW5nIHRob3NlIGxhcmdlIGZ1bmN0aW9ucyBsaWtlIGBsb29wX2NvbmZpZ3VyZWAsIGBsb29wX2NoYW5nZV9mZGAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBpcyBwZXJmZWN0bHkgYWNjZXB0YWJsZSwgYXMgdGhleSBkZWZpbml0ZWx5IHdvbid0IGJlIGlubGluZWQuIEkgd2FzIHJpZ2h0IHRvIHJldmlldyB0aGUgcGF0Y2ggYWdhaW4gLSBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlOlxuXG5gYGBjXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuYGBgXG5cblJpZ2h0LCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGZvY3VzaW5nIG9uIGZpeGluZyBhIGJ1ZyBpbiBkaXJlY3QtSU8gYWxpZ25tZW50IHdoZW4gdXNpbmcgbG9vcCBkZXZpY2VzLiBJdCdzIGEgY2xlYXIgaW1wcm92ZW1lbnQgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0IGlzIHdvcnRoIGZ1enppbmcgdGhvcm91Z2hseS4gTXkgaW5zdGluY3Qgd2FzIHNwb3Qtb24uXG5cbkknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcyOCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTE6NTcuMDY2MTk2MzQ5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NjI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcF9jb25maWd1cmVcIixcbiAgICBcImxvb3BfY2hhbmdlX2ZkXCIsXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBkaXJlY3QtaW8gYWxpZ25tZW50IGhhbmRsaW5nIGZvciBsb29wIGFuZCB6bG9vcCBkZXZpY2VzIGJ5IHByZXZlbnRpbmcgYW4gdW5kZXJmbG93IHdoZW4gdGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgYSB6ZXJvZWQgZGlvX21lbV9hbGlnbiwgYW5kIGNhcHBpbmcgaXQgYXQgUEFHRV9TSVpFIC0gMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYmxvY2sgZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGxvb3AgZGV2aWNlIGlvY3RscyBhbmQgemxvb3AgY29udHJvbCBmaWxlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX2NoYW5nZV9mZFwiLFxuICAgIFwiemxvb3BfY3RsX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gZGlyZWN0LWlvIGFsaWdubWVudCBoYW5kbGluZyBmb3IgbG9vcCBhbmQgemxvb3AgZGV2aWNlcyBieSBwcmV2ZW50aW5nIGFuIHVuZGVyZmxvdyB3aGVuIHRoZSBmaWxlIHN5c3RlbSByZXBvcnRzIGEgemVyb2VkIGRpb19tZW1fYWxpZ24sIGFuZCBjYXBwaW5nIGl0IGF0IFBBR0VfU0laRSAtIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJsb2NrIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBsb29wIGRldmljZSBpb2N0bHMgYW5kIHpsb29wIGNvbnRyb2wgZmlsZSB3cml0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjExOjU3LjEzODY2NTMwN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzUzNTY3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo1Ny4xMzkxMjU5MzZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM1MzQ4OTI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgdW5kZXJmbG93IGJ1ZyB3aGVyZSBgc3QuZGlvX21lbV9hbGlnbmAgY291bGQgYmUgMCwgcmVzdWx0aW5nIGluIGBzdC5kaW9fbWVtX2FsaWduIC0gMWAgZXZhbHVhdGluZyB0byBhIGh1Z2UgdmFsdWUgKGUuZy4sIGAweGZmZmZmZmZmYCkuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWxpZ25tZW50IGNhbGN1bGF0aW9ucyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMuIFRoZSBmaXggYWRkcyBhIGNoZWNrIGZvciBgc3QuZGlvX21lbV9hbGlnbiAhPSAwYCBhbmQgYm91bmRzIHRoZSBhbGlnbm1lbnQgdG8gYFBBR0VfU0laRSAtIDFgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBub3IgYXJlIHRoZXJlIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSB0aGUgdW5kZXJmbG93IHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWQ3ZGE4ZTM3OTA0MTk2NmFhZTA4MjYzZGM0ZWE2N2JkYzJmODY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTA6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA4NjM5ZmEzNGI4NDcwLi5jYmYxZTJjZTI3MTI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNDU4LDEyICs0NTgsMTQgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbW9pbmdcbiBcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxuLVx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuK1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXG4rXHQgKiBmaWxlIGNhbid0IGJlIHVzZWQgZm9yIGRpcmVjdC1pbyBhdCBhbGwsIHNvIGZhbGwgYmFjayB0byB0aGUgYmxvY2tcbitcdCAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXHUwMDI2XHUwMDI2IHN0LmRpb19tZW1fYWxpZ24pIHtcbiBcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNDMyM2FjMTA4Y2FlOC4uZjBjYTIyMTUyNGRiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMTA0MiwxMiArMTA0MiwxNCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbiBcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmdcbiBcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4gXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxuLVx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuK1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLiAgVGhlIGZpbGUgc3lzdGVtIHJlcG9ydHMgemVyb2VkIGFsaWdubWVudHMgaWYgdGhlXG4rXHQgKiBmaWxlIGNhbid0IGJlIHVzZWQgZm9yIGRpcmVjdC1pbyBhdCBhbGwsIHNvIGZhbGwgYmFjayB0byB0aGUgYmxvY2tcbitcdCAqIGRldmljZSBsaW1pdHMgaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbitcdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSBcdTAwMjZcdTAwMjYgc3QuZGlvX21lbV9hbGlnbikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4rXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gbWluKHN0LmRpb19tZW1fYWxpZ24gLSAxLCBQQUdFX1NJWkUgLSAxKTtcbiBcdH0gZWxzZSBpZiAoc2JfYmRldikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbiBcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMTo1Ny4xMzkxMjY3NTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MzQ4Njg3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlZ2VyIFVuZGVyZmxvdyBpbiBMb29wIGFuZCBabG9vcCBEcml2ZXJzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBmaXhpbmcgYW4gaW50ZWdlciB1bmRlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiB0aGUgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGFuZCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxvb3AgYW5kIHpsb29wIGJsb2NrIGRldmljZSBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZywgYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBzdC5kaW9fbWVtX2FsaWduYCwgYSBgdTMyYCBtZW1iZXIgd2l0aGluIGEgYHN0cnVjdCBrc3RhdGAsIG1pZ2h0IGJlIHplcm8uIFRoaXMgbGlrZWx5IGhhcHBlbnMgd2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSByZXBvcnRzIHRoYXQgZGlyZWN0IEkvTyBpc24ndCBwb3NzaWJsZSAoZS5nLiwgemVyb2VkIGFsaWdubWVudHMpLiBUaGUgcHJvYmxlbWF0aWMgcGFydCBsaWVzIGluIHRoZSBzdWJ0cmFjdGlvbjogYHN0LmRpb19tZW1fYWxpZ24gLSAxYC4gSWYgYHN0LmRpb19tZW1fYWxpZ25gIGlzIHplcm8sIHRoaXMgbGVhZHMgdG8gYW4gaW50ZWdlciB1bmRlcmZsb3csIHJlc3VsdGluZyBpbiBhIGxhcmdlIHZhbHVlIChgMHhmZmZmZmZmZmAgb3Igc2ltaWxhciksIHdoaWNoIGlzIGFuIGludmFsaWQgb3Igb3V0LW9mLWJvdW5kcyBhbGlnbm1lbnQuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdG8gY2hlY2sgZm9yIGBzdC5kaW9fbWVtX2FsaWduYCBiZWluZyBub24temVybywgYW5kIHRoZW4gdXNlIGBtaW4oc3QuZGlvX21lbV9hbGlnbiAtIDEsIFBBR0VfU0laRSAtIDEpYCBpbnN0ZWFkLiBUaGlzIGVmZmVjdGl2ZWx5IGNsYW1wcyB0aGUgYWxpZ25tZW50IHZhbHVlLlxuXG5JIGRpZCBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIG5vdCB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gTG9va2luZyBhdCBob3cgYHN0YCBpcyBwb3B1bGF0ZWQgdGhyb3VnaCBgdmZzX2dldGF0dHJgIGFuZCB0aGF0IGl0J3MgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgdGhlIGNoZWNrcyBvbiByZXR1cm4gbWFrZSBpdCBjbGVhciB0aGF0IGl0J3Mgbm90IHVuaW5pdGlhbGl6ZWQuIFRoZSBjYWxsIHRvIGB2ZnNfZ2V0YXR0cmAgaGFuZGxlcyB0aGF0LiBUaGUgcGF0Y2ggY29ycmVjdGx5IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCBvbmx5IHByb2NlZWRzIGlmIHRoZSBzdGF0IGRhdGEgaXMgdmFsaWQsIG9yIHRoZSBgU1RBVFhfRElPQUxJR05gIGZsYWcgaXMgc2V0LlxuXG5UaGUgcmVhbCBpc3N1ZSBpcyB0aGUgaW50ZWdlciB1bmRlcmZsb3cgYW5kIHRoZSByZXN1bHRpbmcgaW52YWxpZCBhbGlnbm1lbnQgdmFsdWUuIFRoaXMgY291bGQsIGluIHRoZW9yeSwgdHJpZ2dlciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBvdGhlciBjcmFzaGVzLCBhbmQgS0FTQU4vVUJTQU4gb3IgZ2VuZXJhbCBmdXp6aW5nIHdvdWxkIGNlcnRhaW5seSBjYXRjaCB0aGVzZS4gU2luY2UgdGhpcyBpc24ndCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNiwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoxMC42NzM5OTg1MjdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgdW5kZXJmbG93IGJ1ZyB3aGVyZSBgc3QuZGlvX21lbV9hbGlnbmAgY291bGQgYmUgMCwgcmVzdWx0aW5nIGluIGBzdC5kaW9fbWVtX2FsaWduIC0gMWAgZXZhbHVhdGluZyB0byBhIGh1Z2UgdmFsdWUgKGUuZy4sIGAweGZmZmZmZmZmYCkuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWxpZ25tZW50IGNhbGN1bGF0aW9ucyBhbmQgc3Vic2VxdWVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMuIFRoZSBmaXggYWRkcyBhIGNoZWNrIGZvciBgc3QuZGlvX21lbV9hbGlnbiAhPSAwYCBhbmQgYm91bmRzIHRoZSBhbGlnbm1lbnQgdG8gYFBBR0VfU0laRSAtIDFgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBub3IgYXJlIHRoZXJlIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSB0aGUgdW5kZXJmbG93IHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHVuZGVyZmxvdyBidWcgd2hlcmUgYHN0LmRpb19tZW1fYWxpZ25gIGNvdWxkIGJlIDAsIHJlc3VsdGluZyBpbiBgc3QuZGlvX21lbV9hbGlnbiAtIDFgIGV2YWx1YXRpbmcgdG8gYSBodWdlIHZhbHVlIChlLmcuLCBgMHhmZmZmZmZmZmApLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGFsaWdubWVudCBjYWxjdWxhdGlvbnMgYW5kIHN1YnNlcXVlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzLiBUaGUgZml4IGFkZHMgYSBjaGVjayBmb3IgYHN0LmRpb19tZW1fYWxpZ24gIT0gMGAgYW5kIGJvdW5kcyB0aGUgYWxpZ25tZW50IHRvIGBQQUdFX1NJWkUgLSAxYC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgbm9yIGFyZSB0aGVyZSBhbnkga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMgcmVzdWx0aW5nIGZyb20gdGhlIHVuZGVyZmxvdyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowmrp4t[1] Phase: Succeeded StartedAt: 2026-08-10 21:12:21 +0000 UTC FinishedAt: 2026-08-10 21:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 21:12:21 +0000 UTC FinishedAt: 2026-08-10 21:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2] Phase: Succeeded StartedAt: 2026-08-10 21:12:21 +0000 UTC FinishedAt: 2026-08-11 00:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 21:12:21 +0000 UTC FinishedAt: 2026-08-11 00:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 21:12:21 +0000 UTC FinishedAt: 2026-08-10 21:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 21:12:21 +0000 UTC FinishedAt: 2026-08-10 21:12:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmrp4t/series-workflowmrp4t-convert-artifact-3846204620/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 21:12:31 +0000 UTC FinishedAt: 2026-08-10 21:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 21:12:31 +0000 UTC FinishedAt: 2026-08-10 21:30:17 +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:*8ba63da5-1d91-462e-9258-b1008fbfeae1,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-workflowmrp4t/series-workflowmrp4t-convert-artifact-3846204620/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": "0c45c5bf-4c50-40f4-8cbb-8be308a85a3d", "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-workflowmrp4t/series-workflowmrp4t-build-action-3675155194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 21:12:31 +0000 UTC FinishedAt: 2026-08-10 21:30:07 +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:*8ba63da5-1d91-462e-9258-b1008fbfeae1,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-workflowmrp4t/series-workflowmrp4t-convert-artifact-3846204620/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": "0c45c5bf-4c50-40f4-8cbb-8be308a85a3d", "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-workflowmrp4t/series-workflowmrp4t-build-action-3675155194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 21:30:17 +0000 UTC FinishedAt: 2026-08-10 21:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 21:30:17 +0000 UTC FinishedAt: 2026-08-10 21:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 21:30:17 +0000 UTC FinishedAt: 2026-08-10 21:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 21:30:17 +0000 UTC FinishedAt: 2026-08-10 21:30:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmrp4t/series-workflowmrp4t-convert-artifact-4259754251/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 21:30:27 +0000 UTC FinishedAt: 2026-08-10 21:32:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 21:30:27 +0000 UTC FinishedAt: 2026-08-10 21:32:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c45c5bf-4c50-40f4-8cbb-8be308a85a3d,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-workflowmrp4t/series-workflowmrp4t-build-action-3675155194/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-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 21:32:40 +0000 UTC FinishedAt: 2026-08-10 21:32:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 21:32:40 +0000 UTC FinishedAt: 2026-08-10 21:32:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 21:32:40 +0000 UTC FinishedAt: 2026-08-10 21:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 21:32:40 +0000 UTC FinishedAt: 2026-08-10 21:49:00 +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:*8ba63da5-1d91-462e-9258-b1008fbfeae1,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-workflowmrp4t/series-workflowmrp4t-convert-artifact-4259754251/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": "24544671-97ad-487a-812c-32ca4baa4877", "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-workflowmrp4t/series-workflowmrp4t-build-action-2634108847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 21:32:40 +0000 UTC FinishedAt: 2026-08-10 21:48:50 +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:*8ba63da5-1d91-462e-9258-b1008fbfeae1,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-workflowmrp4t/series-workflowmrp4t-convert-artifact-4259754251/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": "24544671-97ad-487a-812c-32ca4baa4877", "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-workflowmrp4t/series-workflowmrp4t-build-action-2634108847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 21:49:00 +0000 UTC FinishedAt: 2026-08-10 21:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 21:49:00 +0000 UTC FinishedAt: 2026-08-10 21:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 21:49:00 +0000 UTC FinishedAt: 2026-08-10 21:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 21:49:00 +0000 UTC FinishedAt: 2026-08-10 21:51:04 +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:*24544671-97ad-487a-812c-32ca4baa4877,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-workflowmrp4t/series-workflowmrp4t-build-action-2634108847/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-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 21:51:14 +0000 UTC FinishedAt: 2026-08-11 00:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 21:51:14 +0000 UTC FinishedAt: 2026-08-11 00:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"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:*0c45c5bf-4c50-40f4-8cbb-8be308a85a3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*24544671-97ad-487a-812c-32ca4baa4877,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-workflowmrp4t/series-workflowmrp4t-build-action-3675155194/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-workflowmrp4t/series-workflowmrp4t-build-action-2634108847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 21:51:14 +0000 UTC FinishedAt: 2026-08-10 21:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 21:51:14 +0000 UTC FinishedAt: 2026-08-10 21:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"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-workflowmrp4t/series-workflowmrp4t-convert-artifact-1944052644/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 21:51:14 +0000 UTC FinishedAt: 2026-08-10 21:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 21:51:14 +0000 UTC FinishedAt: 2026-08-10 21:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 21:51:14 +0000 UTC FinishedAt: 2026-08-10 21:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 21:51:24 +0000 UTC FinishedAt: 2026-08-11 00:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrp4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_configure","loop_change_fd","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"44d7c598-ee45-48ad-bd8c-d2bbea6fb038","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 21:51:24 +0000 UTC FinishedAt: 2026-08-11 00:58:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c45c5bf-4c50-40f4-8cbb-8be308a85a3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*24544671-97ad-487a-812c-32ca4baa4877,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-workflowmrp4t/series-workflowmrp4t-build-action-3675155194/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-workflowmrp4t/series-workflowmrp4t-build-action-2634108847/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-workflowmrp4t/series-workflowmrp4t-convert-artifact-1944052644/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,}